Skip to content
This repository has been archived by the owner on Mar 22, 2023. It is now read-only.

Commit

Permalink
Track context_switches delta.
Browse files Browse the repository at this point in the history
  • Loading branch information
xandkar committed Aug 25, 2015
1 parent b4e2333 commit 3fe887d
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/beam_stats.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
, memory :: [{atom(), non_neg_integer()}]
, io_bytes_in :: non_neg_integer()
, io_bytes_out :: non_neg_integer()
, context_switches :: non_neg_integer()
%, statistics :: [{atom() , term()}]
%, system :: [{atom() , term()}]
%, process :: [{atom() , term()}]
Expand Down
2 changes: 1 addition & 1 deletion src/beam_stats.app.src
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{application, beam_stats,
[
{description, "Periodic VM stats production and consumption."},
{vsn, "0.2.0"},
{vsn, "0.3.0"},
{registered, []},
{applications,
[ kernel
Expand Down
11 changes: 11 additions & 0 deletions src/beam_stats_consumer_statsd.erl
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,28 @@ beam_stats_to_bins(#beam_stats
, memory = Memory
, io_bytes_in = IOBytesIn
, io_bytes_out = IOBytesOut
, context_switches = ContextSwitches
}
) ->
NodeIDBin = node_id_to_bin(NodeID),
Msgs1 =
[ io_bytes_in_to_msg(IOBytesIn)
, io_bytes_out_to_msg(IOBytesOut)
, context_switches_to_msg(ContextSwitches)
| memory_to_msgs(Memory)
],
Msgs2 = [statsd_msg_add_name_prefix(M, NodeIDBin) || M <- Msgs1],
[statsd_msg_to_bin(M) || M <- Msgs2].

-spec context_switches_to_msg(non_neg_integer()) ->
statsd_msg().
context_switches_to_msg(ContextSwitches) ->
#statsd_msg
{ name = <<"context_switches">>
, value = ContextSwitches
, type = gauge
}.

-spec io_bytes_in_to_msg(non_neg_integer()) ->
statsd_msg().
io_bytes_in_to_msg(IOBytesIn) ->
Expand Down
14 changes: 14 additions & 0 deletions src/beam_stats_state.erl
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@
{ timestamp :: erlang:timestamp()
, node_id :: atom()
, memory :: [{atom(), non_neg_integer()}]

, previous_io_bytes_in :: non_neg_integer()
, previous_io_bytes_out :: non_neg_integer()
, current_io_bytes_in :: non_neg_integer()
, current_io_bytes_out :: non_neg_integer()

, previous_context_switches :: non_neg_integer()
, current_context_switches :: non_neg_integer()
}).

-define(T, #?MODULE).
Expand All @@ -33,6 +37,7 @@ new() ->
{ {input , CurrentIOBytesIn}
, {output , CurrentIOBytesOut}
} = erlang:statistics(io),
{CurrentContextSwitches, 0} = erlang:statistics(context_switches),
?T
{ timestamp = os:timestamp()
, node_id = erlang:node()
Expand All @@ -41,18 +46,22 @@ new() ->
, previous_io_bytes_out = 0
, current_io_bytes_in = CurrentIOBytesIn
, current_io_bytes_out = CurrentIOBytesOut
, previous_context_switches = 0
, current_context_switches = CurrentContextSwitches
}.

-spec update(t()) ->
t().
update(?T
{ previous_io_bytes_in = PreviousIOBytesIn
, previous_io_bytes_out = PreviousIOBytesOut
, previous_context_switches = PreviousContextSwitches
}
) ->
{ {input , CurrentIOBytesIn}
, {output , CurrentIOBytesOut}
} = erlang:statistics(io),
{CurrentContextSwitches, 0} = erlang:statistics(context_switches),
?T
{ timestamp = os:timestamp()
, node_id = erlang:node()
Expand All @@ -61,6 +70,8 @@ update(?T
, previous_io_bytes_out = PreviousIOBytesOut
, current_io_bytes_in = CurrentIOBytesIn
, current_io_bytes_out = CurrentIOBytesOut
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
}.

-spec export(t()) ->
Expand All @@ -74,6 +85,8 @@ export(
, previous_io_bytes_out = PreviousIOBytesOut
, current_io_bytes_in = CurrentIOBytesIn
, current_io_bytes_out = CurrentIOBytesOut
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
}
) ->
#beam_stats
Expand All @@ -82,4 +95,5 @@ export(
, memory = Memory
, io_bytes_in = CurrentIOBytesIn - PreviousIOBytesIn
, io_bytes_out = CurrentIOBytesOut - PreviousIOBytesOut
, context_switches = CurrentContextSwitches - PreviousContextSwitches
}.
2 changes: 2 additions & 0 deletions test/beam_stats_consumer_statsd_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ t_send(_Cfg) ->
, memory = [{mem_type_foo, 1}]
, io_bytes_in = 3
, io_bytes_out = 7
, context_switches = 5
},
ServerPort = 8125,
{ok, ServerSocket} = gen_udp:open(ServerPort, [binary, {active, false}]),
Expand All @@ -52,5 +53,6 @@ t_send(_Cfg) ->
{ok, {_, _, Data}} = ResultOfReceive,
<< "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.memory.mem_type_foo:1|g\n"
>> = Data.

0 comments on commit 3fe887d

Please sign in to comment.