refactor: 将定时任务抽取到独立的 scheduler 包

This commit is contained in:
2026-05-05 21:13:46 +08:00
parent 9a7679960c
commit 1382c7a9f6
2 changed files with 32 additions and 13 deletions
+3 -11
View File
@@ -7,10 +7,9 @@ import (
"kenaito-conf/server/internal/dao"
"kenaito-conf/server/internal/handler"
"kenaito-conf/server/internal/middleware"
"kenaito-conf/server/internal/model"
"kenaito-conf/server/internal/scheduler"
"kenaito-conf/server/internal/service"
"log"
"time"
"github.com/gin-gonic/gin"
)
@@ -129,15 +128,8 @@ func main() {
addr := fmt.Sprintf(":%d", config.Cfg.Server.Port)
log.Printf("Server starting on %s", addr)
// 启动定时任务:清理过期的客户端实例记录
go func() {
ticker := time.NewTicker(1 * time.Minute)
defer ticker.Stop()
for range ticker.C {
fiveMinutesAgo := time.Now().Add(-5 * time.Minute)
dao.Engine.Where("last_ping_at < ?", fiveMinutesAgo).Delete(&model.ClientInstance{})
}
}()
// 启动定时任务
scheduler.Start()
if err := r.Run(addr); err != nil {
log.Fatalf("server error: %v", err)
+27
View File
@@ -0,0 +1,27 @@
package scheduler
import (
"kenaito-conf/server/internal/dao"
"kenaito-conf/server/internal/logger"
"kenaito-conf/server/internal/model"
"time"
)
func Start() {
go func() {
ticker := time.NewTicker(1 * time.Minute)
defer ticker.Stop()
for range ticker.C {
fiveMinutesAgo := time.Now().Add(-5 * time.Minute)
affected, err := dao.Engine.Where("last_ping_at < ?", fiveMinutesAgo).Delete(&model.ClientInstance{})
if err != nil {
logger.SugaredLogger.Errorf("[scheduler] cleanup expired client instances error: %v", err)
continue
}
if affected > 0 {
logger.SugaredLogger.Infof("[scheduler] cleaned up %d expired client instance(s)", affected)
}
}
}()
logger.SugaredLogger.Info("[scheduler] client instance cleanup task started, interval: 1m, expire: 5m")
}