[rules-users] sliding window question

Lin Lin lin.lin at comcast.net
Thu Feb 27 09:24:44 EST 2014


Hi Wolfgang,

  Thanks so much!   I will try the sliding window over the time.  I also need to give the average reading over the last 30 seconds in the alert message. How would I do that?

Thanks
Lin

> On Feb 27, 2014, at 1:01 AM, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:
> 
> The correct way to ascertain that something hasn't happened for
> a certain interval must be based on "staking out" this interval. One
> way is by means of two distinct events:
> 
>   when
>     $r1: Reading( reading >90 )
>     $r2: Reading( reading > 90, this after[30s] $r1 )
>     not Reading( reading <= 90, this after $r1 && before $r2 )
>   then
> 
> Clearly, this will only work if  Readings arrive regularly, and you may have a
> certain amount of delay at the end.
> 
> Another way would be to use a sliding window over time:
> 
>   when
>     not Reading( reading <= 90 ) over window:time( 30s )
>   then
> 
> Here's a snag, too: If there are no readings at all, you'll also get an alert.
> 
> And then you'll have to think about the seconds following the 30th
> second: should another alert be emitted repeatedly...
> 
> Most of the time, it's not an issue in CEP ;-)
> 
> -W
> 
> 
> 
> 
> 
> 
>> On 27/02/2014, lin.lin <lin.lin at comcast.net> wrote:
>> Hi,
>> 
>> I tried to create a rule that gives an alert when a machine reading is high
>> for 30 seconds. I modeled the machine reading input as events.  The
>> following is the rule:
>> 
>> rule "rule1"
>> dialect "mvel"
>>    when
>>       $rd1 : mReading( reading >90 ) from entry-point ReadingStream
>>       not ($rd2 : mReading (reading<=90 , this before [0s, 30s] $rd1 )
>> from entry-point ReadingStream )
>>    then
>>      System.out.print ("alert: Reading high for 30 seconds \n");
>> end
>> 
>> This does not detect detect the bad reading.  However, If I changed the
>> rule
>> to be following (change second condition from "not" to "exists"), it
>> detects
>> all readings that are good.
>> 
>> rule "rule1"
>> dialect "mvel"
>>    when
>>       $rd1 : mReading( reading >90 ) from entry-point ReadingStream
>>       exists ($rd2 : mReading (reading<=90 , this before [0s, 30s] $rd1 )
>> from entry-point ReadingStream )
>>    then
>>      System.out.print ("alert: Reading high for 30 seconds \n");
>> End
>> 
>> 
>> Is this an issue in CEP or did I do something wrong?
>> 
>> Thanks a lot!
>> Lily
>> 
>> 
>> 
>> --
>> View this message in context:
>> http://drools.46999.n3.nabble.com/sliding-window-question-tp4028367.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
> _______________________________________________
> 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