use of org.wso2.siddhi.core.config.SiddhiAppContext in project carbon-apimgt by wso2.
the class ThrottleStreamProcessor method init.
@Override
protected List<Attribute> init(AbstractDefinition abstractDefinition, ExpressionExecutor[] expressionExecutors, ConfigReader configReader, SiddhiAppContext siddhiAppContext) {
this.siddhiAppContext = siddhiAppContext;
if (attributeExpressionExecutors.length == 1) {
if (attributeExpressionExecutors[0] instanceof ConstantExpressionExecutor) {
if (attributeExpressionExecutors[0].getReturnType() == Attribute.Type.INT) {
timeInMilliSeconds = (Integer) ((ConstantExpressionExecutor) attributeExpressionExecutors[0]).getValue();
} else if (attributeExpressionExecutors[0].getReturnType() == Attribute.Type.LONG) {
timeInMilliSeconds = (Long) ((ConstantExpressionExecutor) attributeExpressionExecutors[0]).getValue();
} else {
throw new SiddhiAppValidationException("Throttle batch window's 1st parameter attribute should be " + "either int or long, but found " + attributeExpressionExecutors[0].getReturnType());
}
} else {
throw new SiddhiAppValidationException("Throttle batch window 1st parameter needs to be constant " + "parameter attribute but found a dynamic attribute " + attributeExpressionExecutors[0].getClass().getCanonicalName());
}
} else if (attributeExpressionExecutors.length == 2) {
if (attributeExpressionExecutors[0] instanceof ConstantExpressionExecutor) {
if (attributeExpressionExecutors[0].getReturnType() == Attribute.Type.INT) {
timeInMilliSeconds = (Integer) ((ConstantExpressionExecutor) attributeExpressionExecutors[0]).getValue();
} else if (attributeExpressionExecutors[0].getReturnType() == Attribute.Type.LONG) {
timeInMilliSeconds = (Long) ((ConstantExpressionExecutor) attributeExpressionExecutors[0]).getValue();
} else {
throw new SiddhiAppValidationException("Throttle batch window's 1st parameter attribute should be " + "either int or long, but found " + attributeExpressionExecutors[0].getReturnType());
}
} else {
throw new SiddhiAppValidationException("Throttle batch window 1st parameter needs to be constant " + "attribute but found a dynamic attribute " + attributeExpressionExecutors[0].getClass().getCanonicalName());
}
if (attributeExpressionExecutors[1].getReturnType() == Attribute.Type.INT) {
startTime = Integer.parseInt(String.valueOf(((ConstantExpressionExecutor) attributeExpressionExecutors[1]).getValue()));
} else if (attributeExpressionExecutors[1].getReturnType() == Attribute.Type.LONG) {
startTime = Long.parseLong(String.valueOf(((ConstantExpressionExecutor) attributeExpressionExecutors[1]).getValue()));
} else {
throw new SiddhiAppValidationException("Throttle batch window 2nd parameter needs to be a Long " + "or Int type but found a " + attributeExpressionExecutors[2].getReturnType());
}
} else {
throw new SiddhiAppValidationException("Throttle batch window should only have one/two parameter " + "(<int|long|time> windowTime (and <int|long> startTime), but found " + attributeExpressionExecutors.length + " input attributes");
}
List<Attribute> attributeList = new ArrayList<Attribute>();
attributeList.add(new Attribute(EXPIRY_TIME_STAMP, Attribute.Type.LONG));
return attributeList;
}
use of org.wso2.siddhi.core.config.SiddhiAppContext in project siddhi by wso2.
the class JunctionTestCase method init.
@BeforeMethod
public void init() {
count = 0;
eventArrived = false;
executorService = Executors.newCachedThreadPool();
SiddhiContext siddhiContext = new SiddhiContext();
siddhiAppContext = new SiddhiAppContext();
siddhiAppContext.setSiddhiContext(siddhiContext);
}
use of org.wso2.siddhi.core.config.SiddhiAppContext in project siddhi by wso2.
the class JunctionTestCase method multiThreadedTest1.
@Test
public void multiThreadedTest1() throws InterruptedException {
log.info("multi threaded 1");
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();
StreamCallback streamCallbackA1 = 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());
streamPublisherB1.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackA2 = 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());
streamPublisherB2.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackA3 = 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());
streamPublisherB3.send(innerStreamEvent);
}
}
};
StreamCallback streamCallbackB = new StreamCallback() {
@Override
public void receive(Event[] streamEvents) {
for (Event streamEvent : streamEvents) {
count++;
eventArrived = true;
AssertJUnit.assertTrue(streamEvent.getData()[0].equals("IBM") || (streamEvent.getData()[0].equals("WSO2")));
}
}
};
streamJunctionA.subscribe(streamCallbackA1);
streamJunctionA.subscribe(streamCallbackA2);
streamJunctionA.subscribe(streamCallbackA3);
streamJunctionA.startProcessing();
streamJunctionB.subscribe(streamCallbackB);
streamJunctionB.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(100);
AssertJUnit.assertTrue(eventArrived);
AssertJUnit.assertEquals(6, count);
streamJunctionA.stopProcessing();
streamJunctionB.stopProcessing();
}
use of org.wso2.siddhi.core.config.SiddhiAppContext in project siddhi by wso2.
the class JunctionTestCase method multiThreadedTest2.
@Test
public void multiThreadedTest2() throws InterruptedException {
log.info("multi threaded 2");
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 = new StreamEvent(2, 2, 2);
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 = new StreamEvent(2, 2, 2);
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 = new StreamEvent(2, 2, 2);
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 = new StreamEvent(2, 2, 2);
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 = new StreamEvent(2, 2, 2);
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(100);
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.config.SiddhiAppContext in project siddhi by wso2.
the class SiddhiAppRuntime method getStoreQueryOutputAttributes.
/**
* This method get the storeQuery and return the corresponding output and its types.
*
* @param storeQuery this storeQuery is processed and get the output attributes.
* @param storeQueryString this passed to report errors with context if there are any.
* @return List of output attributes
*/
private Attribute[] getStoreQueryOutputAttributes(StoreQuery storeQuery, String storeQueryString) {
try {
StoreQueryRuntime storeQueryRuntime = storeQueryRuntimeMap.get(storeQuery);
if (storeQueryRuntime == null) {
storeQueryRuntime = StoreQueryParser.parse(storeQuery, siddhiAppContext, tableMap, windowMap, aggregationMap);
storeQueryRuntimeMap.put(storeQuery, storeQueryRuntime);
}
return storeQueryRuntime.getStoreQueryOutputAttributes();
} catch (RuntimeException e) {
if (e instanceof SiddhiAppContextException) {
throw new StoreQueryCreationException(((SiddhiAppContextException) e).getMessageWithOutContext(), e, ((SiddhiAppContextException) e).getQueryContextStartIndex(), ((SiddhiAppContextException) e).getQueryContextEndIndex(), null, siddhiAppContext.getSiddhiAppString());
}
throw new StoreQueryCreationException(e.getMessage(), e);
}
}
Aggregations