use of org.wso2.siddhi.core.event.ComplexEvent in project siddhi by wso2.
the class WindowedPerSnapshotOutputRateLimiter method tryFlushEvents.
private void tryFlushEvents(List<ComplexEventChunk<ComplexEvent>> outputEventChunks, ComplexEvent event) {
if (event.getTimestamp() >= scheduledTime) {
ComplexEventChunk<ComplexEvent> outputEventChunk = new ComplexEventChunk<ComplexEvent>(false);
for (ComplexEvent complexEvent : eventList) {
outputEventChunk.add(cloneComplexEvent(complexEvent));
}
outputEventChunks.add(outputEventChunk);
scheduledTime = scheduledTime + value;
scheduler.notifyAt(scheduledTime);
}
}
use of org.wso2.siddhi.core.event.ComplexEvent in project siddhi by wso2.
the class AllPerTimeOutputRateLimiter method process.
@Override
public void process(ComplexEventChunk complexEventChunk) {
ArrayList<ComplexEventChunk<ComplexEvent>> outputEventChunks = new ArrayList<ComplexEventChunk<ComplexEvent>>();
complexEventChunk.reset();
synchronized (this) {
while (complexEventChunk.hasNext()) {
ComplexEvent event = complexEventChunk.next();
if (event.getType() == ComplexEvent.Type.TIMER) {
if (event.getTimestamp() >= scheduledTime) {
ComplexEvent first = allComplexEventChunk.getFirst();
if (first != null) {
allComplexEventChunk.clear();
ComplexEventChunk<ComplexEvent> outputEventChunk = new ComplexEventChunk<ComplexEvent>(complexEventChunk.isBatch());
outputEventChunk.add(first);
outputEventChunks.add(outputEventChunk);
}
scheduledTime = scheduledTime + value;
scheduler.notifyAt(scheduledTime);
}
} else if (event.getType() == ComplexEvent.Type.CURRENT || event.getType() == ComplexEvent.Type.EXPIRED) {
complexEventChunk.remove();
allComplexEventChunk.add(event);
}
}
}
for (ComplexEventChunk eventChunk : outputEventChunks) {
sendToCallBacks(eventChunk);
}
}
use of org.wso2.siddhi.core.event.ComplexEvent in project siddhi by wso2.
the class FirstGroupByPerTimeOutputRateLimiter method process.
@Override
public void process(ComplexEventChunk complexEventChunk) {
ArrayList<ComplexEventChunk<ComplexEvent>> outputEventChunks = new ArrayList<ComplexEventChunk<ComplexEvent>>();
complexEventChunk.reset();
synchronized (this) {
while (complexEventChunk.hasNext()) {
ComplexEvent event = complexEventChunk.next();
if (event.getType() == ComplexEvent.Type.TIMER) {
if (event.getTimestamp() >= scheduledTime) {
if (allComplexEventChunk.getFirst() != null) {
ComplexEventChunk<ComplexEvent> eventChunk = new ComplexEventChunk<ComplexEvent>(complexEventChunk.isBatch());
eventChunk.add(allComplexEventChunk.getFirst());
allComplexEventChunk.clear();
groupByKeys.clear();
outputEventChunks.add(eventChunk);
} else {
groupByKeys.clear();
}
scheduledTime = scheduledTime + value;
scheduler.notifyAt(scheduledTime);
}
} else if (event.getType() == ComplexEvent.Type.CURRENT || event.getType() == ComplexEvent.Type.EXPIRED) {
GroupedComplexEvent groupedComplexEvent = ((GroupedComplexEvent) event);
if (!groupByKeys.contains(groupedComplexEvent.getGroupKey())) {
complexEventChunk.remove();
groupByKeys.add(groupedComplexEvent.getGroupKey());
allComplexEventChunk.add(groupedComplexEvent.getComplexEvent());
}
}
}
}
for (ComplexEventChunk eventChunk : outputEventChunks) {
sendToCallBacks(eventChunk);
}
}
use of org.wso2.siddhi.core.event.ComplexEvent in project siddhi by wso2.
the class FilterProcessor method process.
@Override
public void process(ComplexEventChunk complexEventChunk) {
complexEventChunk.reset();
while (complexEventChunk.hasNext()) {
ComplexEvent complexEvent = complexEventChunk.next();
Object result = conditionExecutor.execute(complexEvent);
if (result == null || !(Boolean) result) {
complexEventChunk.remove();
}
}
if (complexEventChunk.getFirst() != null) {
this.next.process(complexEventChunk);
}
}
use of org.wso2.siddhi.core.event.ComplexEvent in project siddhi by wso2.
the class OrderByEventComparator method compare.
@Override
public int compare(ComplexEvent complexEvent1, ComplexEvent complexEvent2) {
if (groupByExecutors != null) {
for (int i = 0, groupByExecutorsLength = groupByExecutors.length; i < groupByExecutorsLength; i++) {
ExpressionExecutor executor = groupByExecutors[i];
boolean isAscending = isAscendingArray[i];
Object value1 = executor.execute(complexEvent1);
Object value2 = executor.execute(complexEvent2);
if (value1 != null && value2 != null) {
int results = 0;
Attribute.Type type = executor.getReturnType();
switch(type) {
case STRING:
results = ((String) value1).compareTo(((String) value2));
break;
case INT:
results = ((Integer) value1).compareTo(((Integer) value2));
break;
case LONG:
results = ((Long) value1).compareTo(((Long) value2));
break;
case FLOAT:
results = ((Float) value1).compareTo(((Float) value2));
break;
case DOUBLE:
results = ((Double) value1).compareTo(((Double) value2));
break;
case BOOL:
results = ((Boolean) value1).compareTo(((Boolean) value2));
break;
case OBJECT:
int hashDiff = value1.hashCode() - value2.hashCode();
if (hashDiff < 0) {
results = -1;
} else if (hashDiff > 0) {
results = 1;
}
}
if (!isAscending) {
results = results * -1;
}
if (results != 0) {
return results;
}
} else if (value1 != null) {
return -1;
} else if (value2 != null) {
return 1;
}
}
return 0;
} else {
return 0;
}
}
Aggregations