/
generator.go
85 lines (67 loc) · 1.57 KB
/
generator.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
package triglav
import (
"github.com/kentaro/verity"
"log"
"reflect"
"time"
)
type Generator interface {
Generate(options map[string]interface{})
}
func NewGenerator(tag string, queue *Queue) (generator Generator) {
switch tag {
case "triglav.update.host":
generator = NewUpdateHostGenerator(tag, queue)
default:
generator = NewNullGenerator(tag, queue)
}
return
}
type NullGenerator struct {
tag string
queue *Queue
}
func NewNullGenerator(tag string, queue *Queue) (generator Generator) {
generator = &NullGenerator{
tag: tag,
queue: queue,
}
return
}
func (self *NullGenerator) Generate(options map[string]interface{}) {
}
type UpdateHostGenertor struct {
tag string
queue *Queue
}
func NewUpdateHostGenerator(tag string, queue *Queue) (generator Generator) {
generator = &UpdateHostGenertor{
tag: tag,
queue: queue,
}
return
}
func (self *UpdateHostGenertor) Generate(options map[string]interface{}) {
sec := reflect.ValueOf(options["update-host-interval"])
if sec.Kind() != reflect.Int {
log.Fatal("[update.host.generator] `interval` must be an Int value.")
return
}
self.generateUpdateHostMessage()
timer := time.NewTicker(time.Duration(sec.Int()) * time.Second)
defer timer.Stop()
for _ = range timer.C {
self.generateUpdateHostMessage()
}
}
func (self *UpdateHostGenertor) generateUpdateHostMessage() {
hostInfo, err := verity.Collect()
if err != nil {
log.Fatalf("[update.host.generator] failed to collect host information: %s", err)
}
message := &Message{
Tag: self.tag,
Body: hostInfo,
}
self.queue.Push(message)
}