, io_bytes_out :: non_neg_integer()
, context_switches :: non_neg_integer()
, reductions :: non_neg_integer()
+ , run_queue :: non_neg_integer()
%, statistics :: [{atom() , term()}]
%, system :: [{atom() , term()}]
%, process :: [{atom() , term()}]
{application, beam_stats,
[
{description, "Periodic VM stats production and consumption."},
- {vsn, "0.4.0"},
+ {vsn, "0.5.0"},
{registered, []},
{applications,
[ kernel
, io_bytes_out = IOBytesOut
, context_switches = ContextSwitches
, reductions = Reductions
+ , run_queue = RunQueue
}
) ->
NodeIDBin = node_id_to_bin(NodeID),
, io_bytes_out_to_msg(IOBytesOut)
, context_switches_to_msg(ContextSwitches)
, reductions_to_msg(Reductions)
+ , run_queue_to_msg(RunQueue)
| memory_to_msgs(Memory)
],
Msgs2 = [statsd_msg_add_name_prefix(M, NodeIDBin) || M <- Msgs1],
[statsd_msg_to_bin(M) || M <- Msgs2].
+-spec run_queue_to_msg(non_neg_integer()) ->
+ statsd_msg().
+run_queue_to_msg(RunQueue) ->
+ #statsd_msg
+ { name = <<"run_queue">>
+ , value = RunQueue
+ , type = gauge
+ }.
+
-spec reductions_to_msg(non_neg_integer()) ->
statsd_msg().
reductions_to_msg(Reductions) ->
, current_context_switches :: non_neg_integer()
, reductions :: non_neg_integer()
+ , run_queue :: non_neg_integer()
}).
-define(T, #?MODULE).
} = erlang:statistics(io),
{CurrentContextSwitches, 0} = erlang:statistics(context_switches),
{_ReductionsTotal, ReductionsDelta} = erlang:statistics(reductions),
+ RunQueue = erlang:statistics(run_queue),
?T
{ timestamp = os:timestamp()
, node_id = erlang:node()
, previous_context_switches = 0
, current_context_switches = CurrentContextSwitches
, reductions = ReductionsDelta
+ , run_queue = RunQueue
}.
-spec update(t()) ->
} = erlang:statistics(io),
{CurrentContextSwitches, 0} = erlang:statistics(context_switches),
{_ReductionsTotal, ReductionsDelta} = erlang:statistics(reductions),
+ RunQueue = erlang:statistics(run_queue),
?T
{ timestamp = os:timestamp()
, node_id = erlang:node()
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
, reductions = ReductionsDelta
+ , run_queue = RunQueue
}.
-spec export(t()) ->
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
, reductions = Reductions
+ , run_queue = RunQueue
}
) ->
#beam_stats
, io_bytes_out = CurrentIOBytesOut - PreviousIOBytesOut
, context_switches = CurrentContextSwitches - PreviousContextSwitches
, reductions = Reductions
+ , run_queue = RunQueue
}.
, io_bytes_out = 7
, context_switches = 5
, reductions = 9
+ , run_queue = 17
},
ServerPort = 8125,
{ok, ServerSocket} = gen_udp:open(ServerPort, [binary, {active, false}]),
ResultOfReceive = gen_udp:recv(ServerSocket, 0),
ok = gen_udp:close(ServerSocket),
{ok, {_, _, Data}} = ResultOfReceive,
+ ct:log("Packet: ~n~s~n", [Data]),
<< "beam_stats.node_foo_host_bar.io.bytes_in:3|g\n"
, "beam_stats.node_foo_host_bar.io.bytes_out:7|g\n"
, "beam_stats.node_foo_host_bar.context_switches:5|g\n"
, "beam_stats.node_foo_host_bar.reductions:9|g\n"
+ , "beam_stats.node_foo_host_bar.run_queue:17|g\n"
, "beam_stats.node_foo_host_bar.memory.mem_type_foo:1|g\n"
>> = Data.