diff --git a/cmd/web/wire.go b/cmd/web/wire.go index 675ba564..a94f75f8 100644 --- a/cmd/web/wire.go +++ b/cmd/web/wire.go @@ -3,6 +3,7 @@ package main import ( + "github.com/TheTNB/panel/internal/job" "github.com/google/wire" "github.com/TheTNB/panel/internal/app" @@ -14,5 +15,5 @@ import ( // initWeb init application. func initWeb() (*app.Web, error) { - panic(wire.Build(bootstrap.ProviderSet, route.ProviderSet, service.ProviderSet, data.ProviderSet, app.NewWeb)) + panic(wire.Build(bootstrap.ProviderSet, route.ProviderSet, service.ProviderSet, data.ProviderSet, job.ProviderSet, app.NewWeb)) } diff --git a/cmd/web/wire_gen.go b/cmd/web/wire_gen.go index 6a92b743..1f755941 100644 --- a/cmd/web/wire_gen.go +++ b/cmd/web/wire_gen.go @@ -10,6 +10,7 @@ import ( "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/bootstrap" "github.com/TheTNB/panel/internal/data" + "github.com/TheTNB/panel/internal/job" "github.com/TheTNB/panel/internal/route" "github.com/TheTNB/panel/internal/service" ) @@ -94,7 +95,11 @@ func initWeb() (*app.Web, error) { return nil, err } gormigrate := bootstrap.NewMigrate(db) - cron := bootstrap.NewCron(koanf, logger) + jobs := job.NewJobs(db, logger, settingRepo, certRepo, backupRepo, cacheRepo) + cron, err := bootstrap.NewCron(koanf, logger, jobs) + if err != nil { + return nil, err + } validation := bootstrap.NewValidator(db) web := app.NewWeb(koanf, mux, server, gormigrate, cron, validation) return web, nil diff --git a/go.sum b/go.sum index a1446083..8f82a93b 100644 --- a/go.sum +++ b/go.sum @@ -63,6 +63,7 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= diff --git a/internal/bootstrap/cron.go b/internal/bootstrap/cron.go index 945da3a8..8cef2f95 100644 --- a/internal/bootstrap/cron.go +++ b/internal/bootstrap/cron.go @@ -1,6 +1,7 @@ package bootstrap import ( + "github.com/TheTNB/panel/internal/job" "log/slog" "github.com/knadh/koanf/v2" @@ -9,14 +10,19 @@ import ( pkgcron "github.com/TheTNB/panel/pkg/cron" ) -func NewCron(conf *koanf.Koanf, log *slog.Logger) *cron.Cron { +func NewCron(conf *koanf.Koanf, log *slog.Logger, jobs *job.Jobs) (*cron.Cron, error) { logger := pkgcron.NewLogger(log, conf.Bool("app.debug")) - return cron.New( + c := cron.New( cron.WithParser(cron.NewParser( cron.SecondOptional|cron.Minute|cron.Hour|cron.Dom|cron.Month|cron.Dow|cron.Descriptor, )), cron.WithLogger(logger), cron.WithChain(cron.Recover(logger), cron.SkipIfStillRunning(logger)), ) + if err := jobs.Register(c); err != nil { + return nil, err + } + + return c, nil } diff --git a/internal/data/task.go b/internal/data/task.go index 1c6e1fcc..b45f3b56 100644 --- a/internal/data/task.go +++ b/internal/data/task.go @@ -70,7 +70,7 @@ func (r *taskRepo) Push(task *biz.Task) error { }) } -// TODO fix +// TODO 修复此功能 func (r *taskRepo) DispatchWaiting() { // cli下不处理 if app.IsCli { diff --git a/internal/job/init.go b/internal/job/init.go deleted file mode 100644 index 143165d0..00000000 --- a/internal/job/init.go +++ /dev/null @@ -1,21 +0,0 @@ -package job - -import ( - "github.com/robfig/cron/v3" -) - -// TODO fix me -func Boot(c *cron.Cron) error { - /*if _, err := c.AddJob("* * * * *", NewMonitoring()); err != nil { - return err - } - if _, err := c.AddJob("0 4 * * *", NewCertRenew()); err != nil { - return err - } - - if _, err := c.AddJob("0 2 * * *", NewPanelTask()); err != nil { - return err - }*/ - - return nil -} diff --git a/internal/job/job.go b/internal/job/job.go new file mode 100644 index 00000000..91402050 --- /dev/null +++ b/internal/job/job.go @@ -0,0 +1,46 @@ +package job + +import ( + "github.com/TheTNB/panel/internal/biz" + "github.com/google/wire" + "github.com/robfig/cron/v3" + "gorm.io/gorm" + "log/slog" +) + +var ProviderSet = wire.NewSet(NewJobs) + +type Jobs struct { + db *gorm.DB + log *slog.Logger + setting biz.SettingRepo + cert biz.CertRepo + backup biz.BackupRepo + cache biz.CacheRepo +} + +func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.CertRepo, backup biz.BackupRepo, cache biz.CacheRepo) *Jobs { + return &Jobs{ + db: db, + log: log, + setting: setting, + cert: cert, + backup: backup, + cache: cache, + } +} + +func (r *Jobs) Register(c *cron.Cron) error { + if _, err := c.AddJob("* * * * *", NewMonitoring(r.db, r.log, r.setting)); err != nil { + return err + } + if _, err := c.AddJob("0 4 * * *", NewCertRenew(r.db, r.log, r.cert)); err != nil { + return err + } + + if _, err := c.AddJob("0 2 * * *", NewPanelTask(r.db, r.log, r.backup, r.cache, r.setting)); err != nil { + return err + } + + return nil +}