anchor.diff:          _ -> {error, not_found}
       end.
   
  -eval_rps(#s{previous_counter_values = PreviousData, last_rps_calculation_time = LastRPSCalculationTime} = State, Now) ->
  +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;
  
positive.code:             lager:error("Interrupting benchmark because of failed asserts:~n~s", [string:join([Str|| {_, Str} <- FailedAsserts], "\n")]),
              mzb_director:stop_benchmark(DirPid, {assertions_failed, FailedAsserts})
      end,
  
      ok = exometer:update_or_create(
          [?GLOBALPREFIX, "metric_merging_time"],
          timer:now_diff(os:timestamp(), Before) / 1000,
          gauge,
          []),
  
      lager:info("[ metrics ] Checking signals..."),
      RawSignals = mzb_lists:pmap(
          fun (N) ->
              lager:info("[ metrics ] Reading signals from ~p...", [N]),
  
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]),
  