package storm.applications.hooks; import backtype.storm.hooks.BaseTaskHook; import backtype.storm.hooks.info.BoltExecuteInfo; import backtype.storm.hooks.info.EmitInfo; import backtype.storm.task.TopologyContext; import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; import java.util.Map; import java.util.concurrent.TimeUnit; import storm.applications.metrics.MetricsFactory; import storm.applications.util.config.Configuration; /** * * @author mayconbordin */ public class BoltMeterHook extends BaseTaskHook { private Configuration config; private Meter emittedTuples; private Meter receivedTuples; private Timer executeLatency; @Override public void prepare(Map conf, TopologyContext context) { config = Configuration.fromMap(conf); MetricRegistry registry = MetricsFactory.createRegistry(config); String componentId = context.getThisComponentId(); String taskId = String.valueOf(context.getThisTaskId()); emittedTuples = registry.meter(MetricRegistry.name("emitted", componentId, taskId)); receivedTuples = registry.meter(MetricRegistry.name("received", componentId, taskId)); executeLatency = registry.timer(MetricRegistry.name("execute-latency", componentId, taskId)); } @Override public void boltExecute(BoltExecuteInfo info) { receivedTuples.mark(); if (info.executeLatencyMs != null) { executeLatency.update(info.executeLatencyMs, TimeUnit.MILLISECONDS); } } @Override public void emit(EmitInfo info) { emittedTuples.mark(); } }