in concurrency-loadbalancer-m3/src/main/java/com/uber/concurrency/loadbalancer/TallyMetricsTaskListener.java [105:119]
public void onCreate(T t) {
String name = taskNameMapper.apply(t);
scope.tagged(ImmutableMap.of(TAG_TASK, name)).counter(METRIC_NAME_REQUEST_RATE).inc(1);
taskRates.computeIfAbsent(t, o -> new EWMARates()).update(1);
long oldTick = this.lastTick.get();
long newTick = ticker.read();
long age = newTick - oldTick;
//report standard deviation of m1/5/15 rates to M3 to indicates balance of load balancing
if (age > TICK_INTERVAL_NANOS && this.lastTick.compareAndSet(oldTick, newTick)) {
scope.gauge(METRIC_NAME_M1RATE_STDDEV).update(calcStandardDeviation(o->o.m1Rate));
scope.gauge(METRIC_NAME_M5RATE_STDDEV).update(calcStandardDeviation(o->o.m5Rate));
scope.gauge(METRIC_NAME_M15RATE_STDDEV).update(calcStandardDeviation(o->o.m15Rate));
}
}