anchor.diff:                  exometer:update_or_create([?GLOBALPREFIX, N], V, gauge, [])
           end, Aggregated),
   
  -    Now = os:timestamp(),
  -    TimeSinceTick = timer:now_diff(Now, LastTick),
  -
       lager:info("[ metrics ] Evaluating rates..."),
  -    NewState = eval_rps(State, Now),
  -
  -    lager:info("[ metrics ] Checking assertions..."),
  -    NewAsserts = mzb_asserts:update_state(TimeSinceTick, Asserts),
  +    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]),
  
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:         _ -> {error, not_found}
      end.
  
  eval_rps(#s{previous_counter_values = PreviousData, last_rps_calculation_time = LastRPSCalculationTime} = State) ->
      Now = os:timestamp(),
      TimeInterval = timer:now_diff(Now, LastRPSCalculationTime),
      case TimeInterval > 1000000 of
          false -> State;
  