package scheduler import ( "errors" "os" "time" "git.ostiwe.com/ostiwe-com/status/modules/log" "github.com/go-co-op/gocron/v2" "github.com/google/uuid" "github.com/sirupsen/logrus" ) var GlobalAppScheduler AppScheduler type AppScheduler interface { NewServiceJob(serviceID uint64, jd gocron.JobDefinition, t gocron.Task, opt ...gocron.JobOption) (gocron.Job, error) StartJobs() error } type appScheduler struct { jobServiceMap map[uint64]uuid.UUID scheduler gocron.Scheduler logger *logrus.Logger } func NewAppScheduler() (AppScheduler, error) { log.Global.Put(log.Scheduler, logrus.New()) location, err := time.LoadLocation(os.Getenv("APP_TZ")) if err != nil { return nil, err } scheduler, err := gocron.NewScheduler(gocron.WithLocation(location)) if err != nil { return nil, err } return &appScheduler{ scheduler: scheduler, logger: log.Global.Get(log.Scheduler), jobServiceMap: make(map[uint64]uuid.UUID), }, nil } func (s *appScheduler) NewServiceJob(serviceID uint64, jd gocron.JobDefinition, t gocron.Task, opt ...gocron.JobOption) (gocron.Job, error) { job, err := s.scheduler.NewJob(jd, t, opt...) if err != nil { return nil, err } s.jobServiceMap[serviceID] = job.ID() return job, nil } func (s *appScheduler) StartJobs() error { if s.scheduler == nil { return errors.New("scheduler is nil") } s.scheduler.Start() return nil }