Current section

Files

Jump to
statsderl src statsderl_protocol.erl
Raw

src/statsderl_protocol.erl

-module(statsderl_protocol).
-include("statsderl.hrl").
-compile(inline).
-compile({inline_size, 512}).
-export([
encode/1
]).
%% public
-spec encode(operation()) -> iodata().
encode({counter, Key, Value, SampleRate}) ->
[Key, <<":">>, format_value(Value), <<"|c">>,
format_sample_rate(SampleRate)];
encode({gauge, Key, Value}) ->
[Key, <<":">>, format_value(Value), <<"|g">>];
encode({gauge_decrement, Key, Value}) ->
[Key, <<":-">>, format_value(Value), <<"|g">>];
encode({gauge_increment, Key, Value}) ->
[Key, <<":+">>, format_value(Value), <<"|g">>];
encode({timing, Key, Value}) ->
[Key, <<":">>, format_value(Value), <<"|ms">>].
%% private
format_sample_rate(SampleRate) when SampleRate >= 1 ->
<<>>;
format_sample_rate(SampleRate) ->
[<<"|@">>, float_to_list(SampleRate, [compact, {decimals, 6}])].
format_value(Value) when is_integer(Value) ->
integer_to_list(Value);
format_value(Value) when is_float(Value) ->
float_to_list(Value, [{decimals, 2}]).