package io.reactivex.netty.spectator.internal; import com.netflix.spectator.api.Counter; import com.netflix.spectator.api.Registry; import com.netflix.spectator.api.histogram.PercentileTimer; import java.util.concurrent.TimeUnit; import static io.reactivex.netty.spectator.internal.SpectatorUtils.*; public class EventMetric { private final Counter start; private final PercentileTimer startLatency; private final Counter success; private final PercentileTimer successLatency; private final Counter failed; private final PercentileTimer failureLatency; public EventMetric(Registry registry, String name, String monitorId, String... tags) { start = newCounter(registry, name, monitorId, mergeTags(tags, "rtype", "count", "state", "start")); startLatency = newPercentileTimer(registry, name, monitorId, mergeTags(tags, "rtype", "latency", "state", "start")); success = newCounter(registry, name, monitorId, mergeTags(tags, "rtype", "count", "state", "success")); successLatency = newPercentileTimer(registry, name, monitorId, mergeTags(tags, "rtype", "latency", "state", "success")); failed = newCounter(registry, name, monitorId, mergeTags(tags, "rtype", "count", "state", "failed")); failureLatency = newPercentileTimer(registry, name, monitorId, mergeTags(tags, "rtype", "latency", "state", "failed")); } public void start() { start.increment(); } public void start(long duration, TimeUnit timeUnit) { start.increment(); startLatency.record(duration, timeUnit); } public void success() { success.increment(); } public void success(long duration, TimeUnit timeUnit) { success.increment(); successLatency.record(duration, timeUnit); } public void failure() { failed.increment(); } public void failure(long duration, TimeUnit timeUnit) { failed.increment(); failureLatency.record(duration, timeUnit); } }