forked from vulcand/vulcand
/
circuitbreaker.go
37 lines (32 loc) · 1.2 KB
/
circuitbreaker.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
package middleware
import (
"fmt"
"time"
)
const (
CircuitBreakerType = "cbreaker"
CircuitBreakerID = "cb1"
)
// CircuitBreaker is a spec for the respective vulcan's middleware that lets vulcan to fallback to
// some default response and trigger some action when an erroneous condition on a location is met.
type CircuitBreaker struct {
Condition string `json:"Condition"`
Fallback string `json:"Fallback"`
CheckPeriod time.Duration `json:"CheckPeriod"`
FallbackDuration time.Duration `json:"FallbackDuration"`
RecoveryDuration time.Duration `json:"RecoveryDuration"`
OnTripped string `json:"OnTripped"`
OnStandby string `json:"OnStandby"`
}
func NewCircuitBreaker(spec CircuitBreaker) Middleware {
return Middleware{
Type: CircuitBreakerType,
ID: CircuitBreakerID,
Priority: DefaultPriority,
Spec: spec,
}
}
func (cb CircuitBreaker) String() string {
return fmt.Sprintf("CircuitBreaker(Condition=%v, Fallback=%v, CheckPeriod=%v, FallbackDuration=%v, RecoveryDuration=%v, OnTripped=%v, OnStandby=%v)",
cb.Condition, cb.Fallback, cb.CheckPeriod, cb.FallbackDuration, cb.RecoveryDuration, cb.OnTripped, cb.OnStandby)
}