From: Siraaj Khandkar Date: Wed, 23 Sep 2015 23:55:21 +0000 (-0400) Subject: feat: implement beam_stats_msg_graphite:to_bin/1 X-Git-Tag: 0.10.0^2~6 X-Git-Url: https://git.xandkar.net/?p=beam_stats.git;a=commitdiff_plain;h=67948b18dddf1311ac0477340ab7304b54090824 feat: implement beam_stats_msg_graphite:to_bin/1 --- diff --git a/src/beam_stats_msg_graphite.erl b/src/beam_stats_msg_graphite.erl index b8d88a1..5b4e6e2 100644 --- a/src/beam_stats_msg_graphite.erl +++ b/src/beam_stats_msg_graphite.erl @@ -13,7 +13,7 @@ -export( [ of_beam_stats/1 - %, to_bin/1 + , to_bin/1 ]). -define(T, #?MODULE). @@ -21,6 +21,10 @@ -type t() :: ?T{}. +%% ============================================================================ +%% API +%% ============================================================================ + -spec of_beam_stats(beam_stats:t()) -> [t()]. of_beam_stats(#beam_stats{node_id=NodeID}=BeamStats) -> @@ -56,6 +60,38 @@ of_beam_stats(#beam_stats ++ of_ets(ETS, NodeID, Ts) ++ of_processes(Processes, NodeID, Ts). +-spec to_bin(t()) -> + binary(). +to_bin( + ?T + { path = Path + , value = Value + , timestamp = Timestamp + } +) -> + PathBin = bin_join(Path, <<".">>), + ValueBin = integer_to_binary(Value), + TimestampInt = timestamp_to_integer(Timestamp), + TimestampBin = integer_to_binary(TimestampInt), + <>. + +%% ============================================================================ +%% Helpers +%% ============================================================================ + +-spec bin_join([binary()], binary()) -> + binary(). +bin_join([] , <<_/binary>> ) -> <<>>; +bin_join([<> | []] , <<_/binary>> ) -> B; +bin_join([<> | [_|_]=Bins], <>) -> + BinsBin = bin_join(Bins, Sep), + <>. + +-spec timestamp_to_integer(erlang:timestamp()) -> + non_neg_integer(). +timestamp_to_integer({Megaseconds, Seconds, _}) -> + Megaseconds * 1000000 + Seconds. + -spec of_memory([{atom(), non_neg_integer()}], binary(), erlang:timestamp()) -> [t()]. of_memory(Memory, <>, Timestamp) ->