import java.util.List; import java.util.UUID; import uk.ac.imperial.lsds.seep.api.API; import uk.ac.imperial.lsds.seep.api.SeepTask; import uk.ac.imperial.lsds.seep.api.data.ITuple; import uk.ac.imperial.lsds.seep.api.data.OTuple; import uk.ac.imperial.lsds.seep.api.data.Schema; import uk.ac.imperial.lsds.seep.api.data.Schema.SchemaBuilder; import uk.ac.imperial.lsds.seep.api.data.Type; public class Adder implements SeepTask { private Schema schema = SchemaBuilder.getInstance().newField(Type.INT, "userId").newField(Type.LONG, "value").build(); private Double selectivity = 0.; private int processed = 0, sent = 0; private String adderId; private boolean used; private int compfactor; private int totalCalls = 0; public Adder() { selectivity = 1.; adderId = UUID.randomUUID().toString(); used = false; } public Adder(Double sel, int compfactor) { selectivity = sel; adderId = UUID.randomUUID().toString(); used = false; this.compfactor = compfactor; } @Override public void setUp() { // TODO Auto-generated method stub } boolean first = true; int idx_userid = 0; int idx_value = 0; Type[] types = new Type[]{Type.INT, Type.LONG}; OTuple o = new OTuple(schema); @Override public void processData(ITuple data, API api) { // setup method not included in scheduled mode if(first) { first = false; idx_userid = data.getIndexFor("userId"); idx_value = data.getIndexFor("value"); } totalCalls++; int userId = data.getInt(idx_userid); long value = data.getLong(idx_value); processed++; if (!used) { System.out.println(adderId + " has started with selectivity " + selectivity); used = true; } for(int i = 0; i< compfactor; i++) { value = (long) Math.sqrt((double)(value / 2)); Math.pow(value, value); } while (((double)sent/(double)processed) < selectivity) { o.setValues(new Object[]{userId, value}); api.send(o); sent++; } } @Override public void close() { System.out.println(this + " - TC: " + totalCalls); } @Override public void processDataGroup(List<ITuple> arg0, API arg1) { // TODO Auto-generated method stub } }