package storm.applications.bolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import org.apache.commons.lang.StringUtils;
import static storm.applications.constants.FraudDetectionConstants.*;
import storm.applications.model.fraud.predictor.MarkovModelPredictor;
import storm.applications.model.fraud.predictor.ModelBasedPredictor;
import storm.applications.model.fraud.predictor.Prediction;
/**
*
* @author maycon
*/
public class FraudPredictorBolt extends AbstractBolt {
private ModelBasedPredictor predictor;
@Override
public void initialize() {
String strategy = config.getString(Conf.PREDICTOR_MODEL);
if (strategy.equals("mm")) {
predictor = new MarkovModelPredictor(config);
}
}
@Override
public void execute(Tuple input) {
String entityID = input.getString(0);
String record = input.getString(1);
Prediction p = predictor.execute(entityID, record);
// send outliers
if (p.isOutlier()) {
collector.emit(input, new Values(entityID, p.getScore(), StringUtils.join(p.getStates(), ",")));
}
collector.ack(input);
}
@Override
public Fields getDefaultFields() {
return new Fields(Field.ENTITY_ID, Field.SCORE, Field.STATES);
}
}