feat: predictions
This commit is contained in:
parent
42e7924be9
commit
11be8f351f
42 changed files with 2221 additions and 516 deletions
|
|
@ -1,5 +1,20 @@
|
|||
package scheduler
|
||||
|
||||
import (
|
||||
"git.intra.yksa.space/gsn/predictor/internal/pkg/errcodes"
|
||||
env "github.com/caarlos0/env/v11"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Enabled bool `env:"ENABLED" envDefault:"true"`
|
||||
}
|
||||
|
||||
func NewConfig() (*Config, error) {
|
||||
cfg := &Config{}
|
||||
if err := env.ParseWithOptions(cfg, env.Options{
|
||||
PrefixTagName: "GSN_PREDICTOR_SCHEDULER_",
|
||||
}); err != nil {
|
||||
return nil, errcodes.Wrap(err, "failed to parse scheduler config")
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"time"
|
||||
|
||||
"git.intra.yksa.space/gsn/predictor/internal/pkg/errcodes"
|
||||
"git.intra.yksa.space/gsn/predictor/internal/pkg/log"
|
||||
"github.com/go-co-op/gocron"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
|
@ -19,15 +20,12 @@ type Job interface {
|
|||
|
||||
type Scheduler struct {
|
||||
scheduler *gocron.Scheduler
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
func New(logger *zap.Logger) *Scheduler {
|
||||
func New() *Scheduler {
|
||||
scheduler := gocron.NewScheduler(time.UTC)
|
||||
|
||||
return &Scheduler{
|
||||
scheduler: scheduler,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,14 +47,14 @@ func (s *Scheduler) AddJob(job Job) error {
|
|||
jobFunc := func() {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||||
defer cancel()
|
||||
|
||||
logger := log.Ctx(ctx)
|
||||
if err := job.Execute(ctx); err != nil {
|
||||
s.logger.Error("job execution failed",
|
||||
logger.Error("job execution failed",
|
||||
zap.Error(err),
|
||||
zap.Duration("interval", interval),
|
||||
zap.Duration("timeout", timeout))
|
||||
} else {
|
||||
s.logger.Debug("job executed successfully",
|
||||
logger.Debug("job executed successfully",
|
||||
zap.Duration("interval", interval),
|
||||
zap.Duration("timeout", timeout))
|
||||
}
|
||||
|
|
@ -75,7 +73,7 @@ func (s *Scheduler) AddJob(job Job) error {
|
|||
|
||||
schedulerJob.Do(jobFunc)
|
||||
|
||||
s.logger.Info("job added to scheduler",
|
||||
log.Ctx(context.Background()).Info("job added to scheduler",
|
||||
zap.Duration("interval", interval),
|
||||
zap.Duration("timeout", timeout),
|
||||
zap.Int("count", count),
|
||||
|
|
@ -86,12 +84,12 @@ func (s *Scheduler) AddJob(job Job) error {
|
|||
|
||||
func (s *Scheduler) Start() {
|
||||
s.scheduler.StartAsync()
|
||||
s.logger.Info("scheduler started")
|
||||
log.Ctx(context.Background()).Info("scheduler started")
|
||||
}
|
||||
|
||||
func (s *Scheduler) Stop() {
|
||||
s.scheduler.Stop()
|
||||
s.logger.Info("scheduler stopped")
|
||||
log.Ctx(context.Background()).Info("scheduler stopped")
|
||||
}
|
||||
|
||||
func (s *Scheduler) IsRunning() bool {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue