klarna / Circuit_breaker
Licence: apache-2.0
💥 An Erlang library for breaking out of faulty services
Stars: ✠136
Programming Languages
erlang
1774 projects
Generic circuit breaker that can be used to break any service that isn't fully functional. A service can be manually blocked/cleared as well.
See doc/overview.edoc for more info.
Building
rebar3 compile
rebar3 doc
rebar3 eunit
Using
%% Circuit-breaking
call(State, SomeId) ->
circuit_breaker:call(
% service identifier for the circuit
{myservice, SomeId},
% function being monitored
fun() -> some_call(State) end,
% call timeout
timer:minutes(1),
% reset fun, just returns true
fun() -> true end,
% timeout before reset in case of break
timer:minutes(5),
%% Options
[
% Number of errors tolerated per unit of time.
{n_error, 3},
{time_error, timer:minutes(30)},
%% number of calls returning 'timeout' tolerated in a given
%% period of time.
{n_timeout, 3},
% interval to happen
{time_timeout, timer:minutes(30)},
%% number of calls not responding in due time tolerated, and
%% the time interval for the N failures to happen
{n_call_timeout, 3},
{time_call_timeout, timer:minutes(25)},
%% When failing, the {'EXIT', Reason} tuple will be returned from
%% the call. This list of `Reason's allows to avoid counting specific
%% errors towards thresholds that can break a circuit.
{ignore_errors, []}
]
).
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].