package middleware import ( "github.com/gin-gonic/gin" "strconv" "strings" "ycmediakit/internal/pkg/result" "ycmediakit/internal/pkg/server/systemServer" ) // HttpInterceptor 可自定义鉴权等操作 // TODO func HttpInterceptor() gin.HandlerFunc { return func(c *gin.Context) { c.Next() } } // ProbePayloadInterceptor 探测 ffmpeg 命令服务器是否有资源得以运行 // TODO func ProbePayloadInterceptor(ps *systemServer.PayloadServer) gin.HandlerFunc { return func(c *gin.Context) { cfg := ps.Cfg if strings.Contains(c.FullPath(), "/start") { for i := 0; i < cfg.MaxRetryTime; i++ { <-ps.Wait() p := ps.GetPayload() if p.Cpu.Usage <= cfg.MaxCpuUsage && p.Memory.Usage <= cfg.MaxMemoryUsage { c.Next() return } } errMsg := "cpu or memory overload, retry time " + strconv.Itoa(cfg.MaxRetryTime) result.Forbidden.WithMsg(errMsg).Failure(c) c.Abort() return } c.Next() } }