circuitbreaker

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2024 License: MIT Imports: 8 Imported by: 1

Documentation

Index

Constants

View Source
const DefaultAutomaticTransitionFromOpenToHalfOpenEnabled bool = false
View Source
const DefaultFailureRateThreshold float64 = 50
View Source
const DefaultMaxWaitDurationInHalfOpenState time.Duration = 0
View Source
const DefaultMinimumNumberOfCalls int64 = 100
View Source
const DefaultPermittedNumberOfCallsInHalfOpenState int64 = 10
View Source
const DefaultSlidingWindowSize int64 = 100
View Source
const DefaultSlidingWindowType = CountBased
View Source
const DefaultSlowCallDurationThreshold = time.Second * 60
View Source
const DefaultSlowCallRateThreshold float64 = 100
View Source
const DefaultWaitDurationInOpenState = time.Second * 60

Variables

This section is empty.

Functions

func DecorateConsumer

func DecorateConsumer[T any](breaker CircuitBreaker, fn func(T) error) func(T) error

func DecorateFunction

func DecorateFunction[T any, R any](breaker CircuitBreaker, fn func(T) (R, error)) func(T) (R, error)

func DecorateRunnable

func DecorateRunnable(breaker CircuitBreaker, fn func() error) func() error

func DecorateSupplier

func DecorateSupplier[T any](breaker CircuitBreaker, fn func() (T, error)) func() (T, error)

func DefaultFailureResultPredicate added in v0.3.0

func DefaultFailureResultPredicate(_ any, err error) bool

func DefaultWaitIntervalFunctionInOpenState

func DefaultWaitIntervalFunctionInOpenState(_ int64) time.Duration

Types

type CircuitBreaker

type CircuitBreaker interface {
	Name() string
	State() State
	Metrics() Metrics
	EventListener() EventListener
	TransitionToDisabled() error
	TransitionToForcedOpen() error
	TransitionToClosedState() error
	TransitionToOpenState() error
	TransitionToHalfOpenState() error
	Execute(func() (any, error)) (any, error)
	// contains filtered or unexported methods
}

func NewCircuitBreaker

func NewCircuitBreaker(name string, configs ...ConfigBuilder) CircuitBreaker

type Config

type Config struct {
	// contains filtered or unexported fields
}

func (*Config) String

func (config *Config) String() string

type ConfigBuilder

type ConfigBuilder func(*Config)

func WithAutomaticTransitionFromOpenToHalfOpenEnabled

func WithAutomaticTransitionFromOpenToHalfOpenEnabled(enabled bool) ConfigBuilder

func WithFailureRateThreshold

func WithFailureRateThreshold(failureRateThreshold float64) ConfigBuilder

func WithFailureResultPredicate added in v0.3.0

func WithFailureResultPredicate(predicate func(any, error) bool) ConfigBuilder

func WithMaxWaitDurationInHalfOpenState

func WithMaxWaitDurationInHalfOpenState(maxWaitDurationInHalfOpenState time.Duration) ConfigBuilder

func WithPermittedNumberOfCallsInHalfOpenState

func WithPermittedNumberOfCallsInHalfOpenState(permittedNumberOfCallsInHalfOpenState int64) ConfigBuilder

func WithSlidingWindow

func WithSlidingWindow(slidingWindowType SlidingWindowType, slidingWindowSize int64, minimumNumberOfCalls int64) ConfigBuilder

func WithSlowCallDurationThreshold

func WithSlowCallDurationThreshold(slowCallDurationThreshold time.Duration) ConfigBuilder

func WithSlowCallRateThreshold

func WithSlowCallRateThreshold(slowCallRateThreshold float64) ConfigBuilder

func WithWaitIntervalFunctionInOpenState

func WithWaitIntervalFunctionInOpenState(function func(int64) time.Duration) ConfigBuilder

type ErrorEvent added in v0.4.1

type ErrorEvent interface {
	Event
	Duration() time.Duration
	Ret() any
	Err() error
}

type Event

type Event interface {
	fmt.Stringer
	CircuitBreakerName() string
	CreationTime() time.Time
	EventType() EventType
}

type EventListener

