logo
0
0
WeChat Login

EdgeOne Badge Service

基于 Gin 和 Teo Go SDK 实现的 CDN 徽章服务。

功能特性

  • 监听路径 /cdn-cgi/package/{path}/v1/package/{path}/badge
  • 调用 Teo API 查询 CDN 请求数据
  • 支持 Redis 和内存缓存
  • 生成 SVG 徽章显示请求量
  • 6小时缓存 TTL(可配置)

环境变量

变量名必填说明默认值
SECRET_ID腾讯云 SecretId-
SECRET_KEY腾讯云 SecretKey-
ZONE_IDTeo Zone ID-
DOMAIN域名过滤,如果设置将只查询该域名的数据-
REDIS_URLRedis 连接 URL使用内存缓存
CACHE_TTL缓存 TTL(秒)21600 (6小时)
PORT服务端口8080

安装和运行

  1. 复制环境变量配置:
cp .env.example .env
  1. 编辑 .env 文件,填入你的配置:
SECRET_ID=your_secret_id_here SECRET_KEY=your_secret_key_here ZONE_ID=your_zone_id_here
  1. 安装依赖:
go mod tidy
  1. 运行服务:
go run main.go

API 端点

GET /cdn-cgi/package/{path}

查询指定路径的 CDN 请求量并返回徽章

GET /v1/package/{path}/badge

同上,不同的路由格式

示例

# 查询根路径请求量 curl http://localhost:8080/cdn-cgi/package/ # 查询特定路径请求量 curl http://localhost:8080/cdn-cgi/package/api/users curl http://localhost:8080/v1/package/api/users/badge

响应

成功时返回 SVG 徽章:

<svg xmlns="http://www.w3.org/2000/svg" width="140" height="20" role="img" aria-label="BringCDN: 1.2k req/month"> <title>BringCDN: 1.2k req/month</title> <g shape-rendering="crispEdges"> <rect width="70" height="20" fill="#555"/> <rect x="70" width="70" height="20" fill="#ff5627"/> </g> <g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"> <text x="350" y="140" transform="scale(.1)" fill="#fff" textLength="520">BringCDN</text> <text x="1050" y="140" transform="scale(.1)" fill="#fff" textLength="650">1.2k req/month</text> </g> </svg>

错误时返回红色徽章并设置错误头信息。

缓存策略

  • 优先使用 Redis 缓存(如果配置)
  • 降级到内存缓存
  • 缓存键格式:badge:{path}
  • 默认 TTL 6小时

数据查询

  • 查询过去30天的 L7 请求数据
  • 按天聚合,取最大值
  • 使用 URL 前缀过滤

About

No description, topics, or website provided.
Language
Go93.4%
Dockerfile6.6%