-
Notifications
You must be signed in to change notification settings - Fork 1
/
periodicScripts.go
46 lines (38 loc) · 992 Bytes
/
periodicScripts.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
package bot
import (
"github.com/robfig/cron/v3"
logger "github.com/sirupsen/logrus"
)
type PeriodicScript struct {
Name string
CronSpec string
Function func()
cronEntryId cron.EntryID
}
func RegisterPeriodicScript(script PeriodicScript) error {
if periodicScripts == nil {
periodicScripts = make(map[string]PeriodicScript)
}
if cronJobs == nil {
cronJobs = cron.New()
}
cronJobs.Stop()
// If script has previously been registerd, then remove the associated cron func
if _, ok := periodicScripts[script.Name]; ok {
cronJobs.Remove(periodicScripts[script.Name].cronEntryId)
delete(periodicScripts, script.Name)
}
cronEntryId, err := cronJobs.AddFunc(script.CronSpec, script.Function)
if err != nil {
logger.Errorf("Unable to register periodic script %s", err)
} else {
script.cronEntryId = cronEntryId
periodicScripts[script.Name] = script
}
if len(cronJobs.Entries()) > 0 {
cronJobs.Start()
} else {
cronJobs.Stop()
}
return err
}