package storm.applications.bolt; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static storm.applications.constants.VoIPSTREAMConstants.*; import storm.applications.model.cdr.CallDetailRecord; /** * Per-user received call rate. * @author Maycon Viana Bordin <mayconbordin@gmail.com> */ public class RCRBolt extends AbstractFilterBolt { private static final Logger LOG = LoggerFactory.getLogger(RCRBolt.class); public RCRBolt() { super("rcr", Field.RATE); } @Override public void execute(Tuple input) { CallDetailRecord cdr = (CallDetailRecord) input.getValueByField(Field.RECORD); if (cdr.isCallEstablished()) { long timestamp = cdr.getAnswerTime().getMillis()/1000; if (input.getSourceStreamId().equals(Stream.DEFAULT)) { String callee = cdr.getCalledNumber(); filter.add(callee, 1, timestamp); } else if (input.getSourceStreamId().equals(Stream.BACKUP)) { String caller = cdr.getCallingNumber(); double rcr = filter.estimateCount(caller, timestamp); collector.emit(new Values(caller, timestamp, rcr, cdr)); } } } }