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:
2025-10-28 00:51:29 +03:00
parent 1958d9b3d9
commit b33df27b31
11 changed files with 254 additions and 63 deletions

View 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
}