use of org.wso2.siddhi.core.stream.output.StreamCallback in project siddhi by wso2.
the class JunctionTestCase method oneToOneTest.
@Test
public void oneToOneTest() throws InterruptedException {
log.info("one to one");
StreamDefinition streamA = StreamDefinition.id("streamA").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("parallel"));
StreamJunction streamJunctionA = new StreamJunction(streamA, executorService, 1024, siddhiAppContext);
StreamJunction.Publisher streamPublisherA = streamJunctionA.constructPublisher();
StreamDefinition streamB = StreamDefinition.id("streamB").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("parallel"));
StreamJunction streamJunctionB = new StreamJunction(streamB, executorService, 1024, siddhiAppContext);
final StreamJunction.Publisher streamPublisherB = streamJunctionB.constructPublisher();
StreamCallback streamCallbackA = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = new StreamEvent(2, 2, 2);
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
innerStreamEvent.setOutputData(streamEvent.getData());
streamPublisherB.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackB = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
count += streamEvents.length;
eventArrived = true;
for (Event streamEvent : streamEvents) {
AssertJUnit.assertTrue(streamEvent.getData()[0].equals("IBM") || (streamEvent.getData()[0].equals("WSO2")));
}
}
};
streamJunctionA.subscribe(streamCallbackA);
streamJunctionA.startProcessing();
streamJunctionB.subscribe(streamCallbackB);
streamJunctionB.startProcessing();
// Thread.sleep(100);
StreamEvent streamEvent1 = new StreamEvent(2, 2, 2);
streamEvent1.setTimestamp(System.currentTimeMillis());
streamEvent1.setOutputData(new Object[] { "IBM", 12 });
StreamEvent streamEvent2 = new StreamEvent(2, 2, 2);
streamEvent2.setTimestamp(System.currentTimeMillis());
streamEvent2.setOutputData(new Object[] { "WSO2", 112 });
streamPublisherA.send(streamEvent1);
streamPublisherA.send(streamEvent2);
Thread.sleep(100);
AssertJUnit.assertTrue(eventArrived);
AssertJUnit.assertEquals(2, count);
streamJunctionA.stopProcessing();
streamJunctionB.stopProcessing();
}
use of org.wso2.siddhi.core.stream.output.StreamCallback in project siddhi by wso2.
the class JunctionTestCase method junctionToReceiverTest.
@Test
public void junctionToReceiverTest() throws InterruptedException {
log.info("junction to receiver");
StreamDefinition streamA = StreamDefinition.id("streamA").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("parallel"));
StreamJunction streamJunctionA = new StreamJunction(streamA, executorService, 1024, siddhiAppContext);
StreamJunction.Publisher streamPublisherA = streamJunctionA.constructPublisher();
StreamCallback streamCallback = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
count += streamEvents.length;
eventArrived = true;
}
};
streamJunctionA.subscribe(streamCallback);
streamJunctionA.startProcessing();
streamPublisherA.send(new StreamEvent(2, 2, 2));
streamPublisherA.send(new StreamEvent(2, 2, 2));
Thread.sleep(100);
AssertJUnit.assertTrue(eventArrived);
AssertJUnit.assertEquals(2, count);
streamJunctionA.stopProcessing();
}
use of org.wso2.siddhi.core.stream.output.StreamCallback in project siddhi by wso2.
the class JunctionTestCase method multiThreadedWithEventPoolTest.
@Test
public void multiThreadedWithEventPoolTest() throws InterruptedException {
log.info("multi threaded test using event pool");
final StreamEventPool streamEventPoolA1 = new StreamEventPool(2, 2, 2, 4);
final StreamEventPool streamEventPoolA2 = new StreamEventPool(2, 2, 2, 4);
final StreamEventPool streamEventPoolA3 = new StreamEventPool(2, 2, 2, 4);
final StreamEventPool streamEventPoolB1 = new StreamEventPool(2, 2, 2, 4);
final StreamEventPool streamEventPoolB2 = new StreamEventPool(2, 2, 2, 4);
StreamDefinition streamA = StreamDefinition.id("streamA").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("async"));
StreamJunction streamJunctionA = new StreamJunction(streamA, executorService, 1024, siddhiAppContext);
StreamJunction.Publisher streamPublisherA = streamJunctionA.constructPublisher();
StreamDefinition streamB = StreamDefinition.id("streamB").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("async"));
StreamJunction streamJunctionB = new StreamJunction(streamB, executorService, 1024, siddhiAppContext);
final StreamJunction.Publisher streamPublisherB1 = streamJunctionB.constructPublisher();
final StreamJunction.Publisher streamPublisherB2 = streamJunctionB.constructPublisher();
final StreamJunction.Publisher streamPublisherB3 = streamJunctionB.constructPublisher();
StreamDefinition streamC = StreamDefinition.id("streamC").attribute("symbol", Attribute.Type.STRING).attribute("price", Attribute.Type.INT).annotation(Annotation.annotation("async"));
StreamJunction streamJunctionC = new StreamJunction(streamC, executorService, 1024, siddhiAppContext);
final StreamJunction.Publisher streamPublisherC1 = streamJunctionC.constructPublisher();
final StreamJunction.Publisher streamPublisherC2 = streamJunctionC.constructPublisher();
StreamCallback streamCallbackA1 = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = streamEventPoolA1.borrowEvent();
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
Object[] data = new Object[] { streamEvent.getData()[0], streamEvent.getData()[1] };
data[0] = ((String) data[0]).concat("A1");
innerStreamEvent.setOutputData(data);
streamPublisherB1.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackA2 = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = streamEventPoolA2.borrowEvent();
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
Object[] data = new Object[] { streamEvent.getData()[0], streamEvent.getData()[1] };
data[0] = ((String) data[0]).concat("A2");
innerStreamEvent.setOutputData(data);
streamPublisherB2.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackA3 = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = streamEventPoolA3.borrowEvent();
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
Object[] data = new Object[] { streamEvent.getData()[0], streamEvent.getData()[1] };
data[0] = ((String) data[0]).concat("A3");
innerStreamEvent.setOutputData(data);
streamPublisherB3.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackB1 = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = streamEventPoolB1.borrowEvent();
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
Object[] data = new Object[] { streamEvent.getData()[0], streamEvent.getData()[1] };
data[0] = ((String) data[0]).concat("B1");
innerStreamEvent.setOutputData(data);
streamPublisherC1.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackB2 = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
StreamEvent innerStreamEvent = streamEventPoolB2.borrowEvent();
innerStreamEvent.setTimestamp(streamEvent.getTimestamp());
Object[] data = new Object[] { streamEvent.getData()[0], streamEvent.getData()[1] };
data[0] = ((String) data[0]).concat("B2");
innerStreamEvent.setOutputData(data);
streamPublisherC2.send(innerStreamEvent);
}
}
};
final boolean[] eventsArrived = { false, false, false, false, false, false, false, false, false, false, false, false };
StreamCallback streamCallbackC = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
count++;
eventArrived = true;
Object symbol = streamEvent.getData()[0];
if (symbol.equals("IBMA1B1")) {
eventsArrived[0] = true;
} else if (symbol.equals("IBMA1B2")) {
eventsArrived[1] = true;
} else if (symbol.equals("IBMA2B1")) {
eventsArrived[2] = true;
} else if (symbol.equals("IBMA2B2")) {
eventsArrived[3] = true;
} else if (symbol.equals("IBMA3B1")) {
eventsArrived[4] = true;
} else if (symbol.equals("IBMA3B2")) {
eventsArrived[5] = true;
}
if (symbol.equals("WSO2A1B1")) {
eventsArrived[6] = true;
} else if (symbol.equals("WSO2A1B2")) {
eventsArrived[7] = true;
} else if (symbol.equals("WSO2A2B1")) {
eventsArrived[8] = true;
} else if (symbol.equals("WSO2A2B2")) {
eventsArrived[9] = true;
} else if (symbol.equals("WSO2A3B1")) {
eventsArrived[10] = true;
} else if (symbol.equals("WSO2A3B2")) {
eventsArrived[11] = true;
}
}
}
};
streamJunctionA.subscribe(streamCallbackA1);
streamJunctionA.subscribe(streamCallbackA2);
streamJunctionA.subscribe(streamCallbackA3);
streamJunctionA.startProcessing();
streamJunctionB.subscribe(streamCallbackB1);
streamJunctionB.subscribe(streamCallbackB2);
streamJunctionB.startProcessing();
streamJunctionC.subscribe(streamCallbackC);
streamJunctionC.startProcessing();
StreamEvent streamEvent1 = new StreamEvent(2, 2, 2);
streamEvent1.setTimestamp(System.currentTimeMillis());
streamEvent1.setOutputData(new Object[] { "IBM", 12 });
StreamEvent streamEvent2 = new StreamEvent(2, 2, 2);
streamEvent2.setTimestamp(System.currentTimeMillis());
streamEvent2.setOutputData(new Object[] { "WSO2", 112 });
streamPublisherA.send(streamEvent1);
streamPublisherA.send(streamEvent2);
Thread.sleep(1000);
AssertJUnit.assertTrue(eventArrived);
AssertJUnit.assertEquals(12, count);
for (boolean arrived : eventsArrived) {
AssertJUnit.assertTrue(arrived);
}
streamJunctionA.stopProcessing();
streamJunctionB.stopProcessing();
streamJunctionC.stopProcessing();
}
use of org.wso2.siddhi.core.stream.output.StreamCallback in project siddhi by wso2.
the class InMemoryTransportTestCase method inMemoryTestCase7.
@Test
public void inMemoryTestCase7() throws InterruptedException {
log.info("Test inMemory 7");
String streams = "" + "@app:name('TestSiddhiApp')" + "@source(type='testTrpInMemory', topic='Foo', prop1='hi', prop2='test', fail='true', " + " @map(type='passThrough', @attributes(symbol='trp:symbol'," + " volume='volume',price='trp:price'))) " + "define stream FooStream (symbol string, price string, volume long); " + "define stream BarStream (symbol string, price string, volume long); ";
String query = "" + "from FooStream " + "select * " + "insert into BarStream; ";
SiddhiManager siddhiManager = new SiddhiManager();
SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(streams + query);
siddhiAppRuntime.addCallback("BarStream", new StreamCallback() {
@Override
public void receive(Event[] events) {
EventPrinter.print(events);
wso2Count.incrementAndGet();
for (Event event : events) {
AssertJUnit.assertArrayEquals(event.getData(), new Object[] { "hi", "test", 100L });
}
}
});
siddhiAppRuntime.start();
InMemoryBroker.publish("Foo", new Event(System.currentTimeMillis(), new Object[] { "WSO2", "in", 100L }));
Thread.sleep(100);
// assert event count
AssertJUnit.assertEquals("Number of events", 0, wso2Count.get());
siddhiAppRuntime.shutdown();
}
use of org.wso2.siddhi.core.stream.output.StreamCallback in project siddhi by wso2.
the class NoIndexingTablePerformance method main.
public static void main(String[] args) throws InterruptedException {
SiddhiManager siddhiManager = new SiddhiManager();
String siddhiApp = "" + // " " +
"define stream StockCheckStream (symbol string, company string, price float, volume int, timestamp " + "long);" + "define stream StockInputStream (symbol string, company string, price float, volume int); " + "" + "@PrimaryKey('symbol')" + "@Index('volume')" + "define table StockTable (symbol string, company string, price float, volume int);" + "" + "@info(name = 'query1') " + "from StockInputStream " + "select symbol, company, price, volume " + "insert into StockTable ;" + "" + "@info(name = 'query2') " + "from StockCheckStream join StockTable " + "on StockCheckStream.symbol == StockTable.symbol and StockCheckStream.volume == StockTable.volume " + "select StockCheckStream.timestamp, StockCheckStream.symbol, StockCheckStream.company, " + "StockCheckStream.price, StockCheckStream.volume " + "insert into OutputStream ;" + "" + // "insert into OutputStream; " +
"";
SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(siddhiApp);
System.out.println("Throughput\tLatency\tAvg Throughput\tAvg Latency");
// siddhiAppRuntime.addCallback("OutputStream", new StreamCallback() {
// public volatile double eventCount = 0;
// public volatile double timeSpent = 0;
// public volatile double totalThroughput = 0;
// public volatile double totalLatency = 0;
// public volatile double totalIterations = 0;
// volatile long startTime = System.currentTimeMillis();
//
// @Override
// public void receive(Event[] events) {
//
// // EventPrinter.print(events);
// for (Event event : events) {
// if (output) {
// eventCount++;
// timeSpent += (System.currentTimeMillis() - (Long) events[0].getData(0));
// if (eventCount % numberOfEventsChunked == 0) {
// synchronized (this) {
// totalIterations++;
// double throughput = (eventCount * 1000.0) / ((System.currentTimeMillis()) -
// startTime);
// double latency = (timeSpent * 1.0 / eventCount);
// totalThroughput += throughput;
// totalLatency += latency;
// System.out.println(throughput + "\t" + latency + "\t" + totalThroughput /
// totalIterations + "\t" + totalLatency / totalIterations);
// startTime = System.currentTimeMillis();
// eventCount = 0;
// timeSpent = 0;
// }
// }
// }
// }
// }
//
// });
InputHandler stockCheckInputHandler = siddhiAppRuntime.getInputHandler("StockCheckStream");
InputHandler stockInputInputHandler = siddhiAppRuntime.getInputHandler("StockInputStream");
siddhiAppRuntime.start();
Random random = new Random();
for (int i = 0; i < numberOfEventsStored; i++) {
stockInputInputHandler.send(new Object[] { "" + i, "" + i, i * 1.0f, i });
}
for (int i = 0; i < 1; i++) {
EventPublisher eventPublisher = new EventPublisher(stockCheckInputHandler, random);
eventPublisher.run();
}
// siddhiAppRuntime.shutdown();
}
Aggregations