2020-10-24 10:24:05 +00:00
|
|
|
package cron
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2020-10-24 18:30:28 +00:00
|
|
|
|
2020-10-24 10:24:05 +00:00
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
|
"github.com/robfig/cron/v3"
|
2021-04-25 16:37:55 +00:00
|
|
|
"github.com/tribalwarshelp/shared/models"
|
2021-04-25 15:02:58 +00:00
|
|
|
|
|
|
|
"github.com/tribalwarshelp/cron/cron/queue"
|
2020-10-24 10:24:05 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2021-04-25 17:45:09 +00:00
|
|
|
DB *pg.DB
|
|
|
|
RunOnStartup bool
|
|
|
|
Queue queue.Queue
|
2020-10-24 10:24:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func Attach(c *cron.Cron, cfg Config) error {
|
|
|
|
if cfg.DB == nil {
|
2020-12-30 22:57:23 +00:00
|
|
|
return fmt.Errorf("cfg.DB cannot be nil, expected *pg.DB")
|
2020-10-24 10:24:05 +00:00
|
|
|
}
|
2021-04-25 15:02:58 +00:00
|
|
|
if cfg.Queue == nil {
|
|
|
|
return fmt.Errorf("cfg.Queue cannot be nil, expected queue.Queue")
|
|
|
|
}
|
2020-10-24 10:24:05 +00:00
|
|
|
|
2021-04-25 15:21:32 +00:00
|
|
|
h := &handler{
|
2021-04-25 17:45:09 +00:00
|
|
|
queue: cfg.Queue,
|
2020-10-24 10:24:05 +00:00
|
|
|
}
|
|
|
|
|
2021-04-25 15:02:58 +00:00
|
|
|
var versions []*models.Version
|
2020-12-31 01:34:06 +00:00
|
|
|
if err := cfg.DB.Model(&versions).DistinctOn("timezone").Select(); err != nil {
|
2020-10-24 10:24:05 +00:00
|
|
|
return err
|
|
|
|
}
|
2020-12-30 22:57:23 +00:00
|
|
|
|
2021-04-25 15:02:58 +00:00
|
|
|
var updateHistoryFuncs []func()
|
|
|
|
var updateStatsFuncs []func()
|
2020-12-30 22:57:23 +00:00
|
|
|
for _, version := range versions {
|
2021-04-25 16:37:55 +00:00
|
|
|
updateHistory := createFnWithTimezone(version.Timezone, h.updateHistory)
|
2020-12-30 22:57:23 +00:00
|
|
|
updateHistoryFuncs = append(updateHistoryFuncs, updateHistory)
|
|
|
|
|
2021-04-25 16:37:55 +00:00
|
|
|
updateStats := createFnWithTimezone(version.Timezone, h.updateStats)
|
2020-12-30 22:57:23 +00:00
|
|
|
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
|
|
|
|
}
|
2020-10-24 10:24:05 +00:00
|
|
|
}
|
2021-04-25 16:21:34 +00:00
|
|
|
if _, err := c.AddFunc("0 * * * *", h.updateServerData); err != nil {
|
2020-10-24 10:24:05 +00:00
|
|
|
return err
|
|
|
|
}
|
2021-04-25 16:37:55 +00:00
|
|
|
if _, err := c.AddFunc("20 1 * * *", h.vacuumDatabase); err != nil {
|
2020-10-24 10:24:05 +00:00
|
|
|
return err
|
|
|
|
}
|
2021-04-25 17:06:17 +00:00
|
|
|
if _, err := c.AddFunc("@every 1m", h.updateEnnoblements); err != nil {
|
2021-01-15 17:25:13 +00:00
|
|
|
return err
|
|
|
|
}
|
2020-12-23 16:52:04 +00:00
|
|
|
if cfg.RunOnStartup {
|
|
|
|
go func() {
|
2021-04-25 16:37:55 +00:00
|
|
|
//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()
|
|
|
|
//}
|
2020-12-23 16:52:04 +00:00
|
|
|
}()
|
|
|
|
}
|
2020-10-24 10:24:05 +00:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|