monasca-thresh/src/main/java/com/hpcloud/mon/infrastructure/thresholding/MetricSpout.java

43 lines
1.5 KiB
Java

package com.hpcloud.mon.infrastructure.thresholding;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import com.hpcloud.mon.MetricSpoutConfig;
import com.hpcloud.mon.common.model.metric.MetricEnvelope;
import com.hpcloud.mon.common.model.metric.MetricEnvelopes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MetricSpout extends KafkaSpout {
private static final Logger LOG = LoggerFactory.getLogger(MetricSpout.class);
private static final long serialVersionUID = 744004533863562119L;
public MetricSpout(MetricSpoutConfig metricSpoutConfig) {
super(metricSpoutConfig.kafkaConsumerConfiguration);
LOG.info("Created");
}
@Override
protected void processMessage(byte[] message, SpoutOutputCollector collector) {
final MetricEnvelope metricEnvelope;
try {
metricEnvelope = MetricEnvelopes.fromJson(message);
LOG.debug("metric envelope: {}", metricEnvelope);
}
catch (RuntimeException re) {
LOG.warn("Error parsing MetricEnvelope", re);
return;
}
collector.emit(new Values(metricEnvelope.metric.definition(), metricEnvelope.metric));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("metricDefinition", "metric"));
}
}