[rules-users] latest event within a timeframe

Wolfgang Laun wolfgang.laun at gmail.com
Thu Sep 19 08:54:10 EDT 2013


Works incorrectly (as described by Alexander) with 5.1.1 and 5.3.0.
The rule doesn't fire at all with 5.4.0 and 5.5.0.

Using STREAM, fireUntilHalt().

-W




On 19/09/2013, Alexander Wolf <mail at alexander-wolf.net> wrote:
> Thank you Davide!
>
> For now, as a work around I split this into two rules,
> 1. rule : register the initial and second event and after (timer:2m) fire an
> internal event
> 2. rule : register internal event and then do the look behind (last 2
> minutes) --> assert that the original event was valid
>
> --> this is not nice code and might cause further problems, so I am really
> looking forward to get a bug fix ;)
>
> @W: I call "fireAllRules" every time I insert a new event. (is this bad?
> This seemed to works better (in terms of predictability (unit tests...) of
> outcome) than all my attempts to use "fireUntilHalt", w and w/o new Thread
> ...) especially with rules that use cron timers.
>
>
>
> On 19.09.2013, at 10:23, Davide Sottara <dsotty at gmail.com> wrote:
>
>> It is a bug.
>> The 2s delay is computed from the moment the rule is activated (by E2 at
>> 12:01:50).
>> rather than taking into account the correct "zero" timestamp ($event1).
>> Thanks for reporting this, I'll open a JIRA
>> Davide
>>
>> On 09/18/2013 12:29 PM, Wolfgang Laun wrote:
>>> Is the session being run via a single call to fireUntilHalt()?
>>> -W
>>>
>>> On 18/09/2013, Alexander Wolf <mail at alexander-wolf.net> wrote:
>>>> [Drools Version 5.5.0 Final]
>>>>
>>>> Hey -
>>>>
>>>> I got an event E1 that is only valid, if the latest event E2 following
>>>> E1
>>>> within 2 minutes has the value 1
>>>> --> I want have the rule fire 2 minutes after E1 but only if E1 is
>>>> valid
>>>>
>>>> This is my rule:
>>>>
>>>> rule "inform about E1"
>>>> when
>>>> 	//event (T1) is the initial trigger
>>>> 	$event1 : Event(type == EventType.T1)
>>>> 	//there is an event (T2) with value 0 between 0,2m after doorClosed
>>>> 	$event2: Event(type == EventType.T2, value == 1, this after [0, 2m]
>>>> $event1, $timestamp : timestamp)
>>>> 	//there is no newer event (T2) within the timeframe
>>>> 	not Measurement(type == EventType.T2, this after [0, 2m] $event1,
>>>> timestamp
>>>>> $timestamp)
>>>> then
>>>> 	//print info
>>>> 	log(drools, "E1 valid");
>>>> end
>>>>
>>>> An example of Events:
>>>>
>>>> 12:00:00  - E1
>>>> 12:01:00  - E2 ( value = 0 )
>>>> 12:01:10  - E2 ( value = 0 )
>>>> 12:01:40  - E2 ( value = 0 )
>>>> 12:01:50  - E2 ( value = 1 )
>>>> 12:02:10  - E2 ( value = 0 )
>>>>
>>>> I would expect the output:   [log() does log the clock-time when my
>>>> rule
>>>> fires)
>>>>
>>>> 12:02:00 E1 valid
>>>>
>>>> But what I get is:
>>>>
>>>> 12:03:50 E1 valid
>>>>
>>>>
>>>> So I see that the late coming E2 (@12:02:10) is correctly ignored, the
>>>> rule
>>>> result is basically correct, but the rule is fired much to late.
>>>> (actually
>>>> 2 minutes after $event2 and not as expected 2 minutes after $event1).
>>>>
>>>> Could someone give me a hint what I did wrong?
>>>>
>>>> Regards,
>>>> Alex
>>>>
>>> _______________________________________________
>>> 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