This repository has been archived by the owner on Jul 20, 2022. It is now read-only.
/
cron.go
113 lines (95 loc) · 3.44 KB
/
cron.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import (
"context"
"os"
"os/signal"
"syscall"
"time"
"github.com/eveisesi/skillz"
"github.com/eveisesi/skillz/internal/alliance"
"github.com/eveisesi/skillz/internal/auth"
"github.com/eveisesi/skillz/internal/cache"
"github.com/eveisesi/skillz/internal/character"
"github.com/eveisesi/skillz/internal/clone"
"github.com/eveisesi/skillz/internal/corporation"
"github.com/eveisesi/skillz/internal/esi"
"github.com/eveisesi/skillz/internal/etag"
"github.com/eveisesi/skillz/internal/mysql"
"github.com/eveisesi/skillz/internal/processor"
"github.com/eveisesi/skillz/internal/skill"
"github.com/eveisesi/skillz/internal/universe"
"github.com/eveisesi/skillz/internal/user/v2"
"github.com/pkg/errors"
"github.com/robfig/cron/v3"
"github.com/urfave/cli/v2"
)
func init() {
commands = append(commands, &cli.Command{
Name: "cron",
Description: "Start the Cron Scheduler",
Action: cronCommand,
})
}
func cronCommand(_ *cli.Context) error {
cache := cache.New(redisClient, cfg.Redis.DisableCache == 1)
allianceRepo := mysql.NewAllianceRepository(mysqlClient)
characterRepo := mysql.NewCharacterRepository(mysqlClient)
corporationRepo := mysql.NewCorporationRepository(mysqlClient)
etagRepo := mysql.NewETagRepository(mysqlClient)
userRepo := mysql.NewUserRepository(mysqlClient)
cloneRepo := mysql.NewCloneRepository(mysqlClient)
skillsRepo := mysql.NewSkillRepository(mysqlClient)
universeRepo := mysql.NewUniverseRepository(mysqlClient)
auth := auth.New(
skillz.EnvironmentFromString(cfg.Environment),
httpClient(),
cache,
oauth2Config(),
)
etag := etag.New(cache, etagRepo)
esi := esi.New(httpClient(), redisClient, logger, etag)
character := character.New(logger, cache, esi, etag, characterRepo)
corporation := corporation.New(logger, cache, esi, etag, corporationRepo)
alliance := alliance.New(logger, cache, esi, etag, allianceRepo)
universe := universe.New(logger, cache, esi, universeRepo)
clone := clone.New(logger, cache, etag, esi, universe, cloneRepo)
skills := skill.New(logger, cache, esi, universe, skillsRepo)
user := user.New(redisClient, logger, cache, auth, alliance, character, corporation, skills, clone, userRepo)
cron := cron.New()
processor := processor.New(logger, redisClient, nr, user, skillz.ScopeProcessors{
clone,
skills,
})
entryID, err := cron.AddFunc("0 */3 * * *", func() {
var ctx = context.Background()
logger.Info("executing process updateable users cron")
users, err := user.ProcessUpdatableUsers(ctx)
if err != nil {
logger.WithError(err).Fatal("failed to update processable users")
}
logger.WithField("count", len(users)).Info("updateable users")
for _, user := range users {
err = processor.ProcessUser(ctx, user)
if err != nil {
logger.WithError(err).Error("failed to process user id")
time.Sleep(time.Second * 3)
}
}
})
if err != nil {
logger.WithError(err).Error("failed to add user update job to cron scheduler")
return errors.Wrap(err, "failed to add user update job to cron scheduler")
}
logger.WithField("entryID", entryID).Info("successfully address cron job to scheduler")
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
cron.Start()
logger.Info("cron running....")
<-sc
logger.Info("stopping cron....")
ctx := cron.Stop()
logger.Info("cron stopped, waiting for jobs to finish....")
<-ctx.Done()
logger.Info("cron stopped successfully, exiting process....")
return nil
}