forked from Cepave/open-falcon-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
worker.go
68 lines (59 loc) · 1.18 KB
/
worker.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
package cron
import (
"github.com/Cepave/open-falcon-backend/modules/aggregator/g"
log "github.com/sirupsen/logrus"
"time"
)
type Worker struct {
Ticker *time.Ticker
ClusterItem *g.Cluster
Quit chan struct{}
}
func NewWorker(ci *g.Cluster) Worker {
w := Worker{}
w.Ticker = time.NewTicker(time.Duration(ci.Step) * time.Second)
w.Quit = make(chan struct{})
w.ClusterItem = ci
return w
}
func (this Worker) Start() {
go func() {
for {
select {
case <-this.Ticker.C:
WorkerRun(this.ClusterItem)
case <-this.Quit:
if g.Config().Debug {
log.Println("[I] drop worker", this.ClusterItem)
}
this.Ticker.Stop()
return
}
}
}()
}
func (this Worker) Drop() {
close(this.Quit)
}
var Workers = make(map[string]Worker)
func deleteNoUseWorker(m map[string]*g.Cluster) {
del := []string{}
for key, worker := range Workers {
if _, ok := m[key]; !ok {
worker.Drop()
del = append(del, key)
}
}
for _, key := range del {
delete(Workers, key)
}
}
func createWorkerIfNeed(m map[string]*g.Cluster) {
for key, item := range m {
if _, ok := Workers[key]; !ok {
worker := NewWorker(item)
Workers[key] = worker
worker.Start()
}
}
}