From 1382c7a9f68a01128ce9189177b23bf18700cd59 Mon Sep 17 00:00:00 2001 From: Odboy Date: Tue, 5 May 2026 21:13:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8A=BD=E5=8F=96=E5=88=B0=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E7=9A=84=20scheduler=20=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/cmd/main.go | 18 +++++------------ server/internal/scheduler/scheduler.go | 27 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 server/internal/scheduler/scheduler.go diff --git a/server/cmd/main.go b/server/cmd/main.go index 3852f2f..e5d7c7e 100644 --- a/server/cmd/main.go +++ b/server/cmd/main.go @@ -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" ) @@ -128,17 +127,10 @@ func main() { // start server 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) } diff --git a/server/internal/scheduler/scheduler.go b/server/internal/scheduler/scheduler.go new file mode 100644 index 0000000..09ab33f --- /dev/null +++ b/server/internal/scheduler/scheduler.go @@ -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") +}