package com.outbrain.gruffalo.publish; import com.outbrain.swinfra.metrics.api.MetricFactory; import com.outbrain.swinfra.metrics.api.Timer; /** * A thin layer on top of a {@link com.outbrain.gruffalo.publish.MetricsPublisher} adding timing aspect * * @author Eran Harel */ class TimedMetricsPublisher implements MetricsPublisher { private final MetricsPublisher timedDelegate; private final Timer timer; public TimedMetricsPublisher(final MetricsPublisher timedDelegate, final MetricFactory metricFactory, final String publisherName) { this.timedDelegate = timedDelegate; timer = metricFactory.createTimer(timedDelegate.getClass().getSimpleName(), publisherName); } @Override public void publishMetrics(final String payload) { final Timer.Context timerContext = timer.time(); try { timedDelegate.publishMetrics(payload); } finally { timerContext.stop(); } } }