This repository has been archived on 2022-09-04. You can view files and clone it, but cannot push or open issues or pull requests.
dataupdater/cron/cron.go

85 lines
2.0 KiB
Go

package cron
import (
"fmt"
"github.com/go-pg/pg/v10"
"github.com/robfig/cron/v3"
"github.com/sirupsen/logrus"
"github.com/tribalwarshelp/shared/models"
"github.com/tribalwarshelp/cron/cron/queue"
)
var log = logrus.WithField("package", "cron")
type Config struct {
DB *pg.DB
MaxConcurrentWorkers int
RunOnStartup bool
Queue queue.Queue
}
func Attach(c *cron.Cron, cfg Config) error {
if cfg.DB == nil {
return fmt.Errorf("cfg.DB cannot be nil, expected *pg.DB")
}
if cfg.Queue == nil {
return fmt.Errorf("cfg.Queue cannot be nil, expected queue.Queue")
}
h := &handler{
db: cfg.DB,
maxConcurrentWorkers: cfg.MaxConcurrentWorkers,
queue: cfg.Queue,
}
if err := h.init(); err != nil {
return err
}
var versions []*models.Version
if err := cfg.DB.Model(&versions).DistinctOn("timezone").Select(); err != nil {
return err
}
var updateHistoryFuncs []func()
var updateStatsFuncs []func()
for _, version := range versions {
updateHistory := createFnWithTimezone(version.Timezone, h.updateHistory)
updateHistoryFuncs = append(updateHistoryFuncs, updateHistory)
updateStats := createFnWithTimezone(version.Timezone, h.updateStats)
updateStatsFuncs = append(updateStatsFuncs, updateStats)
if _, err := c.AddFunc(fmt.Sprintf("CRON_TZ=%s 30 1 * * *", version.Timezone), updateHistory); err != nil {
return err
}
if _, err := c.AddFunc(fmt.Sprintf("CRON_TZ=%s 45 1 * * *", version.Timezone), updateStats); err != nil {
return err
}
}
if _, err := c.AddFunc("0 * * * *", h.updateServerData); err != nil {
return err
}
if _, err := c.AddFunc("20 1 * * *", h.vacuumDatabase); err != nil {
return err
}
if _, err := c.AddFunc("@every 1m", h.updateEnnoblements); err != nil {
return err
}
if cfg.RunOnStartup {
go func() {
//h.updateServerData()
//h.vacuumDatabase()
//for _, fn := range updateHistoryFuncs {
// go fn()
//}
//for _, fn := range updateStatsFuncs {
// go fn()
//}
}()
}
return nil
}