[rules-users] CEP accumulate unclear behavior

Wolfgang Laun wolfgang.laun at gmail.com
Thu Dec 5 07:08:06 EST 2013


Try the following separation of the computation of the average from
the detection of critical events.

The first rule with a salience > 0 simply computes the average of all
Events and update a singular Fact (Average) containing a field with
the running average value.

A second rule matches on Average and the kind of Event you're
interested and tests the duration, e.g.

   Average( $v: value )
   Event( name == "MyService", duration > $v )

-W



On 05/12/2013, ters <ters at ukr.net> wrote:
> laune,
> I've tried your proposed accumulate approach, the Result of
> test1_FireAllRules() is:
> -= 1 =-
> $events avg duration = 2.0
> ----------FIRED----------
> -= 2 =-
> $events avg duration = 2.0
> ----------FIRED----------
> -= 3 =-
> $events avg duration = 7.0
> ----------FIRED----------
> ---test1 end---
> Ok, it fires for each new inserted event (between fireAllRules calls) and
> calculates avg for all events witn name "MyService".
> But, as I wrote in first post, I need to fire a rule if last inserting
> event
> duration
> greater than value which depends on average duration of all events from the
> wm. Lets take $avg/10(/10 - take for convenience to show issue).
> So I need to add pattern along with accumulate:
> /    Number( $avg: doubleValue ) from accumulate( ServicePerformanceEvent(
> $name: serviceName, $thisDuration: duration),
>                      init( double sum = 0; double count = 0; )
>                      action( if("MyService".equals($name)){
>                                  sum += $thisDuration;
>                                  count++;})
>                      result( count != 0 ? sum/count : 0 ) );
> 	
> 	$event : ServicePerformanceEvent(serviceName == "MyService", duration >
> */$avg/10/*);/
> Result of test1_FireAllRules():
> -= 1 =-
> $event.duration = 2
> $events avg duration = 2.0
> ----------FIRED----------
> -= 2 =-
> $event.duration = 2
> $events avg duration = 2.0
> ----------FIRED----------
> -= 3 =-
> $event.duration = 12
> $events avg duration = 7.0
> ----------FIRED----------
> $event.duration = 2
> $events avg duration = 7.0
> ----------FIRED----------
> ---test1 end---
>
> As can see, it fires on both for newly inserted event and for old already
> matched events/facts.
> Ok, if rule analyzes all previous events/facts I decide to check previous
> rule with test:
> /	@Test
> 	public void test12_FireAllRules() throws RuleGeneratorException {
> 		System.out.println("-= 1 =-");
> 		ksession.insert(new ServicePerformanceEvent("MyService", 2));
> 		ksession.fireAllRules();
>
> 		System.out.println("-= 2 =-");
> 		ksession.insert(new ServicePerformanceEvent("AnotherService", 10));
> 		ksession.fireAllRules();
>
> 		System.out.println("-= 3 =-");
> 		ksession.insert(new ServicePerformanceEvent("MyService", 12));
> 		ksession.fireAllRules();
>
> */		System.out.println("-= 4 =-");
> 		ksession.fireAllRules(); // call firing without inserting event after
> last
> fire/*
> 		System.out.println("---test1 end---");
> 	}/
> Result of test12_FireAllRules():
> -= 1 =-
> $event.duration = 2
> $events avg duration = 2.0
> ----------FIRED----------
> -= 2 =-
> $event.duration = 2
> $events avg duration = 2.0
> ----------FIRED----------
> -= 3 =-
> $event.duration = 12
> $events avg duration = 7.0
> ----------FIRED----------
> $event.duration = 2
> $events avg duration = 7.0
> ----------FIRED----------
> /-= 4 =-
> ---test1 end---/
>
> And what I see, in case -3- the rule analyzed both new and old facts...
> but in case -4- the rule analyzed nothing! though, as in case -3-, there
> were potentially matched old facts.
> I completely don't understand such behavior...
> Again, what I need for last test is:
> -= 1 =-
> $event.duration = 2
> $events avg duration = 2.0
> ----------FIRED----------
> -= 2 =-
> -= 3 =-
> /$event.duration = 12
> $events avg duration = 7.0/
> ----------FIRED----------
> -= 4 =-
> ---test1 end---
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/CEP-accumulate-unclear-behavior-tp4027069p4027107.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list