[rules-users] Retrieving timestamps from default Drools Fusion event

Wan Jing Loh lohwanjing at gmail.com
Mon Mar 4 21:52:52 EST 2013


Hi,

First time posting in the mailing list, so I apologise if I make any silly
mistakes.

I have two classes MachineOnline and MachineOffline, which denote when a
machine is online and offline respectively

public class MachineOnline {
    int machineId

}


These are declared in the drl file as events, so Drools Fusion
automatically generates the timestamp for me (I am running in STREAM mode,
so i get real time updates on the machine status)

declare MachineOnline
    @role(event)
end

I then have a rule to generate the duration when the machine is online, but
I cannot seem to extract the timestamp that drools automatically inserts. A
thread a few years ago suggested using .startTimestamp, but Drools does not
seem to recognise it as a field. I believe that needs an EventFactHandle,
but I'm not sure how to retrieve that inside the drl file.

rule "Find duration machine is online"
    when $message1 : MachineOnline()
             $message2: MachineOffline(machineId == $message1.machineId &&
this after $message1) // + more rules to handle edge cases
    then
         //processing
         duration = $message2.startTimestamp - $message1.startTimestamp ?
end

The eventual aim is to allow for a query that allows me to find how long
the machine is online for during a specified time interval, so if there is
a way to do this without needing to retrieve the actual timestamp of each
event, that will be great too. Or would it be better to manually define a
timeStamp field for each event? I've been using the default one as that
together with the pseudo allows for easy unit testing.

Thanks a lot!

Regards
Jing
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130305/e3cb5818/attachment.html 


More information about the rules-users mailing list