package storm.applications.bolt; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import storm.applications.constants.LogProcessingConstants.Field; /** * This bolt will count the status codes from http logs such as 200, 404, 503 */ public class StatusCountBolt extends AbstractBolt { private static final Logger LOG = LoggerFactory.getLogger(StatusCountBolt.class); private Map<Integer, Integer> counts; @Override public void initialize() { this.counts = new HashMap<>(); } @Override public void execute(Tuple input) { int statusCode = input.getIntegerByField(Field.RESPONSE); int count = 0; if (counts.containsKey(statusCode)) { count = counts.get(statusCode); } count++; counts.put(statusCode, count); collector.emit(input, new Values(statusCode, count)); collector.ack(input); } @Override public Fields getDefaultFields() { return new Fields(Field.RESPONSE, Field.COUNT); } }