Search in sources :

Example 1 with Event

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));
}
Also used : Event(org.openksavi.sponge.event.Event)

Example 2 with Event

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();
    }
}
Also used : Event(org.openksavi.sponge.event.Event) HashSet(java.util.HashSet) Pair(org.apache.commons.lang3.tuple.Pair)

Example 3 with Event

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());
}
Also used : PriorityEventQueueComparator(org.openksavi.sponge.core.engine.event.PriorityEventQueueComparator) Event(org.openksavi.sponge.event.Event) PriorityBlockingQueue(java.util.concurrent.PriorityBlockingQueue) Test(org.junit.Test)

Example 4 with Event

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;
}
Also used : Event(org.openksavi.sponge.event.Event)

Example 5 with 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;
}
Also used : Event(org.openksavi.sponge.event.Event) EventClonePolicy(org.openksavi.sponge.event.EventClonePolicy)

Aggregations

Event (org.openksavi.sponge.event.Event)7 HashSet (java.util.HashSet)1 PriorityBlockingQueue (java.util.concurrent.PriorityBlockingQueue)1 Pair (org.apache.commons.lang3.tuple.Pair)1 Test (org.junit.Test)1 PriorityEventQueueComparator (org.openksavi.sponge.core.engine.event.PriorityEventQueueComparator)1 SpongeEngine (org.openksavi.sponge.engine.SpongeEngine)1 EventClonePolicy (org.openksavi.sponge.event.EventClonePolicy)1