package storm.applications.spout.generator;
import java.util.Random;
import org.joda.time.DateTime;
import storm.applications.constants.VoIPSTREAMConstants.Conf;
import storm.applications.model.cdr.CDRDataGenerator;
import storm.applications.model.cdr.CallDetailRecord;
import storm.applications.util.config.Configuration;
import storm.applications.util.math.RandomUtil;
import storm.applications.util.stream.StreamValues;
/**
*
* @author Maycon Viana Bordin <mayconbordin@gmail.com>
*/
public class CDRGenerator extends Generator {
private String[] phoneNumbers;
private int population;
private double errorProb;
private Random rand = new Random();
@Override
public void initialize(Configuration config) {
super.initialize(config);
population = config.getInt(Conf.GENERATOR_POPULATION, 50);
errorProb = config.getDouble(Conf.GENERATOR_POPULATION, 0.05);
phoneNumbers = new String[population];
for (int i=0; i<population; i++) {
phoneNumbers[i] = CDRDataGenerator.phoneNumber("US", 11);
}
}
@Override
public StreamValues generate() {
CallDetailRecord cdr = new CallDetailRecord();
cdr.setCallingNumber(pickNumber());
cdr.setCalledNumber(pickNumber(cdr.getCallingNumber()));
cdr.setAnswerTime(DateTime.now().plusMinutes(RandomUtil.randInt(0, 60)));
cdr.setCallDuration(RandomUtil.randInt(0, 60 * 5));
cdr.setCallEstablished(CDRDataGenerator.causeForTermination(errorProb) == CDRDataGenerator.TERMINATION_CAUSE_OK);
return new StreamValues(cdr.getCallingNumber(), cdr.getCalledNumber(), cdr.getAnswerTime(), cdr);
}
private String pickNumber(String excluded) {
String number = "";
while (number.isEmpty() || number.equals(excluded)) {
number = phoneNumbers[rand.nextInt(population)];
}
return number;
}
private String pickNumber() {
return phoneNumbers[rand.nextInt(population)];
}
}