circuitbreaker

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2025 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrOpenState se retorna cuando el circuit breaker está abierto
	ErrOpenState = errors.New("circuit breaker is open")

	// ErrTooManyRequests se retorna cuando hay demasiadas requests en estado half-open
	ErrTooManyRequests = errors.New("too many requests in half-open state")

	// Configuration validation errors
	ErrInvalidName         = errors.New("circuit breaker name cannot be empty")
	ErrInvalidMaxRequests  = errors.New("max requests must be greater than 0")
	ErrInvalidTimeout      = errors.New("timeout must be greater than 0")
	ErrInvalidInterval     = errors.New("interval cannot be negative")
	ErrInvalidFailureRatio = errors.New("failure ratio must be between 0.0 and 1.0")
	ErrNoFailureCriteria   = errors.New("must specify either failure threshold, failure ratio, or custom ReadyToTrip function")
)

Functions

func IsCircuitBreakerError

func IsCircuitBreakerError(err error) bool

IsCircuitBreakerError verifica si un error es de circuit breaker

func IsOpenStateError

func IsOpenStateError(err error) bool

IsOpenStateError verifica si un error es por estado abierto

func IsTooManyRequestsError

func IsTooManyRequestsError(err error) bool

IsTooManyRequestsError verifica si un error es por demasiadas requests

Types

type CircuitBreaker

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

CircuitBreaker representa un circuit breaker thread-safe

func New

func New(config *Config) (*CircuitBreaker, error)

New crea un nuevo circuit breaker

func (*CircuitBreaker) Call

func (cb *CircuitBreaker) Call(fn func() error) error

Call es un alias para Execute para compatibilidad

func (*CircuitBreaker) Config

func (cb *CircuitBreaker) Config() Config

Config retorna la configuración (solo lectura)

func (*CircuitBreaker) Counts

func (cb *CircuitBreaker) Counts() Counts

Counts retorna las métricas actuales

func (*CircuitBreaker) Execute

func (cb *CircuitBreaker) Execute(fn func() error) error

Execute ejecuta una función con protección del circuit breaker

func (*CircuitBreaker) ExecuteWithContext

func (cb *CircuitBreaker) ExecuteWithContext(ctx context.Context, fn func(context.Context) error) error

ExecuteWithContext ejecuta una función con contexto

func (*CircuitBreaker) ForceOpen

func (cb *CircuitBreaker) ForceOpen()

ForceOpen fuerza el circuit breaker al estado abierto

func (*CircuitBreaker) Name

func (cb *CircuitBreaker) Name() string

Name retorna el nombre del circuit breaker

func (*CircuitBreaker) Reset

func (cb *CircuitBreaker) Reset()

Reset reinicia el circuit breaker al estado cerrado

func (*CircuitBreaker) State

func (cb *CircuitBreaker) State() State

State retorna el estado actual del circuit breaker

type CircuitBreakerError

type CircuitBreakerError struct {
	Name    string        `json:"name"`
	State   State         `json:"state"`
	Message string        `json:"message"`
	Cause   error         `json:"-"`
	Timeout time.Duration `json:"timeout,omitempty"`
	Counts  Counts        `json:"counts,omitempty"`
}

CircuitBreakerError representa un error específico del circuit breaker

func NewOpenStateError

func NewOpenStateError(name string, timeout time.Duration, counts Counts) *CircuitBreakerError

NewOpenStateError crea un error para estado abierto

func NewTooManyRequestsError

func NewTooManyRequestsError(name string, maxRequests uint32, counts Counts) *CircuitBreakerError

NewTooManyRequestsError crea un error para demasiadas requests

func (*CircuitBreakerError) Error

func (e *CircuitBreakerError) Error() string

Error implementa la interfaz error

func (*CircuitBreakerError) IsOpenError

func (e *CircuitBreakerError) IsOpenError() bool

IsOpenError verifica si el error es por estado abierto

func (*CircuitBreakerError) IsTooManyRequestsError

func (e *CircuitBreakerError) IsTooManyRequestsError() bool

