package eu.play_project.dcep.distributedetalis.measurement.fsm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.hp.hpl.jena.graph.Triple; import eu.play_project.dcep.api.measurement.MeasurementConstants; import eu.play_project.dcep.api.measurement.NodeMeasurementResult; import eu.play_project.dcep.distributedetalis.measurement.MeasurementUnit; import fr.inria.eventcloud.api.CompoundEvent; public class WaitForComplexMeasurementEvent implements MeasurementState{ private int measurementEventCounter = 0; private int complexEventCounter = 0; // All complex events except measurement events. private MeasurementUnit context; private int numberOfConsumedEvents; private Logger logger; public WaitForComplexMeasurementEvent(MeasurementUnit context, int measuementEventCounter) { this.context = context; this.logger = LoggerFactory.getLogger(WaitForComplexMeasurementEvent.class); this.measurementEventCounter = measuementEventCounter; } @Override public void eventProduced(CompoundEvent event, String type) { // Count events. if (type.equals("org/types/ComplexMeasurementEvent'")) { logger.debug("New complex m event received. "); measurementEventCounter++; context.addSingleEventTime(calcTimeForEvent(event)); // Check if all measurements are received. if (measurementEventCounter == (MeasurementUnit.mEvents * eu.play_project.dcep.distributedetalis.measurement.MeasurementUnit.eventsPeriod)) { // context.setNumberOfInputEvents(context.getNumberOfInputEvents() // + numberOfConsumedEvents); } } else { complexEventCounter++; } // Check if all measurements are received. if (measurementEventCounter == (MeasurementUnit.mEvents * eu.play_project.dcep.distributedetalis.measurement.MeasurementUnit.eventsPeriod)) { // Set number of consumed and produced events. context.setNumberOfOutputEvents(context.getNumberOfOutputEvents() + complexEventCounter); context.setNumberOfInputEvents(context.getNumberOfInputEvents() + numberOfConsumedEvents); context.setState(context.createMeasurementState("WaitForMeasuredData")); } } @Override public NodeMeasurementResult getMeasuringResults() { return null; } @Override public void startMeasurement(int period) { // TODO Auto-generated method stub } @Override public void eventReceived() { numberOfConsumedEvents++; } @Override public void setMeasuredData(NodeMeasurementResult measuredValues) { } private long calcTimeForEvent(CompoundEvent event) { long singleEventTime = 0; // Calc processint time for one event Long currentTime = System.nanoTime(); for (Triple quadruple : event.getTriples()) { if (quadruple.getPredicate().toString().equals("http://play-project.eu/timeOneEvent")) { singleEventTime = currentTime - Long.valueOf(quadruple.getObject().toString()); singleEventTime = singleEventTime / MeasurementUnit.mEvents; logger.info("Time for" + MeasurementUnit.mEvents + " events ------------------------" + singleEventTime); } } return singleEventTime; } @Override public String getName() { return "WaitForComplexMeasurementEvents"; } @Override public void sendMeasuringEvent() { } @Override public void measuringPeriodIsUp() { } }