package main import ( "context" "model-gateway/model/dto" "model-gateway/service/task" "os" "os/signal" "syscall" "time" "model-gateway/controller" "gitea.redpowerfuture.com/red-future/common/http" "gitea.redpowerfuture.com/red-future/common/jaeger" _ "gitea.redpowerfuture.com/red-future/common/swagger" _ "github.com/gogf/gf/contrib/drivers/pgsql/v2" _ "github.com/gogf/gf/contrib/nosql/redis/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/grpool" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() defer jaeger.ShutDown(ctx) // 初始化全局协程池 poolSize := g.Cfg().MustGet(ctx, "jobTask.poolSize", 5).Int() task.JobPool = grpool.New(poolSize) defer task.JobPool.Close() // 注册路由 http.RouteRegister([]interface{}{ controller.ModelGatewayModels, controller.ModelGatewayTask, controller.ModelGatewayLogsStat, }) // 本地调试:可选自动触发 worker/cleaner startAutoRunner(ctx) // 监听退出信号 quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt, syscall.SIGTERM) <-quit g.Log().Infof(ctx, "[main] 收到退出信号,开始优雅退出...") cancel() _ = http.Httpserver.Shutdown() } func startAutoRunner(ctx context.Context) { // queryPending if g.Cfg().MustGet(ctx, "queryPending.enabled").Bool() { interval := g.Cfg().MustGet(ctx, "queryPending.intervalSeconds", 10).Int() limit := g.Cfg().MustGet(ctx, "queryPending.limit", 10).Int() ticker := time.NewTicker(time.Duration(interval) * time.Second) go func() { defer ticker.Stop() for { select { case <-ctx.Done(): return case <-ticker.C: if _, err := task.ModelGatewayTask.QueryPendingTasks(ctx, &dto.QueryPendingTasksReq{Limit: limit}); err != nil { g.Log().Warningf(ctx, "[auto-queryPending] run once failed: %v", err) } } } }() } }