-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.go
More file actions
133 lines (107 loc) · 2.16 KB
/
event.go
File metadata and controls
133 lines (107 loc) · 2.16 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package gron
import (
"sync"
"time"
)
const (
// Enabled emitted when a task is enabled
Enabled etype = iota
// Disabled emitted when a task has been disabled
Disabled
// Running emitted when a task is starting
Running
// Finished emitted when a task has finished successful
Finished
// Failed emitted when a task has failed
Failed
)
// bus is a global internal event stream
var (
bus chan Event
busOnce sync.Once
)
type etype int
// Event presents the task event
type Event struct {
TaskName
E etype
Msg string
At time.Time
}
type builder struct {
ev Event
}
func newBus() chan Event {
busOnce.Do(func() {
bus = make(chan Event)
})
return bus
}
func newBuilder() *builder {
return &builder{
ev: Event{},
}
}
func (b *builder) event(e etype) *builder {
b.ev.E = e
return b
}
func (b *builder) taskName(name TaskName) *builder {
b.ev.TaskName = name
return b
}
func (b *builder) message(m string) *builder {
b.ev.Msg = m
return b
}
func (b *builder) at(t time.Time) *builder {
b.ev.At = t
return b
}
func (b *builder) build() Event {
return b.ev
}
// Subscribe returns the gron event channel
func Subscribe() <-chan Event {
for name := range c.tasks {
Enable(name)
}
return bus
}
func (et etype) String() string {
switch et {
case Enabled:
return "Enabled"
case Disabled:
return "Disabled"
case Running:
return "Running"
case Finished:
return "Finished"
case Failed:
return "Failed"
default:
return "Undefined"
}
}
func publishEnabledEvent(task Task) {
publish(newBuilder().taskName(task.Name).event(Enabled).at(time.Now()).build())
}
func publishDisabledEvent(task Task) {
publish(newBuilder().taskName(task.Name).event(Disabled).at(time.Now()).build())
}
func publishRunningEvent(task Task) {
publish(newBuilder().taskName(task.Name).event(Running).at(time.Now()).build())
}
func publishFinishedEvent(task Task) {
publish(newBuilder().taskName(task.Name).event(Finished).at(time.Now()).build())
}
func publishFailedEvent(task Task) {
publish(newBuilder().taskName(task.Name).event(Failed).message(task.errMsg).at(time.Now()).build())
}
func publish(ev Event) {
bus <- ev
}
func init() {
bus = newBus()
}