use of org.openksavi.sponge.event.Event in project sponge by softelnet.
the class SameSourceJavaRule method onConfigure.
@Override
public void onConfigure() {
setEvents(new Object[] { makeEventSpec("filesystemFailure", "e1"), makeEventSpec("diskFailure", "e2", EventMode.ALL) });
addAllConditions("severityCondition");
addEventConditions("e2", (rule, event) -> {
// Both events have to have the same source
Event event1 = rule.getEvent("e1");
return event.get("source").equals(event1.get("source")) && Duration.between(event1.getTime(), event.getTime()).getSeconds() <= 4;
});
setDuration(Duration.ofSeconds(8));
}
use of org.openksavi.sponge.event.Event in project sponge by softelnet.
the class DecomposedQueue method doGetNonBlocking.
/**
* Returns the next pair (trigger adapter or event set processor group adapter) available to processing. <p> Not-Blocking. </p> Returns
* {@code null} if currently there is no pair (trigger adapter or event set processor group adapter) available to processing.
*
* @return the next pair (trigger adapter or event set processor group adapter) available to processing or {@code null} if none found.
*/
protected Pair<T, Event> doGetNonBlocking() {
internalLock.lock();
try {
// Names of non-singletons that are waiting in this queue for an earlier event. This is used to preserve the order of events.
Set<String> nonSingletonsWaitningForEarlierEvent = new HashSet<>();
// Search the internal entry list starting from the the oldest entries.
ListIterator<Pair<T, Event>> iterator = entries.listIterator();
while (iterator.hasNext()) {
Pair<T, Event> entry = iterator.next();
T adapter = entry.getLeft();
Event event = entry.getRight();
if (adapter.getDefinition().isSingleton()) {
// Singletons (in this case triggers) are never blocked and next event could be processes concurrently.
iterator.remove();
return entry;
} else {
// Note that only the earliest event going to the given adapter should be considered.
if (!currentlyProcessedNonSingletons.contains(adapter.getName()) && !nonSingletonsWaitningForEarlierEvent.contains(adapter.getName())) {
// If necessary verify also event name readiness.
if (allowConcurrentEventTypeProcessing || !currentlyProcessedEventNames.contains(event.getName())) {
currentlyProcessedNonSingletons.add(adapter.getName());
currentlyProcessedEventNames.add(event.getName());
iterator.remove();
return entry;
}
}
nonSingletonsWaitningForEarlierEvent.add(adapter.getName());
}
}
return null;
} finally {
internalLock.unlock();
}
}
use of org.openksavi.sponge.event.Event in project sponge by softelnet.
the class PriorityEventQueueTest method testPriorityBlockingQueue.
@Test
public void testPriorityBlockingQueue() throws InterruptedException {
PriorityBlockingQueue<Event> queue = new PriorityBlockingQueue<>(20, new PriorityEventQueueComparator());
Event e1p1 = addEvent(queue, 1, 1);
Event e2p1 = addEvent(queue, 2, 1);
Event e3p1 = addEvent(queue, 3, 1);
Event e4p1 = addEvent(queue, 4, 1);
Event e5p2 = addEvent(queue, 5, 2);
Event e6p2 = addEvent(queue, 6, 2);
Event e7p2 = addEvent(queue, 7, 2);
Event e8p2 = addEvent(queue, 8, 2);
Event e21p0 = addEvent(queue, 21, 0);
Event e31p5 = addEvent(queue, 31, 5);
// First event should have the greatest priority and the lowest id
Assert.assertEquals(e31p5, queue.take());
Assert.assertEquals(e5p2, queue.take());
Assert.assertEquals(e6p2, queue.take());
Assert.assertEquals(e7p2, queue.take());
Assert.assertEquals(e8p2, queue.take());
Assert.assertEquals(e1p1, queue.take());
Assert.assertEquals(e2p1, queue.take());
Assert.assertEquals(e3p1, queue.take());
Assert.assertEquals(e4p1, queue.take());
Assert.assertEquals(e21p0, queue.take());
}
use of org.openksavi.sponge.event.Event in project sponge by softelnet.
the class PriorityEventQueueTest method addEvent.
private Event addEvent(Queue<Event> queue, int id, int priority) {
Event event = event(id, priority);
queue.add(event);
return event;
}
use of org.openksavi.sponge.event.Event in project sponge by softelnet.
the class PriorityEventQueueTest method event.
private Event event(int id, int priority) {
String eventName = "e" + id;
EventClonePolicy eventClonePolicy = engine.getDefaultParameters().getEventClonePolicy();
Event event = (priority == AttributeMapEvent.DEFAULT_PRIORITY) ? new AttributeMapEvent(eventName, eventClonePolicy) : mock(TestControlEvent.class, withSettings().useConstructor(eventName, eventClonePolicy).defaultAnswer(CALLS_REAL_METHODS)).setPriority(priority);
event.setId(new EventId(idGenerator.getBaseTimestamp(), id).toString());
return event;
}
Aggregations