package storm.applications.bolt;
import backtype.storm.tuple.Fields;
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;
import storm.applications.util.math.VariableEWMA;
/**
*
* @author Maycon Viana Bordin <mayconbordin@gmail.com>
*/
public class GlobalACDBolt extends AbstractBolt {
private static final Logger LOG = LoggerFactory.getLogger(GlobalACDBolt.class);
private VariableEWMA avgCallDuration;
private double decayFactor;
@Override
public Fields getDefaultFields() {
return new Fields(Field.TIMESTAMP, Field.AVERAGE);
}
@Override
public void initialize() {
decayFactor = config.getDouble(Conf.ACD_DECAY_FACTOR, 86400); //86400s = 24h
avgCallDuration = new VariableEWMA(decayFactor);
}
@Override
public void execute(Tuple input) {
CallDetailRecord cdr = (CallDetailRecord) input.getValueByField(Field.RECORD);
long timestamp = cdr.getAnswerTime().getMillis()/1000;
avgCallDuration.add(cdr.getCallDuration());
collector.emit(new Values(timestamp, avgCallDuration.getAverage()));
}
}