refactor: Switching to a cron system for tasks, restructuring service and status models
Added response time field for Status model, set log level from ENV
This commit is contained in:
66
modules/scheduler/scheduler.go
Normal file
66
modules/scheduler/scheduler.go
Normal file
@@ -0,0 +1,66 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user