From a573a6e44fe08792bd8d91fc6e13fac651793b10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Thu, 2 Jan 2025 21:52:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=89=E4=BB=BB=E5=8A=A1=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E5=88=99=E8=B7=B3=E8=BF=87=E8=87=AA=E5=8A=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/web/wire_gen.go | 2 +- internal/job/job.go | 6 ++++-- internal/job/panel_task.go | 8 +++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/web/wire_gen.go b/cmd/web/wire_gen.go index 6b88c859..536bc51e 100644 --- a/cmd/web/wire_gen.go +++ b/cmd/web/wire_gen.go @@ -144,7 +144,7 @@ func initWeb() (*app.Web, error) { return nil, err } gormigrate := bootstrap.NewMigrate(db) - jobs := job.NewJobs(db, logger, settingRepo, certRepo, backupRepo, cacheRepo) + jobs := job.NewJobs(db, logger, settingRepo, certRepo, backupRepo, cacheRepo, taskRepo) cron, err := bootstrap.NewCron(koanf, logger, jobs) if err != nil { return nil, err diff --git a/internal/job/job.go b/internal/job/job.go index 7e23b53e..785b48d4 100644 --- a/internal/job/job.go +++ b/internal/job/job.go @@ -19,9 +19,10 @@ type Jobs struct { cert biz.CertRepo backup biz.BackupRepo cache biz.CacheRepo + task biz.TaskRepo } -func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.CertRepo, backup biz.BackupRepo, cache biz.CacheRepo) *Jobs { +func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.CertRepo, backup biz.BackupRepo, cache biz.CacheRepo, task biz.TaskRepo) *Jobs { return &Jobs{ db: db, log: log, @@ -29,6 +30,7 @@ func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.Ce cert: cert, backup: backup, cache: cache, + task: task, } } @@ -40,7 +42,7 @@ func (r *Jobs) Register(c *cron.Cron) error { return err } - if _, err := c.AddJob("0 2 * * *", NewPanelTask(r.db, r.log, r.backup, r.cache, r.setting)); err != nil { + if _, err := c.AddJob("0 2 * * *", NewPanelTask(r.db, r.log, r.backup, r.cache, r.task, r.setting)); err != nil { return err } diff --git a/internal/job/panel_task.go b/internal/job/panel_task.go index aeb50ea9..32654290 100644 --- a/internal/job/panel_task.go +++ b/internal/job/panel_task.go @@ -23,16 +23,18 @@ type PanelTask struct { log *slog.Logger backupRepo biz.BackupRepo cacheRepo biz.CacheRepo + taskRepo biz.TaskRepo settingRepo biz.SettingRepo } -func NewPanelTask(db *gorm.DB, log *slog.Logger, backup biz.BackupRepo, cache biz.CacheRepo, setting biz.SettingRepo) *PanelTask { +func NewPanelTask(db *gorm.DB, log *slog.Logger, backup biz.BackupRepo, cache biz.CacheRepo, task biz.TaskRepo, setting biz.SettingRepo) *PanelTask { return &PanelTask{ api: api.NewAPI(app.Version), db: db, log: log, backupRepo: backup, cacheRepo: cache, + taskRepo: task, settingRepo: setting, } } @@ -100,6 +102,10 @@ func (r *PanelTask) updateRewrites() { // 更新面板 func (r *PanelTask) updatePanel() { + if r.taskRepo.HasRunningTask() { + return + } + // 加 300 秒确保在缓存更新后才更新面板 time.AfterFunc(time.Duration(rand.IntN(300))*time.Second+300*time.Second, func() { panel, err := r.api.LatestVersion()