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:

drools fusion samples


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -