1package circuitbreaker
2
3import (
4	"context"
5
6	"github.com/sony/gobreaker"
7
8	"github.com/go-kit/kit/endpoint"
9)
10
11// Gobreaker returns an endpoint.Middleware that implements the circuit
12// breaker pattern using the sony/gobreaker package. Only errors returned by
13// the wrapped endpoint count against the circuit breaker's error count.
14//
15// See http://godoc.org/github.com/sony/gobreaker for more information.
16func Gobreaker(cb *gobreaker.CircuitBreaker) endpoint.Middleware {
17	return func(next endpoint.Endpoint) endpoint.Endpoint {
18		return func(ctx context.Context, request interface{}) (interface{}, error) {
19			return cb.Execute(func() (interface{}, error) { return next(ctx, request) })
20		}
21	}
22}
23