Re: [rules-users] Accumulate + Temporal Operators
Hi Greg, Many thanks for the response. Works great! Cheers, Paul On Mon, Jan 18, 2010 at 6:24 AM, Greg Barton wrote: > Yeah, you'll have to reinsert events into the stream, or another stream. > Probably the latter would be better. > > rule "DetectedFooAverageOver1" > when > $f : Double(doubleValue > 1.0) from accumulate( Event($v : value, name == > "Foo") over window:time ( 10s ) from entry-point EntryPoint, average($v)) > then > entryPoints["DetectedStuff"].insert(new ComplexEvent("FooAvg", $f)); > end > > Then a similar rule for the Bar average, and a rule to test the coincidence > of the complex events: > > rule "ComplexAvgBarPrettySoonAfterComplexAvgFoo" > when > $foo : ComplexEvent(name == "FooAvg") from entry-point DetectedStuff > $bar : ComplexEvent(name == "BarAvg", this after[0s,1s] $foo) from > entry-point DetectedStuff > then > System.out.println("Uf, dah!"); > end > > And more fun can be had with this event aggregation idea. > > --- On Sun, 1/17/10, Paul R. wrote: > > > From: Paul R. > > Subject: Re: [rules-users] Accumulate + Temporal Operators > > To: "Rules Users List" > > Date: Sunday, January 17, 2010, 12:29 PM > > I've declared an @expires of 30s for > > both events. However, my problem is that within a 30 second > > window it doesn't seem possible to ascertain whether > > both of the events occur simultaneously. I could change the > > @expires to 10 seconds for the above rule, which would make > > it work. However, I would like to be to perform more > > complicated matches, e.g. matching sequences of events which > > occur after another. > > > > > > $f : Double(doubleValue > 1.0) from > > accumulate( Event($v : value, name == "Foo") over > > window:time ( 10s ) > > > > from entry-point EntryPoint, > > average($v)) > > > > // following event must start immediately > > _after_ the above. > > > > $b : Double(doubleValue < 1.0) from > > accumulate( Event($v : value, name == "Bar") over > > window:time ( 20s ) > > > > from entry-point EntryPoint, > > average($v)) > > > > Any suggestions how I can achieve this kind of > > functionality? > > > > Many Thanks, > > > > Paul > > > > > > On Sun, Jan 17, 2010 at 4:19 AM, > > Greg Barton > > wrote: > > > > Do your Foo and Bar events declare > > an @expires value? If their expiration is less than 10 > > seconds then the rule below won't work properly. (And by > > default an event's expiration is 0, which makes the rule > > below go wacky if @expires hasn't been declared...) If > > the @expires is 10s or greater for both events it should > > work. > > > > > > > > > > --- On Thu, 1/14/10, Paul R. > > wrote: > > > > > > > > > From: Paul R. > > > > > Subject: [rules-users] Accumulate + Temporal > > Operators > > > > > To: rules-users@lists.jboss.org > > > > > Date: Thursday, January 14, 2010, 1:56 PM > > > > > Hi, > > > > > > > > > > I'm using accumulate with sliding windows to > > verify > > > > > that certain event conditions are present for a > > specified > > > > > period of time, which works fine, however > > > > > I need to verify that both conditions are present at > > the > > > > > same time, i.e Foo.value > 1 for 10 seconds and > > Bar.value > > > > > < 1 for 10 seconds. There doesn't > > > > > > > > > > appear to be an obvious way to use the temporal > > operators > > > > > in this situation. Can anybody offer any suggestions? > > > > > > > > > > rule test no-loop true > > > > > when > > > > > $f : Double(doubleValue > 1.0) from > > > > > accumulate( Foo($v : value) over window:time ( 10s ) > > > > > > > > > > from entry-point EntryPoint, > > > > > min($v)) > > > > > $b : Double(doubleValue < 1.0) from > > > > > accumulate( Bar($v : value) over window:time ( 10s ) > > > > > from entry-point EntryPoint, > > > > > max($v)) > > > > > then &
Re: [rules-users] Accumulate + Temporal Operators
Yeah, you'll have to reinsert events into the stream, or another stream. Probably the latter would be better. rule "DetectedFooAverageOver1" when $f : Double(doubleValue > 1.0) from accumulate( Event($v : value, name == "Foo") over window:time ( 10s ) from entry-point EntryPoint, average($v)) then entryPoints["DetectedStuff"].insert(new ComplexEvent("FooAvg", $f)); end Then a similar rule for the Bar average, and a rule to test the coincidence of the complex events: rule "ComplexAvgBarPrettySoonAfterComplexAvgFoo" when $foo : ComplexEvent(name == "FooAvg") from entry-point DetectedStuff $bar : ComplexEvent(name == "BarAvg", this after[0s,1s] $foo) from entry-point DetectedStuff then System.out.println("Uf, dah!"); end And more fun can be had with this event aggregation idea. --- On Sun, 1/17/10, Paul R. wrote: > From: Paul R. > Subject: Re: [rules-users] Accumulate + Temporal Operators > To: "Rules Users List" > Date: Sunday, January 17, 2010, 12:29 PM > I've declared an @expires of 30s for > both events. However, my problem is that within a 30 second > window it doesn't seem possible to ascertain whether > both of the events occur simultaneously. I could change the > @expires to 10 seconds for the above rule, which would make > it work. However, I would like to be to perform more > complicated matches, e.g. matching sequences of events which > occur after another. > > > $f : Double(doubleValue > 1.0) from > accumulate( Event($v : value, name == "Foo") over > window:time ( 10s ) > > from entry-point EntryPoint, > average($v)) > > // following event must start immediately > _after_ the above. > > $b : Double(doubleValue < 1.0) from > accumulate( Event($v : value, name == "Bar") over > window:time ( 20s ) > > from entry-point EntryPoint, > average($v)) > > Any suggestions how I can achieve this kind of > functionality? > > Many Thanks, > > Paul > > > On Sun, Jan 17, 2010 at 4:19 AM, > Greg Barton > wrote: > > Do your Foo and Bar events declare > an @expires value? If their expiration is less than 10 > seconds then the rule below won't work properly. (And by > default an event's expiration is 0, which makes the rule > below go wacky if @expires hasn't been declared...) If > the @expires is 10s or greater for both events it should > work. > > > > > --- On Thu, 1/14/10, Paul R. > wrote: > > > > > From: Paul R. > > > Subject: [rules-users] Accumulate + Temporal > Operators > > > To: rules-users@lists.jboss.org > > > Date: Thursday, January 14, 2010, 1:56 PM > > > Hi, > > > > > > I'm using accumulate with sliding windows to > verify > > > that certain event conditions are present for a > specified > > > period of time, which works fine, however > > > I need to verify that both conditions are present at > the > > > same time, i.e Foo.value > 1 for 10 seconds and > Bar.value > > > < 1 for 10 seconds. There doesn't > > > > > > appear to be an obvious way to use the temporal > operators > > > in this situation. Can anybody offer any suggestions? > > > > > > rule test no-loop true > > > when > > > $f : Double(doubleValue > 1.0) from > > > accumulate( Foo($v : value) over window:time ( 10s ) > > > > > > from entry-point EntryPoint, > > > min($v)) > > > $b : Double(doubleValue < 1.0) from > > > accumulate( Bar($v : value) over window:time ( 10s ) > > > from entry-point EntryPoint, > > > max($v)) > > > then > > > > > > // ... > > > end > > > > > > Any help greatly appreciated. > > > > > > Thanks, > > > > > > Paul > > > > > > > > > -Inline Attachment Follows- > > > > > > ___ > > > rules-users mailing list > > > rules-users@lists.jboss.org > > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > > > > > > > > ___ > > rules-users mailing list > > rules-users@lists.jboss.org > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > -Inline Attachment Follows- > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Accumulate + Temporal Operators
I've declared an @expires of 30s for both events. However, my problem is that within a 30 second window it doesn't seem possible to ascertain whether both of the events occur simultaneously. I could change the @expires to 10 seconds for the above rule, which would make it work. However, I would like to be to perform more complicated matches, e.g. matching sequences of events which occur after another. $f : Double(doubleValue > 1.0) from accumulate( Event($v : value, name == "Foo") over window:time ( 10s ) from entry-point EntryPoint, average($v)) // following event must start immediately _after_ the above. $b : Double(doubleValue < 1.0) from accumulate( Event($v : value, name == "Bar") over window:time ( 20s ) from entry-point EntryPoint, average($v)) Any suggestions how I can achieve this kind of functionality? Many Thanks, Paul On Sun, Jan 17, 2010 at 4:19 AM, Greg Barton wrote: > Do your Foo and Bar events declare an @expires value? If their expiration > is less than 10 seconds then the rule below won't work properly. (And by > default an event's expiration is 0, which makes the rule below go wacky if > @expires hasn't been declared...) If the @expires is 10s or greater for > both events it should work. > > --- On Thu, 1/14/10, Paul R. wrote: > > > From: Paul R. > > Subject: [rules-users] Accumulate + Temporal Operators > > To: rules-users@lists.jboss.org > > Date: Thursday, January 14, 2010, 1:56 PM > > Hi, > > > > I'm using accumulate with sliding windows to verify > > that certain event conditions are present for a specified > > period of time, which works fine, however > > I need to verify that both conditions are present at the > > same time, i.e Foo.value > 1 for 10 seconds and Bar.value > > < 1 for 10 seconds. There doesn't > > > > appear to be an obvious way to use the temporal operators > > in this situation. Can anybody offer any suggestions? > > > > rule test no-loop true > > when > > $f : Double(doubleValue > 1.0) from > > accumulate( Foo($v : value) over window:time ( 10s ) > > > > from entry-point EntryPoint, > > min($v)) > > $b : Double(doubleValue < 1.0) from > > accumulate( Bar($v : value) over window:time ( 10s ) > > from entry-point EntryPoint, > > max($v)) > > then > > > > // ... > > end > > > > Any help greatly appreciated. > > > > Thanks, > > > > Paul > > > > > > -Inline Attachment Follows- > > > > ___ > > rules-users mailing list > > rules-users@lists.jboss.org > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Accumulate + Temporal Operators
Do your Foo and Bar events declare an @expires value? If their expiration is less than 10 seconds then the rule below won't work properly. (And by default an event's expiration is 0, which makes the rule below go wacky if @expires hasn't been declared...) If the @expires is 10s or greater for both events it should work. --- On Thu, 1/14/10, Paul R. wrote: > From: Paul R. > Subject: [rules-users] Accumulate + Temporal Operators > To: rules-users@lists.jboss.org > Date: Thursday, January 14, 2010, 1:56 PM > Hi, > > I'm using accumulate with sliding windows to verify > that certain event conditions are present for a specified > period of time, which works fine, however > I need to verify that both conditions are present at the > same time, i.e Foo.value > 1 for 10 seconds and Bar.value > < 1 for 10 seconds. There doesn't > > appear to be an obvious way to use the temporal operators > in this situation. Can anybody offer any suggestions? > > rule test no-loop true > when > $f : Double(doubleValue > 1.0) from > accumulate( Foo($v : value) over window:time ( 10s ) > > from entry-point EntryPoint, > min($v)) > $b : Double(doubleValue < 1.0) from > accumulate( Bar($v : value) over window:time ( 10s ) > from entry-point EntryPoint, > max($v)) > then > > // ... > end > > Any help greatly appreciated. > > Thanks, > > Paul > > > -Inline Attachment Follows- > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users