Hi Edson,
Thanks for the response, I guess I jumped the gun on that question because I am seeing
some *strange* behaviour long before the expire time.
I have built an app which uses JUnit as the testing framework which I am testing a set of
CEP (time based) rules.
declare ParameterUpdateEvent
@role(event)
end
rule "Set Parameter Value"
when
ParameterUpdateEvent($name : name, $newParamValue : value)
from entry-point "ParamUpdateStream"
$param : Parameter(name == $name)
then
$param.setValue($newParamValue);
System.out.println("New value = " + $param.getValue());
End
rule "Print Average"
when
ParameterUpdateEvent($paramName : name, $newParamValue : value)
from entry-point "ParamUpdateStream"
$param : Parameter(name == $paramName)
Number($averageUpdateValue : doubleValue) from accumulate(
ParameterUpdateEvent(name == $paramName, $value : value)
over window:length( 15m )
from entry-point "ParamUpdateStream", average($value))
#Number($averageUpdateValue : doubleValue)
then
#System.out.println("Here");
System.out.println("Average update value for " + $paramName +
" = " + $averageUpdateValue);
End
In my unit test I create the necessary Parameter and add it to working memory using
session.insert, then I begin adding the events, ParameterUpdateEvent using stream.insert,
then call session.fireAllRules.
* Add value 56 - output of Print Average is 56.0
* Add Value 89 - output of Print Average is 72.5
* Add value 3 - output of Print Average is 49.33
* Add value 50 - output of Print Average is 49.5
* Add value 90 - output of Print Average is 57.6
First issue is the Print Average rule gets called for each ParameterUpdateEvent in the
stream, called once after I add the 56, called twice after I add the 72.5, three times
after 3, etc. but the Set Parameter Value rule is only called once per event. This could
be the root of the problem but I am stumped as to why it is happening.
Is also seems averages are being computed differently when I add an advanceTime call to
the pseudo clock before each event insert but I can't get clean data due to the above
problem.
Thanks
Glenn
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On
Behalf Of Edson Tirelli
Sent: 15 February 2010 20:08
To: Rules Users List
Subject: Re: [rules-users] CEP Question
Hi Glen,
The averages are indeed recalculated on event expiration. Example:
You have values for the following events:
e1: 20
e2: 30
e3: 40
So the average is 30. Whenever e1 is expired in your window, the average is
recalculated to 35 (assuming no new event arrived).
What are you seeing there?
Edson
2010/2/15 Glenn Macgregor
<gmacgregor@pocketkings.ie<mailto:gmacgregor@pocketkings.ie>>
Hi All,
I am still working through a CEP use case which is going fairly well. I have a few rules
and it seems they are working as I expect. Is there a way to get called back when events
go out of a time window? My current use case is alerting, I have a stream of events (param
updates) coming in and I create a ParamUpdateEvent for each. I have a rule which averages
the values in the ParamUpdateEvent and tests against a threshold, that is working fine.
The problem is when I don't receive any events for a period of time over the window
size I really want to the rule which calculates the average to fire when anything is moved
out of the window as well as when an update arrives, is this possible?
Thanks
Glenn
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @
www.jboss.com<http://www.jboss.com>