/
trip.go
47 lines (40 loc) · 906 Bytes
/
trip.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
package tripper
import (
"log"
circuit "github.com/rubyist/circuitbreaker"
)
func NewBreaker(threshold int64, breaker string, breaks map[string]func()) *circuit.Breaker {
var cb *circuit.Breaker
switch breaker {
case "threshold":
cb = circuit.NewThresholdBreaker(threshold)
case "consecutive":
cb = circuit.NewConsecutiveBreaker(threshold)
default:
log.Fatal("invalid breaker type")
}
events := cb.Subscribe()
go func() {
for {
e := <-events
switch e {
case circuit.BreakerTripped:
breakMe("trip", breaks)
case circuit.BreakerReset:
breakMe("reset", breaks)
case circuit.BreakerFail:
breakMe("fail", breaks)
case circuit.BreakerReady:
breakMe("ready", breaks)
default:
breakMe("event", breaks)
}
}
}()
return cb
}
func breakMe(event string, breaks map[string]func()) {
if callback, found := breaks[event]; found {
callback()
}
}