package eu.play_project.dcep.distribution; import static eu.play_project.play_commons.constants.Event.EVENT_ID_SUFFIX; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Scanner; import java.util.Set; import org.etsi.uri.gcm.util.GCM; import org.event_processing.events.types.FacebookStatusFeedEvent; import org.objectweb.fractal.adl.ADLException; import org.objectweb.fractal.adl.Factory; import org.objectweb.fractal.api.Component; import org.objectweb.fractal.api.NoSuchInterfaceException; import org.objectweb.fractal.api.control.IllegalLifeCycleException; import org.objectweb.proactive.ActiveObjectCreationException; import org.objectweb.proactive.api.PAActiveObject; import org.objectweb.proactive.core.component.adl.FactoryFactory; import org.objectweb.proactive.core.config.CentralPAPropertyRepository; import org.objectweb.proactive.core.node.NodeException; import org.ontoware.rdf2go.model.node.impl.URIImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.play_project.dcep.distributedetalis.utils.EventCloudHelpers; import eu.play_project.play_commons.constants.Stream; import eu.play_project.play_commons.eventtypes.EventHelpers; import eu.play_project.play_platformservices.api.QueryDispatchApi; import eu.play_project.play_platformservices.api.QueryDispatchException; import fr.inria.eventcloud.api.CompoundEvent; import fr.inria.eventcloud.api.PublishApi; import fr.inria.eventcloud.api.Quadruple; public class PerformanceTest { private static final String propertiesFile = "proactive.java.policy"; private static Set<CompoundEvent> events = new HashSet<CompoundEvent>(); private static QueryDispatchApi queryDispatchApi; private static PublishApi dcepPublishApi; private static Component root; private static Logger logger = LoggerFactory.getLogger(PerformanceTest.class); public static void main(String[] args) throws ADLException, IllegalLifeCycleException, NoSuchInterfaceException, InterruptedException, QueryDispatchException { String queryString; InstantiatePlayPlatform(); // Get query. queryString = getSparqlQuery("play-epsparql-m12-jeans-example-query.eprq"); //queryString = getSparqlQuery("play-epsparql-contextualized-latitude-01-query.eprq"); //queryString = getSparqlQuery("play-epsparql-clic2call.eprq"); //System.out.println("SPARQL query:\n" + queryString); // Test // Compile query String patternId = queryDispatchApi.registerQuery("http://test.example.com", queryString); //Subscribe to get complex events. SubscriberPerformanceTest subscriber = null; try { subscriber = PAActiveObject.newActive(SubscriberPerformanceTest.class, new Object[] {}); } catch (ActiveObjectCreationException e) { e.printStackTrace(); } catch (NodeException e) { e.printStackTrace(); } for (int i = 1; i < 100000; i++) { // System.out.println("i = " + i); // if(i%1000==0){ // System.out.println("Send " + i + " Events"); // } dcepPublishApi.publish(createEvent(i + "")); Thread.sleep(70); } // Push events. // dcepPublishApi.publish(new CompoundEvent (quadruple2)); // Fist event // boolean wahr = true; // while(true&& wahr){ // Thread.sleep(2200); // //System.out.println(subscriber.finished()); // for (int i = 1; i < 2000; i++) { // //System.out.println("i = " + i); // if(i%1000==0){ // System.out.println("Send " + i + " Events"); // } // // dcepPublishApi.publish(createEvent("2620:0:1C11:e::" + i)); // } // } // Wait Scanner in = new Scanner(System.in); // Test if result is OK // assertTrue("Number of complex events wrong " // + subscriber.getComplexEvents().size(), subscriber // .getComplexEvents().size() == 16); // assertTrue( // "Unexpected graph ID " // + subscriber.getComplexEvents().get(0).getGraph() // .toString(), // subscriber // .getComplexEvents() // .get(0) // .getGraph() // .toString() // .equals("http://events.event-processing.org/ids/e2#event")); // Stop and terminate GCM Components try { GCM.getGCMLifeCycleController(root).stopFc(); // Terminate all subcomponents. for(Component subcomponent : GCM.getContentController(root).getFcSubComponents()){ GCM.getGCMLifeCycleController(subcomponent).terminateGCMComponent(); } } catch (IllegalLifeCycleException e) { e.printStackTrace(); } catch (NoSuchInterfaceException e) { e.printStackTrace(); } } private static String getSparqlQuery(String queryFile) { try { InputStream is = PerformanceTest.class.getClassLoader().getResourceAsStream(queryFile); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuffer sb = new StringBuffer(); String line; while (null != (line = br.readLine())) { sb.append(line); sb.append("\n"); } br.close(); is.close(); return sb.toString(); } catch (Exception e) { logger.error("Error reading query from a file.", e); } return null; } private static List<CompoundEvent> createEvents(int number) { ArrayList<CompoundEvent> eventList = new ArrayList<CompoundEvent>(); for (int i = number; i <= number; i--) { List<Quadruple> quadruple = new ArrayList<Quadruple>(); String eventId = EventHelpers.createRandomEventId(); FacebookStatusFeedEvent event = new FacebookStatusFeedEvent( // set the RDF context part EventHelpers.createEmptyModel(eventId), // set the RDF subject eventId + EVENT_ID_SUFFIX, // automatically write the rdf:type statement true); // Run some setters of the event event.setFacebookName("Roland Stühmer"); event.setFacebookId("100000058455726"); event.setFacebookLink(new URIImpl("http://graph.facebook.com/roland.stuehmer#")); event.setStatus("I bought some JEANS this morning"); event.setFacebookLocation("Karlsruhe, Germany"); // Create a Calendar for the current date and time event.setEndTime(Calendar.getInstance()); event.setStream(new URIImpl(Stream.FacebookStatusFeed.getUri())); eventList.add(new CompoundEvent(quadruple)); } return eventList; } public static void InstantiatePlayPlatform() throws IllegalLifeCycleException, NoSuchInterfaceException, ADLException { CentralPAPropertyRepository.JAVA_SECURITY_POLICY .setValue("proactive.java.policy"); CentralPAPropertyRepository.GCM_PROVIDER .setValue("org.objectweb.proactive.core.component.Fractive"); Factory factory = FactoryFactory.getFactory(); HashMap<String, Object> context = new HashMap<String, Object>(); root = (Component) factory.newComponent("EcDcepPsTest", context); GCM.getGCMLifeCycleController(root).startFc(); queryDispatchApi = ((eu.play_project.play_platformservices.api.QueryDispatchApi) root .getFcInterface(QueryDispatchApi.class.getSimpleName())); dcepPublishApi = ((fr.inria.eventcloud.api.PublishApi) root .getFcInterface(PublishApi.class.getSimpleName())); } public static CompoundEvent createEvent(String eventId){ FacebookStatusFeedEvent event = new FacebookStatusFeedEvent( // set the RDF context part EventHelpers.createEmptyModel(eventId), // set the RDF subject eventId + EVENT_ID_SUFFIX, // automatically write the rdf:type statement true); // Run some setters of the event event.setFacebookName("Roland Stühmer"); event.setFacebookId("100000058455726"); event.setFacebookLink(new URIImpl("http://graph.facebook.com/roland.stuehmer#")); event.setStatus("I bought some JEANS this morning"); event.setFacebookLocation("Karlsruhe, Germany"); // Create a Calendar for the current date and time event.setEndTime(Calendar.getInstance()); event.setStream(new URIImpl(Stream.FacebookStatusFeed.getUri())); //Push events. return EventCloudHelpers.toCompoundEvent(event); } }