type EventListener interface {
	OnSuccessFunc(func(SuccessEvent)) EventListener
	OnErrorFunc(func(ErrorEvent)) EventListener
	OnNotPermittedFunc(func(NotPermittedEvent)) EventListener
	OnStateTransitionFunc(func(StateTransitionEvent)) EventListener
	OnFailureRateExceededFunc(func(FailureRateExceededEvent)) EventListener
	OnSlowCallRateExceededFunc(func(SlowCallRateExceededEvent)) EventListener
	DismissSuccessFunc(func(SuccessEvent)) EventListener
	DismissErrorFunc(func(ErrorEvent)) EventListener
	DismissNotPermittedFunc(func(NotPermittedEvent)) EventListener
	DismissStateTransitionFunc(func(StateTransitionEvent)) EventListener
	DismissFailureRateExceededFunc(func(FailureRateExceededEvent)) EventListener
	DismissSlowCallRateExceededFunc(func(SlowCallRateExceededEvent)) EventListener

	OnSuccess(fn.Consumer[SuccessEvent]) EventListener
	OnError(fn.Consumer[ErrorEvent]) EventListener
	OnNotPermitted(fn.Consumer[NotPermittedEvent]) EventListener
	OnStateTransition(fn.Consumer[StateTransitionEvent]) EventListener
	OnFailureRateExceeded(fn.Consumer[FailureRateExceededEvent]) EventListener
	OnSlowCallRateExceeded(fn.Consumer[SlowCallRateExceededEvent]) EventListener
	DismissSuccess(fn.Consumer[SuccessEvent]) EventListener
	DismissError(fn.Consumer[ErrorEvent]) EventListener
	DismissNotPermitted(fn.Consumer[NotPermittedEvent]) EventListener
	DismissStateTransition(fn.Consumer[StateTransitionEvent]) EventListener
	DismissFailureRateExceeded(fn.Consumer[FailureRateExceededEvent]) EventListener
	DismissSlowCallRateExceeded(fn.Consumer[SlowCallRateExceededEvent]) EventListener
}

type EventType

type EventType string
const (
	Success              EventType = "SUCCESS"
	Error                EventType = "ERROR"
	NotPermitted         EventType = "NOT_PERMITTED"
	StateTransition      EventType = "STATE_TRANSITION"
	FailureRateExceeded  EventType = "FAILURE_RATE_EXCEEDED"
	SlowCallRateExceeded EventType = "SLOW_CALL_RATE_EXCEEDED"
)

type FailureRateExceededEvent added in v0.4.1

type FailureRateExceededEvent interface {
	Event
	FailureRate() float64
}

type Metrics

type Metrics interface {
	FailureRate() float64
	SlowCallRate() float64
	NumberOfCalls() uint64
	NumberOfSuccessfulCalls() uint64
	NumberOfFailedCalls() uint64
	NumberOfSlowCalls() uint64
	NumberOfSlowSuccessfulCalls() uint64
	NumberOfSlowFailedCalls() uint64
	NumberOfNotPermittedCalls() uint64
}

type NotPermittedError

type NotPermittedError struct {
	// contains filtered or unexported fields
}

func (*NotPermittedError) Error

func (e *NotPermittedError) Error() string

type NotPermittedEvent added in v0.4.1

type NotPermittedEvent interface {
	Event
}

type SlidingWindowType

type SlidingWindowType string
const (
	TimeBased  SlidingWindowType = "TIME_BASED"
	CountBased SlidingWindowType = "COUNT_BASED"
)

type SlowCallRateExceededEvent added in v0.4.1

type SlowCallRateExceededEvent interface {
	Event
	SlowCallRate() float64
}

type State

type State string
const (
	Closed     State = "CLOSED"
	Open       State = "OPEN"
	HalfOpen   State = "HALF_OPEN"
	Disabled   State = "DISABLED"
	ForcedOpen State = "FORCED_OPEN"
)

type StateTransitionEvent added in v0.4.1

type StateTransitionEvent interface {
	Event
	FromState() State
	ToState() State
}

type SuccessEvent added in v0.4.1

type SuccessEvent interface {
	Event
	Duration() time.Duration
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL