/
emissary.go
66 lines (54 loc) · 1.16 KB
/
emissary.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
package emissary
import (
"bytes"
"github.com/gorhill/cronexpr"
"github.com/maxwellhealth/emissary/delivery"
"github.com/maxwellhealth/emissary/generator"
"github.com/maxwellhealth/emissary/middleware"
"time"
)
type Emissary struct {
Name string
DeliveryModule delivery.Module
Middleware []middleware.Module
FileName string
Schedules []string
Generator generator.FileGenerator
}
func (e *Emissary) Run() error {
generated := new(bytes.Buffer)
// Generate the file
err := e.Generator.Generate(generated)
if err != nil {
return err
}
// Middleware?
for _, m := range e.Middleware {
buf := new(bytes.Buffer)
err := m.Passthru(generated, buf)
if err != nil {
return err
}
generated = buf
}
err = e.DeliveryModule.Deliver(generated)
if err != nil {
return err
}
return nil
}
func (e *Emissary) ShouldRun(t time.Time) (bool, error) {
t = t.Truncate(time.Minute)
compare := t.Add(-1 * time.Nanosecond)
for _, s := range e.Schedules {
parsed, err := cronexpr.Parse(s)
if err != nil {
return false, err
}
next := parsed.Next(compare)
if next == t {
return true, nil
}
}
return false, nil
}