IsTooManyRequestsError verifica si el error es por demasiadas requests

func (*CircuitBreakerError) Unwrap

func (e *CircuitBreakerError) Unwrap() error

Unwrap permite unwrapping del error original

type Config

type Config struct {
	// Name es el nombre del circuit breaker para métricas y logs
	Name string `json:"name"`

	// MaxRequests es el número máximo de requests permitidas cuando está half-open
	MaxRequests uint32 `json:"max_requests"`

	// Interval es el período cíclico del estado closed
	// Si Interval es 0, el circuit breaker no limpia las métricas internas
	Interval time.Duration `json:"interval"`

	// Timeout es el período después del cual el breaker pasa de open a half-open
	Timeout time.Duration `json:"timeout"`

	// ReadyToTrip es una función que determina si el breaker debe activarse (ir a open)
	// Por defecto, usa FailureThreshold
	ReadyToTrip func(counts Counts) bool `json:"-"`

	// OnStateChange es un callback que se ejecuta cuando el estado cambia
	OnStateChange func(name string, from State, to State) `json:"-"`

	// IsSuccessful determina si un resultado es exitoso o no
	// Por defecto, considera exitoso cualquier error == nil
	IsSuccessful func(error) bool `json:"-"`

	// FailureThreshold es el umbral de fallos para activar el breaker
	// Solo se usa si ReadyToTrip es nil
	FailureThreshold uint32 `json:"failure_threshold"`

	// FailureRatio es el ratio de fallos (0.0-1.0) para activar el breaker
	// Solo se usa si ReadyToTrip es nil y FailureThreshold es 0
	FailureRatio float64 `json:"failure_ratio"`

	// MinimumRequestThreshold es el número mínimo de requests antes de evaluar el ratio
	MinimumRequestThreshold uint32 `json:"minimum_request_threshold"`
}

Config define la configuración de un circuit breaker

func DatabaseConfig

func DatabaseConfig(name string) *Config

DatabaseConfig retorna configuración optimizada para bases de datos

func DefaultConfig

func DefaultConfig(name string) *Config

DefaultConfig retorna una configuración por defecto

func ExternalServiceConfig

func ExternalServiceConfig(name string) *Config

ExternalServiceConfig retorna configuración para servicios externos

func HTTPClientConfig

func HTTPClientConfig(name string) *Config

HTTPClientConfig retorna configuración optimizada para clientes HTTP

func (*Config) Validate

func (c *Config) Validate() error

Validate valida la configuración

func (*Config) WithReadyToTrip

func (c *Config) WithReadyToTrip(readyToTrip func(counts Counts) bool) *Config

WithReadyToTrip configura la función personalizada de activación

func (*Config) WithStateChangeCallback

func (c *Config) WithStateChangeCallback(callback func(name string, from State, to State)) *Config

WithStateChangeCallback configura el callback de cambio de estado

func (*Config) WithSuccessFunction

func (c *Config) WithSuccessFunction(isSuccessful func(error) bool) *Config

WithSuccessFunction configura la función de éxito

type Counts

type Counts struct {
	Requests             uint32    `json:"requests"`
	TotalSuccesses       uint32    `json:"total_successes"`
	TotalFailures        uint32    `json:"total_failures"`
	ConsecutiveSuccesses uint32    `json:"consecutive_successes"`
	ConsecutiveFailures  uint32    `json:"consecutive_failures"`
	LastRequestTime      time.Time `json:"last_request_time"`
}

Counts representa las métricas del circuit breaker

func (Counts) FailureRatio

func (c Counts) FailureRatio() float64

FailureRatio calcula el ratio de fallos

func (Counts) SuccessRatio

func (c Counts) SuccessRatio() float64

SuccessRatio calcula el ratio de éxitos

type State

type State int

State representa el estado del circuit breaker

const (
	StateClosed State = iota
	StateHalfOpen
	StateOpen
)

func (State) String

func (s State) String() string

String implementa Stringer para State

Jump to

Keyboard shortcuts

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