[rules-users] sliding window question

lin.lin lin.lin at comcast.net
Wed Mar 5 11:47:13 EST 2014


Hi Walfgang,

  Thanks a lot for the pointers. My goal is to try detect a situation when
readings about a user is consistent high for the last 30 seconds. The
reading comes every 10 seconds. I have tried many different ways and still
can not get it working.  Here are a list of things that I found not working,
I am wondering whether anyone has encountered some of this before or whether
there is a known issue related to some of this or whether there is some
configuration that I am missing in my environment.  Also, what is a good way
to find out whether a event has expired or still in working memory?  I am
stuck, please help.

1) the following rule does not work, according to drools book, this should
work.

rule "rule1"
       dialect "mvel"
       when
         $user: mUser(status==true)
         not (Reading ($user.userid== userid, reading<=90) over window :time
(30s) from entry-point ReadingStream
       then

2) the following rules work on its own, (that is if I only include one rule
in the .drl file), but when I put both rules in the .drl file,  only the
acumtest rule works but nothing comes out from  "rule1"  

rule "acumtest"
dialect "mvel"
  when
   accumulate( Reading( $r:reading) over windiw:time(30s) from entry-point
ReadingStream, $sum : sum($r))
  then
    System.out.print ("sum=" +$sum+"\n");
end

rule "rule1"
dialect "mvel"
    when
      $user: mUser(status==true)
      $hr1 : Reading ($user.userid==$hr1.userid, reading>90) from
entry-point ReadingStream
      $hr2 : Reading ($user.userid==$hr2.userid, reading>90, this after
[30s,30s] $hr1) from entry-point ReadingStream
      not Reading ($user.userid == userid, reading<=90, this after $hr1,
this before $hr2) from entry-point ReadingStream
    then

3) The following rule does not work, but if I comment out the accumulate
line in the condition, it works.  Somehow, the accumulate function does not
work with other rules or making event expired ??

rule "rule1"
dialect "mvel"
    when
      $user: mUser(status==true)
      $hr1 : Reading ($user.userid==$hr1.userid, reading>90) from
entry-point ReadingStream
      $hr2 : Reading ($user.userid==$hr2.userid, reading>90, this after
[30s,30s] $hr1) from entry-point ReadingStream
      not Reading ($user.userid == userid, reading<=90, this after $hr1,
this before $hr2) from entry-point ReadingStream
      $test: Number( doubleValue>0 ) from accumulate ( Reading(
userid==$user.userid, $r:reading) over window:time(30s) from entry-point
ReadingStream, sum($r))
    then

4) This does work, but if I uncomment out the $hr4 line, then it does not
work anymore
rule "rule1"
dialect "mvel"
    when
      $user: mUser(status==true)
      $hr1 : Reading ($user.userid==$hr1.userid, reading>90) from
entry-point ReadingStream
      $hr2 : Reading ($user.userid==$hr2.userid, reading>90, this after
[10s,10s] $hr1) from entry-point ReadingStream
      $hr3 : Reading ($user.userid==$hr3.userid, reading>90, this after
[10s,10s] $hr2) from entry-point ReadingStream
      // $hr4 : Reading ($user.userid==$hr4.userid, reading>90, this after
[10s,10s] $hr3) from entry-point ReadingStream
      $test: Number( doubleValue>0 ) from accumulate ( Reading(
userid==$user.userid, $r:reading) over window:time(30s) from entry-point
ReadingStream, sum($r))
    then


Thanks  a lot!

Lin



--
View this message in context: http://drools.46999.n3.nabble.com/sliding-window-question-tp4028367p4028540.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list