- 新增统计控制器、服务层与数据访问层,提供按天统计接口 - 在 worker 处理任务时原子累加请求计数(仅实际调用模型时计数) - 更新数据库表结构,添加 asynch_model_stat 表及索引 - 更新文档说明统计功能的使用方式与统计口径
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"os"
|
||
"os/signal"
|
||
"syscall"
|
||
|
||
"model-asynch/controller"
|
||
"model-asynch/service"
|
||
|
||
_ "gitea.com/red-future/common/config"
|
||
"gitea.com/red-future/common/http"
|
||
"gitea.com/red-future/common/jaeger"
|
||
_ "gitea.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"
|
||
)
|
||
|
||
func main() {
|
||
ctx, cancel := context.WithCancel(context.Background())
|
||
defer cancel()
|
||
defer jaeger.ShutDown(ctx)
|
||
|
||
// 注册路由
|
||
http.RouteRegister([]interface{}{
|
||
controller.Model,
|
||
controller.Task,
|
||
controller.Stat,
|
||
})
|
||
|
||
// 启动后台任务:worker + 清理器
|
||
if g.Cfg().MustGet(ctx, "asynch.worker.enabled", true).Bool() {
|
||
service.AsyncWorker.Start(ctx) // 启动 worker 协程池
|
||
} else {
|
||
g.Log().Warningf(ctx, "[main] asynch.worker.enabled=false,跳过启动 worker")
|
||
}
|
||
if g.Cfg().MustGet(ctx, "asynch.cleaner.enabled", true).Bool() {
|
||
service.Cleaner.Start(ctx) // 启动清理器
|
||
} else {
|
||
g.Log().Warningf(ctx, "[main] asynch.cleaner.enabled=false,跳过启动 cleaner")
|
||
}
|
||
|
||
// 监听退出信号,确保 Ctrl+C 能完整退出(停止 worker/cleaner 并关闭 http server)
|
||
quit := make(chan os.Signal, 1)
|
||
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
|
||
<-quit
|
||
|
||
g.Log().Infof(ctx, "[main] 收到退出信号,开始优雅退出...")
|
||
cancel()
|
||
// 停止 worker(关闭协程池)
|
||
service.AsyncWorker.Stop(ctx)
|
||
// 关闭 http server(RouteRegister 内部是 go Httpserver.Run() 启动的)
|
||
_ = http.Httpserver.Shutdown()
|
||
}
|