, previous_context_switches :: non_neg_integer()
, current_context_switches :: non_neg_integer()
+
+ , reductions :: non_neg_integer()
+ , run_queue :: non_neg_integer()
}).
-define(T, #?MODULE).
, {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()
, 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
- , previous_context_switches = PreviousContextSwitches
+ { 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()
, current_io_bytes_out = CurrentIOBytesOut
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
+ , reductions = ReductionsDelta
+ , run_queue = RunQueue
}.
-spec export(t()) ->
, current_io_bytes_out = CurrentIOBytesOut
, previous_context_switches = PreviousContextSwitches
, current_context_switches = CurrentContextSwitches
+ , reductions = Reductions
+ , run_queue = RunQueue
}
) ->
#beam_stats
, io_bytes_in = CurrentIOBytesIn - PreviousIOBytesIn
, io_bytes_out = CurrentIOBytesOut - PreviousIOBytesOut
, context_switches = CurrentContextSwitches - PreviousContextSwitches
+ , reductions = Reductions
+ , run_queue = RunQueue
}.