class Semian::CircuitBreaker
def initialize(name, exceptions:, success_threshold:, error_threshold:,
def initialize(name, exceptions:, success_threshold:, error_threshold:, error_timeout:, implementation:, half_open_resource_timeout: nil, error_threshold_timeout: nil) @name = name.to_sym @success_count_threshold = success_threshold @error_count_threshold = error_threshold @error_threshold_timeout = error_threshold_timeout || error_timeout @error_timeout = error_timeout @exceptions = exceptions @half_open_resource_timeout = half_open_resource_timeout @errors = implementation::SlidingWindow.new(max_size: @error_count_threshold) @successes = implementation::Integer.new @state = implementation::State.new reset end