anchor.diff:  %%% Internal functions
   %%%===================================================================
   
  -tick(#s{nodes = Nodes, director_pid = DirPid, last_tick_time = LastTick, asserts = Asserts} = State) ->
  -
  -    lager:info("[ metrics ] TICK"),
  -
  -    Before = os:timestamp(),
  +tick(#s{last_tick_time = LastTick} = State) ->
  +    Now = os:timestamp(),
  +    TimeSinceTick = timer:now_diff(Now, LastTick),
  +    State1 = aggregate_metrics(State),
  +    State2 = check_assertions(TimeSinceTick, State1),
  +    State3 = check_signals(State2),
  +    State3#s{last_tick_time = Now}.
  +
  +aggregate_metrics(#s{nodes = Nodes} = State) ->
  +    lager:info("[ metrics ] METRIC AGGREGATION:"),
  +
  +    StartTime = os:timestamp(),
   
       Values = mzb_lists:pmap(
           fun (N) ->
  
positive.code:                 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),
      FailedAsserts = mzb_asserts:get_failed(_Finished = false, ?INTERVAL * 1000, NewAsserts),
  
      lager:info("Asserts:~n~p", [NewAsserts]),
  
negative.code:             end
          end, lists:usort([erlang:node()] ++ Nodes)),
  
      Aggregated = merge_metrics_data(Values),
  
      lager:info("[ metrics ] Updating metric values in exometer..."),
      lists:foreach(
          fun ({N, V, counter}) ->
                  exometer:update_or_create([?GLOBALPREFIX, N], V, counter, []);
  