X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=src%2Fbeam_stats_state.erl;h=1fd6e9d091760798d6e2866ceea9af634c34c091;hb=093e16693e52d84ef7c158aa9d808efe6a9b2e85;hp=552b5b15f859492a46f6b852493f1ffcb367eb02;hpb=b4e2333fc5fd9f32c8a0a39db4c6faacdbb15a91;p=beam_stats.git diff --git a/src/beam_stats_state.erl b/src/beam_stats_state.erl index 552b5b1..1fd6e9d 100644 --- a/src/beam_stats_state.erl +++ b/src/beam_stats_state.erl @@ -16,10 +16,17 @@ { 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() + + , reductions :: non_neg_integer() + , run_queue :: non_neg_integer() }). -define(T, #?MODULE). @@ -33,6 +40,9 @@ new() -> { {input , CurrentIOBytesIn} , {output , CurrentIOBytesOut} } = 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() @@ -41,18 +51,26 @@ new() -> , previous_io_bytes_out = 0 , current_io_bytes_in = CurrentIOBytesIn , current_io_bytes_out = CurrentIOBytesOut + , previous_context_switches = 0 + , current_context_switches = CurrentContextSwitches + , reductions = ReductionsDelta + , run_queue = RunQueue }. -spec update(t()) -> t(). update(?T - { previous_io_bytes_in = PreviousIOBytesIn - , previous_io_bytes_out = PreviousIOBytesOut + { current_io_bytes_in = PreviousIOBytesIn + , current_io_bytes_out = PreviousIOBytesOut + , current_context_switches = PreviousContextSwitches } ) -> { {input , CurrentIOBytesIn} , {output , CurrentIOBytesOut} } = 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() @@ -61,6 +79,10 @@ 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 + , reductions = ReductionsDelta + , run_queue = RunQueue }. -spec export(t()) -> @@ -74,6 +96,10 @@ export( , previous_io_bytes_out = PreviousIOBytesOut , current_io_bytes_in = CurrentIOBytesIn , current_io_bytes_out = CurrentIOBytesOut + , previous_context_switches = PreviousContextSwitches + , current_context_switches = CurrentContextSwitches + , reductions = Reductions + , run_queue = RunQueue } ) -> #beam_stats @@ -82,4 +108,7 @@ export( , memory = Memory , io_bytes_in = CurrentIOBytesIn - PreviousIOBytesIn , io_bytes_out = CurrentIOBytesOut - PreviousIOBytesOut + , context_switches = CurrentContextSwitches - PreviousContextSwitches + , reductions = Reductions + , run_queue = RunQueue }.