Fix not-updated previous stats state values.
[beam_stats.git] / src / beam_stats_state.erl
index 552b5b1..1fd6e9d 100644 (file)
     { 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
     }.
This page took 0.028014 seconds and 4 git commands to generate.