 Documentation
      ¶
      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