Current section

Files

Jump to
metrics src metrics_folsom.erl
Raw

src/metrics_folsom.erl

%% Copyright (c) 2016, Benoit Chesneau.
%%
%% This file is part of barrel_metrics released under the BSD license.
%% See the NOTICE for more information.
%% @doc folsom backend
%% Created by benoitc on 26/06/16.
-module(metrics_folsom).
-author("Benoit Chesneau").
%% API
-export([new/3, update/3, update_or_create/4, delete/2]).
-spec new(atom(), any(), map()) -> ok | {error, term()}.
new(counter, Name, _Config) ->
folsom_metrics:new_counter(Name);
new(histogram, Name, _Config) ->
folsom_metrics:new_histogram(Name);
new(gauge, Name, _Config) ->
folsom_metrics:new_gauge(Name);
new(meter, Name, _Config) ->
folsom_metrics:new_meter(Name);
new(spiral, Name, _Config) ->
folsom_metrics:new_spiral(Name);
new(_, _, _) ->
{error, unsupported_type}.
update(Name, {c, I}, _Config) when I >= 0 ->
folsom_metrics:notify(Name, {inc, I});
update(Name, {c, I}, _Config) when I < 0 ->
folsom_metrics:notify(Name, {dec, abs(I)});
update(Name, Val, _Config) ->
folsom_metrics:notify(Name, Val).
update_or_create(Name, Probe, Type, Config) ->
case update(Name, Probe, Config) of
ok -> ok;
{error, Name, nonexistent_metric} ->
new(Type, Name, Config),
update(Name, Probe, Config);
Error ->
Error
end.
delete(Name, _Config) ->
folsom_metrics:delete_metric(Name).