73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
}
|