...
1 package circuitbreaker
2
3 import (
4 "context"
5 "time"
6
7 "github.com/streadway/handy/breaker"
8
9 "github.com/go-kit/kit/endpoint"
10 )
11
12
13
14
15
16
17
18
19 func HandyBreaker(cb breaker.Breaker) endpoint.Middleware {
20 return func(next endpoint.Endpoint) endpoint.Endpoint {
21 return func(ctx context.Context, request interface{}) (response interface{}, err error) {
22 if !cb.Allow() {
23 return nil, breaker.ErrCircuitOpen
24 }
25
26 defer func(begin time.Time) {
27 if err == nil {
28 cb.Success(time.Since(begin))
29 } else {
30 cb.Failure(time.Since(begin))
31 }
32 }(time.Now())
33
34 response, err = next(ctx, request)
35 return
36 }
37 }
38 }
39
View as plain text