[rules-users] Semantic of rules with not and coincide

IK81 ml at kofler.me
Fri Dec 6 05:56:33 EST 2013


Yes, this was my assumption and it is also what I want. I don't care if 
code C1 is reported before C2 or vice versa. They just have to happen 
within 1 minute.

However, the semantic of coincide in combination with not is unclear to 
me. Why can the rule fire
at event insertion time when the engine does not know if the second 
event will not happen without
waiting for an additional minute?

Ingo

On 2013-12-06 09:22, Wolfgang Laun wrote:
> Coincides is symmetric in time. You might want to use before or 
> after.
> -W
>
>
> On 06/12/2013, IK81 <ml at kofler.me> wrote:
>> Dear all,
>>
>> I am currently stuck with a problem concerning the use of not and
>> conincide. I want to analyze a stream of error code events from a 
>> set of
>> devices and detect the following situations. Every event has a 
>> timestamp
>> (long), a device id (String) and an error code (String).
>>
>> What I want to detect is the following
>> - If I get two events, one with code C1 and one with C2 from a 
>> single
>> device within 1 minute, it represents a special event combination. 
>> The
>> order of their appearence is not relevant.
>> - If I just get C1 (without the C2 within the time frame), just 
>> report
>> C1
>> - If I just get C2 (without the C1 within the time frame), just 
>> report
>> C2
>>
>>
>> I can successfully detect the special event combination with the
>> following rule
>>
>> rule "Detect combination"
>> when
>>      $e1 : Event ($d: device, code == "C1")
>>      $e2 : Event (device == $d, code == "C2", this coincides [1m] 
>> $e1)
>> then
>>      ... do some output
>> end
>>
>>
>> Then I tried to implement the detection of C1 only as follows
>>
>> rule "Detect code C1"
>> when
>> 	$e1 : Event ($d: device, code == "C1")
>> 	not ( $e2 : Event (device == $d, code == "C2", this coincides [1m]
>> $e1))
>> then
>>      ... do some other output
>> end
>>
>> My understanding of the rule is that it should fire, if I get the 
>> event
>> with code C1 and there is no other event with error code C2 for the 
>> same
>> device that happens within one minute before and after the C1 event. 
>> To
>> my surprise, the rule fires immediately when I insert an event with
>> error code C1. Shouldn't the implementation wait at least 1 minute 
>> to be
>> sure that no C2 error event will be inserted?
>>
>>
>> BTW this is how I insert the events in my test case:
>>
>> 	clock.advanceTime(70,  TimeUnit.SECONDS);
>> 	FactHandle handle1 = ksession.insert( new Event(65000, "A", "C1") 
>> );
>> 	ksession.fireAllRules();
>> 	clock.advanceTime( 10, TimeUnit.SECONDS );
>> 	FactHandle handle2 = ksession.insert( new Event(75000, "A", "C2") 
>> );
>> 	ksession.fireAllRules();
>> 	clock.advanceTime( 2, TimeUnit.SECONDS );
>>
>> And this is mainly the output I get:
>>
>> detected code C1 @ 70000
>>    event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000
>> device=A code=C1
>> detected combination @ 80000
>>    event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000
>> device=A code=C1
>>    event id=fc89715b-fc30-4b12-ab31-a3884dcd4886 timestamp=75000
>> device=A code=C2
>>
>> Any ideas concerning an alternative solution are highly welcomed.
>>
>> Thanks,
>> Ingo
>>
>>
>> _______________________________________________
>> 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