/
worker.go
64 lines (56 loc) · 1.11 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
package worker
import (
"github.com/l-angel/tunnel/cfg"
"github.com/l-angel/tunnel/log"
"github.com/l-angel/tunnel/registry"
)
type Worker struct {
tasks map[string]*Task
r registry.Registry
}
func NewWorkerWithCfg(r registry.Registry) *Worker {
tasks := make(map[string]*Task)
for _, t := range cfg.C.Tasks {
if !t.Enable {
continue
}
tasks[t.Id] = NewTask(t.Id, t, r)
}
return &Worker{
tasks: tasks,
}
}
func NewEmptyWorker() *Worker {
return &Worker{tasks: make(map[string]*Task)}
}
func (self *Worker) Join(id string, t *Task) {
if t != nil {
self.tasks[id] = t
}
}
func (self *Worker) StartUp() {
for _, t := range self.tasks {
err := t.StartUp()
if err != nil {
log.Error("task [", t.id, "] start failure.", err)
}
}
}
/*
校验任务状态 Task.Status 和 Task 之间实际的工作状态校验
*/
func (self *Worker) Refresh() {
for _, t := range self.tasks {
if t.Status == Waiting {
err := t.StartUp()
if err != nil {
log.Error("task [", t.id, "] start failure.", err)
}
}
}
}
func (self *Worker) Stop() {
for _, t := range self.tasks {
t.Stop()
}
}