drools - Event Processing -
i'm new drools. i'm trying write simple complex event processing (cep) application using drools fusion.
my requirement is
- on receipt of critical event, perform action (right that's sop) - if critical event arrives within 5 minutes of previous event , same source, ignore
i have simple event class follows:
public class event { private string id; private date timestamp; private string source; private event.severity severity; private string description; /// getter , setter /// }
the rules file follows:
declare event
@role(event)
end
rule "alert critical events. don't alert next 5 minutes if same source"
when $ev1: event($source: source, severity == event.severity.critical) entry-point "events" not ( event(this != $ev1, source == $source, severity == event.severity.critical, before [1ms, 5m] $ev1) entry-point "events" ) system.err.println("###### critical alert caused event: " + $ev1.getid());
end
for testing, i'm injecting 4 events working memory - e1, e2, e3, e4 respectively following timeline 0m, 4m, 10m, 12m.
jave class file
event event1 = new event("e1", new date(), "server1", event.severity.critical, "server down"); //calendar.add(calendar.minute, 4); event event2 = new event("e2", new date(), "server1", event.severity.critical, "server down"); //calendar.add(calendar.minute, 6); event event3 = new event("e3", new date(), "server1", event.severity.critical, "server down"); //calendar.add(calendar.minute, 2); event event4 = new event("e4", new date(), "server1", event.severity.critical, "server down"); eventsep.insert(event1); clock.advancetime(4, timeunit.minutes); eventsep.insert(event2); clock.advancetime(6, timeunit.minutes); eventsep.insert(event3); clock.advancetime(2, timeunit.minutes); eventsep.insert(event4); ksession.fireallrules();
i expect e1 pass rule since has no preceding event. expect e3 pass since preceding event away 6 minutes.
however, different output:
expecting output
- critical alert caused event: e1
- critical alert caused event: e3
but getting
- critical alert caused event: e1
- critical alert caused event: e2
- critical alert caused event: e3
addition information: i'm using stream mode event processing. can please explain output , tell me i'm wrong. thanks!
i'm sure did, wanted check explicitly set clock type pseudo , not default realtime:
knowledgesessionconfiguration config = knowledgebasefactory.newknowledgesessionconfiguration(); config.setoption( clocktypeoption.get("pseudo") );
there may issue calling fireallrules() once after multiple calls advancetime(). may want run fireuntilhalt() in separate thread or call fireallrules() after each call advancetime(). check out link:
Comments
Post a Comment