forked from opsrampdeveloper/haproxyconfigparser
/
event.go
51 lines (45 loc) · 1.32 KB
/
event.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
package haproxyconfigparser
type EventType string
type EmitEvent func(eventType EventType, line string, parser Parser)
const (
EMPTY_LINE EventType = "empty"
COMMENT_OUT EventType = "comment_out"
START_SECTION EventType = "start_section"
IN_SECTION EventType = "in_section"
NORMAL EventType = "normal"
UNKNOWN EventType = "unknown"
)
var (
events = map[string]map[string][]EmitEvent{}
numberOfEvents = 0
)
// Registers an event listener to the event store.
//
// The group is any of "global", "backend", "frontend" or "*" where the asterisk means any.
//
// The name is the name is the first item on the line (i.e "bind", "acl", "use_backend" etc)
func RegisterEvent(group string, name string, emitter EmitEvent) {
if _, ok := events[group]; !ok {
events[group] = map[string][]EmitEvent{}
}
events[group][name] = append(events[group][name], emitter)
numberOfEvents++
}
func emitEvent(group string, name, line string, eventType EventType, parser Parser) {
if numberOfEvents < 1 {
return
}
names, ok := events[group]
if ok {
emitters, ok := names[name]
if ok {
for _, emit := range emitters {
emit(eventType, line, parser)
}
} else if name != "*" {
emitEvent(group, "*", line, eventType, parser)
}
} else if group != "*" {
emitEvent("*", name, line, eventType, parser)
}
}