ExMCP.Reliability.CircuitBreaker.Core (ex_mcp v1.0.0-rc.1)

View Source

Pure circuit-breaker state machine used by ExMCP.Reliability.CircuitBreaker.

Summary

Functions

Checks if a request should be allowed based on the current circuit state.

Checks if a request should be allowed and returns both the result and updated state.

Forces the circuit breaker to a specific state.

Gets the current state of the circuit breaker.

Gets circuit breaker statistics.

Creates a new circuit breaker with the given configuration.

Records a failed operation and updates the circuit breaker state.

Records a successful operation and updates the circuit breaker state.

Resets the circuit breaker to its initial state.

Types

config()

@type config() :: %{
  failure_threshold: non_neg_integer(),
  success_threshold: non_neg_integer(),
  timeout: non_neg_integer(),
  failure_rate_threshold: float(),
  minimum_throughput: non_neg_integer(),
  reset_timeout: non_neg_integer()
}

state()

@type state() :: :closed | :open | :half_open

t()

@type t() :: %ExMCP.Reliability.CircuitBreaker.Core{
  config: map(),
  failure_count: non_neg_integer(),
  last_failure_time: integer() | nil,
  last_success_time: integer() | nil,
  opened_at: integer() | nil,
  state: state(),
  stats: map(),
  success_count: non_neg_integer()
}

Functions

allow_request?(circuit_breaker)

@spec allow_request?(t()) :: boolean()

Checks if a request should be allowed based on the current circuit state.

allow_request_with_state?(circuit_breaker)

@spec allow_request_with_state?(t()) :: {boolean(), t()}

Checks if a request should be allowed and returns both the result and updated state.

force_state(circuit_breaker, new_state)

@spec force_state(t(), state()) :: t()

Forces the circuit breaker to a specific state.

get_state(circuit_breaker)

@spec get_state(t()) :: state()

Gets the current state of the circuit breaker.

get_stats(circuit_breaker)

@spec get_stats(t()) :: map()

Gets circuit breaker statistics.

new(config \\ %{})

@spec new(config() | map()) :: t()

Creates a new circuit breaker with the given configuration.

record_failure(circuit_breaker)

@spec record_failure(t()) :: t()

Records a failed operation and updates the circuit breaker state.

record_success(circuit_breaker)

@spec record_success(t()) :: t()

Records a successful operation and updates the circuit breaker state.

reset(circuit_breaker)

@spec reset(t()) :: t()

Resets the circuit breaker to its initial state.