anchor.diff:              State#s{previous_counter_values = NewData, last_rps_calculation_time = Now}
       end.
   
  -aggregate_metrics_data(Metrics) ->
  +merge_metrics_data(Metrics) ->
       lists:foldl(
           fun ({{Name, counter}, Vs}, Acc) ->
                   [{Name, lists:sum(Vs), counter}|Acc];
  
positive.code:     GroupedSignals = groupby(lists:flatten(RawSignals)),
      Signals = [{N, lists:max(Counts)} || {N, Counts} <- GroupedSignals],
      lager:info("List of currently registered signals:~n~s", [format_signals_count(Signals)]),
  
      lager:info("[ metrics ] TICK finished~n~s", [format_global_metrics()]),
      NewState#s{last_tick_time = Now, asserts = NewAsserts}.
  
  format_global_metrics() ->
      Metrics = exometer:find_entries([?GLOBALPREFIX]),
  
negative.code:                 exometer:update_or_create([?GLOBALPREFIX, N], V, gauge, [])
          end, Aggregated),
  
      lager:info("[ metrics ] Evaluating rates..."),
      NewState = eval_rps(State),
  
      FinishTime = os:timestamp(),
      MergingTime = timer:now_diff(FinishTime, StartTime) / 1000,
  
      ok = exometer:update_or_create(
          [?GLOBALPREFIX, "metric_merging_time"],
          MergingTime,
          gauge,
          []),
  
      lager:info("[ metrics ] Current metrics values:~n~s", [format_global_metrics()]),
      NewState.
  
  check_assertions(TimePeriod, #s{director_pid = DirPid, asserts = Asserts} = State) ->
      lager:info("[ metrics ] CHECK ASSERTIONS:"),
      NewAsserts = mzb_asserts:update_state(TimePeriod, Asserts),
      FailedAsserts = mzb_asserts:get_failed(_Finished = false, ?INTERVAL * 1000, NewAsserts),
  
      lager:info("Asserts:~n~p", [NewAsserts]),
  