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

76 lines
1.7 KiB
Go
Raw Normal View History

package cron
import (
"fmt"
"github.com/go-pg/pg/v10"
"github.com/robfig/cron/v3"
"github.com/tribalwarshelp/shared/models"
2021-04-25 15:02:58 +00:00
"github.com/tribalwarshelp/cron/cron/queue"
)
type Config struct {
2021-04-25 17:45:09 +00:00
DB *pg.DB
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")
}
2021-04-25 15:02:58 +00:00
if cfg.Queue == nil {
return fmt.Errorf("cfg.Queue cannot be nil, expected queue.Queue")
}
2021-04-25 15:21:32 +00:00
h := &handler{
2021-04-25 17:45:09 +00:00
queue: cfg.Queue,
}
2021-04-25 15:02:58 +00:00
var versions []*models.Version
if err := cfg.DB.Model(&versions).DistinctOn("timezone").Select(); err != nil {
return err
}
2021-04-25 15:02:58 +00:00
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
}
}
2021-04-25 16:21:34 +00:00
if _, err := c.AddFunc("0 * * * *", h.updateServerData); err != nil {
return err
}
if _, err := c.AddFunc("20 1 * * *", h.vacuumDatabase); err != nil {
return err
}
2021-04-25 17:06:17 +00:00
if _, err := c.AddFunc("@every 1m", h.updateEnnoblements); err != nil {
return err
}
if cfg.RunOnStartup {
go func() {
//h.updateServerData()
2021-04-25 17:06:17 +00:00
//h.vacuumDatabase()
2021-04-25 17:58:33 +00:00
for _, fn := range updateHistoryFuncs {
go fn()
}
2021-04-25 15:02:58 +00:00
//for _, fn := range updateStatsFuncs {
// go fn()
//}
}()
}
return nil
}