- 新增 ops 错误日志记录器(ops_error_logger.go) - 新增 ops 主处理器(ops_handler.go) - 新增告警管理处理器(ops_alerts_handler.go) - 新增仪表板处理器(ops_dashboard_handler.go) - 新增实时监控处理器(ops_realtime_handler.go) - 新增配置管理处理器(ops_settings_handler.go) - 新增 WebSocket 处理器(ops_ws_handler.go) - 扩展设置 DTO 支持 ops 配置 - 新增客户端请求 ID 中间件(client_request_id.go) - 新增 WebSocket 查询令牌认证中间件(ws_query_token_auth.go) - 更新管理员认证中间件支持 ops 路由 - 注册 handler 依赖注入
32 lines
698 B
Go
32 lines
698 B
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/ctxkey"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// ClientRequestID ensures every request has a unique client_request_id in request.Context().
|
|
//
|
|
// This is used by the Ops monitoring module for end-to-end request correlation.
|
|
func ClientRequestID() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
if c.Request == nil {
|
|
c.Next()
|
|
return
|
|
}
|
|
|
|
if v := c.Request.Context().Value(ctxkey.ClientRequestID); v != nil {
|
|
c.Next()
|
|
return
|
|
}
|
|
|
|
id := uuid.New().String()
|
|
c.Request = c.Request.WithContext(context.WithValue(c.Request.Context(), ctxkey.ClientRequestID, id))
|
|
c.Next()
|
|
}
|
|
}
|
|
|