✨ feat(status): 新增请求日志并重设计状态页

- 新增 server.request_log 配置:记录业务请求元数据(IP/方法/路径/状态/耗时,
  key 自动脱敏)与 4xx/5xx 错误摘要(前 4KB),按保留天数自动清理
- 移除 /self-info 与 /vacuum 接口及相关文档
- 状态页重设计:毛玻璃卡片+吸顶玻璃栏、服务状态条、KPI 卡与请求分类
  条形图、可折叠 API 文档分组、行内测试面板;深浅色分别调校,
  含 reduced-motion / reduced-transparency / 无 backdrop-filter 兜底
This commit is contained in:
chenxin committed 2026-10-09 18:03:02 +08:00
1 parent bf49805bb6
commit bfb4290c15
11 files changed
+1060 -838

No files matched your search

+8 -4
View File
@@ -56,6 +56,12 @@ func main() {
fqapi.StartCacheCleanup()
defer fqapi.StopCacheCleanup() // 程序退出时停止清理任务
// 启动请求日志(server.request_log.enabled 开启时生效)
if err := fqapi.InitRequestLog(); err != nil {
logger.Warning("请求日志初始化失败: " + err.Error())
}
defer fqapi.CloseRequestLog() // 程序退出时落盘剩余日志
// 初始化算法切换器
initAlgorithm()
@@ -139,14 +145,12 @@ func initDeviceKeyPool() error {
func setupRoutes() {
http.HandleFunc("/", handlers.HandleMain)
http.HandleFunc("/status", handlers.RequireAccessKey(handlers.HandleStatus))
http.HandleFunc("/self-info", handlers.RequireAccessKey(handlers.HandleSelfInfo))
http.HandleFunc("/vacuum", handlers.RequireAccessKey(handlers.HandleVacuum))
http.HandleFunc("/healthz", handlers.HandleHealth)
// API端点:限流 + protect_all 鉴权链(代理路由不鉴权,URL 由服务端生成不含 key)
// API端点:请求日志 + 限流 + protect_all 鉴权链(代理路由不鉴权,URL 由服务端生成不含 key)
wrap := func(h http.HandlerFunc) http.HandlerFunc {
return handlers.RateLimit(handlers.OptionalAccessKey(h))
return handlers.LogRequestMiddleware(handlers.RateLimit(handlers.OptionalAccessKey(h)))
}
http.HandleFunc("/search", wrap(handlers.HandleSearch))
http.HandleFunc("/detail", wrap(handlers.HandleDetail))