feat: handle ETS tables in graphite_msg
[beam_stats.git] / src / beam_stats_msg_graphite.erl
index 1592549..bc08353 100644 (file)
@@ -1,6 +1,7 @@
 -module(beam_stats_msg_graphite).
 
 -include("include/beam_stats.hrl").
+-include("include/beam_stats_ets_table.hrl").
 -include("include/beam_stats_msg_graphite.hrl").
 
 -export_type(
@@ -29,11 +30,28 @@ of_beam_stats(#beam_stats
     { timestamp = Timestamp
     , node_id   = _
     , memory    = Memory
-    % TODO: Handle the rest of data point
+    % TODO: Handle the rest of data points
+    , io_bytes_in      = IOBytesIn
+    , io_bytes_out     = IOBytesOut
+    , context_switches = ContextSwitches
+    , reductions       = Reductions
+    , run_queue        = RunQueue
+    , ets              = ETS
+    , processes        = _Processes
     },
     <<NodeID/binary>>
 ) ->
-    of_memory(Memory, NodeID, Timestamp).
+    Ts = Timestamp,
+    N = NodeID,
+    [ cons([N, <<"io">>               , <<"bytes_in">> ], IOBytesIn      , Ts)
+    , cons([N, <<"io">>               , <<"bytes_out">>], IOBytesOut     , Ts)
+    , cons([N, <<"context_switches">>                  ], ContextSwitches, Ts)
+    , cons([N, <<"reductions">>                        ], Reductions     , Ts)
+    , cons([N, <<"run_queue">>                         ], RunQueue       , Ts)
+    | of_memory(Memory, NodeID, Ts)
+    ]
+    ++ of_ets(ETS, NodeID, Ts)
+    .
 
 -spec of_memory([{atom(), non_neg_integer()}], binary(), erlang:timestamp()) ->
     [t()].
@@ -41,14 +59,44 @@ of_memory(Memory, <<NodeID/binary>>, Timestamp) ->
     ComponentToMessage =
         fun ({Key, Value}) ->
             KeyBin = atom_to_binary(Key, latin1),
-            ?T
-            { path      = [NodeID, <<"memory">>, KeyBin]
-            , value     = Value
-            , timestamp = Timestamp
-            }
+            cons([NodeID, <<"memory">>, KeyBin], Value, Timestamp)
         end,
     lists:map(ComponentToMessage, Memory).
 
+-spec of_ets(beam_stats_ets_table:t(), binary(), erlang:timestamp()) ->
+    [t()].
+of_ets(PerTableStats, <<NodeID/binary>>, Timestamp) ->
+    OfEtsTable = fun (Table) -> of_ets_table(Table, NodeID, Timestamp) end,
+    NestedMsgs = lists:map(OfEtsTable, PerTableStats),
+    lists:append(NestedMsgs).
+
+-spec of_ets_table(beam_stats_ets_table:t(), binary(), erlang:timestamp()) ->
+    [t()].
+of_ets_table(#beam_stats_ets_table
+    { id     = ID
+    , name   = Name
+    , size   = Size
+    , memory = Memory
+    },
+    <<NodeID/binary>>,
+    Timestamp
+) ->
+    IDBin     = beam_stats_ets_table:id_to_bin(ID),
+    NameBin   = atom_to_binary(Name, latin1),
+    NameAndID = [NameBin, IDBin],
+    [ cons([NodeID, <<"ets_table">>, <<"size">>   | NameAndID], Size  , Timestamp)
+    , cons([NodeID, <<"ets_table">>, <<"memory">> | NameAndID], Memory, Timestamp)
+    ].
+
+-spec cons([binary()], integer(), erlang:timestamp()) ->
+    t().
+cons(Path, Value, Timestamp) ->
+    ?T
+    { path      = Path
+    , value     = Value
+    , timestamp = Timestamp
+    }.
+
 -spec node_id_to_bin(node()) ->
     binary().
 node_id_to_bin(NodeID) ->
This page took 0.03313 seconds and 4 git commands to generate.