Documentation
¶
Index ¶
- Variables
- func IsCircuitBreakerError(err error) bool
- func IsOpenStateError(err error) bool
- func IsTooManyRequestsError(err error) bool
- type CircuitBreaker
- func (cb *CircuitBreaker) Call(fn func() error) error
- func (cb *CircuitBreaker) Config() Config
- func (cb *CircuitBreaker) Counts() Counts
- func (cb *CircuitBreaker) Execute(fn func() error) error
- func (cb *CircuitBreaker) ExecuteWithContext(ctx context.Context, fn func(context.Context) error) error
- func (cb *CircuitBreaker) ForceOpen()
- func (cb *CircuitBreaker) Name() string
- func (cb *CircuitBreaker) Reset()
- func (cb *CircuitBreaker) State() State
- type CircuitBreakerError
- type Config
- type Counts
- type State
Constants ¶
This section is empty.
Variables ¶
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 ¶
IsCircuitBreakerError verifica si un error es de circuit breaker
func IsOpenStateError ¶
IsOpenStateError verifica si un error es por estado abierto
func IsTooManyRequestsError ¶
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 (*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 ¶
DatabaseConfig retorna configuración optimizada para bases de datos
func DefaultConfig ¶
DefaultConfig retorna una configuración por defecto
func ExternalServiceConfig ¶
ExternalServiceConfig retorna configuración para servicios externos
func HTTPClientConfig ¶
HTTPClientConfig retorna configuración optimizada para clientes HTTP
func (*Config) WithReadyToTrip ¶
WithReadyToTrip configura la función personalizada de activación
func (*Config) WithStateChangeCallback ¶
WithStateChangeCallback configura el callback de cambio de estado
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 ¶
FailureRatio calcula el ratio de fallos
func (Counts) SuccessRatio ¶
SuccessRatio calcula el ratio de éxitos