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:
@@ -26,7 +26,7 @@ func Connect() (*gorm.DB, error) {
|
||||
os.Getenv("DATABASE_PASS"),
|
||||
os.Getenv("DATABASE_DB"),
|
||||
os.Getenv("DATABASE_PORT"),
|
||||
os.Getenv("DATABASE_TZ"),
|
||||
os.Getenv("APP_TZ"),
|
||||
)
|
||||
|
||||
newLogger := logger.New(
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
SERVER = "server"
|
||||
SYSTEM = "system"
|
||||
DATABASE = "database"
|
||||
CRON = "cron"
|
||||
QUEUE = "queue"
|
||||
RABBIT = "rabbit"
|
||||
internal = "internal"
|
||||
SERVER = "server"
|
||||
SYSTEM = "system"
|
||||
DATABASE = "database"
|
||||
CRON = "cron"
|
||||
QUEUE = "queue"
|
||||
Observer = "observer"
|
||||
Scheduler = "scheduler"
|
||||
RABBIT = "rabbit"
|
||||
internal = "internal"
|
||||
)
|
||||
|
||||
var Global *LoggerManager
|
||||
@@ -42,8 +46,14 @@ func (m *LoggerManager) Put(name string, logger *logrus.Logger) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
l, err := logrus.ParseLevel(strings.ToLower(os.Getenv("LOG_LEVEL")))
|
||||
if err != nil {
|
||||
l = logrus.ErrorLevel
|
||||
}
|
||||
|
||||
logger.Level = l
|
||||
if _, ok := m.loggers[name]; ok {
|
||||
m.loggers[internal].Errorf("Logger with name '%s' already exists. Use PutForce to replace it.", name)
|
||||
m.loggers[internal].Warnf("Logger with name '%s' already exists. Use PutForce to replace it.", name)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
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