Hello again,<br><br>I'm back on my problem and a colleague of mime suggested me the following rule instead :<br><br><span style="font-family: courier new,monospace;"># declare events</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">declare Operation</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> @role(event)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> @timestamp(date)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">end</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">rule "overActivity"</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">dialect "mvel" </span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> when</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> #condition : 2 operation in less than 1 minute</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> <b> $operation1 : Operation($ipAddress1 : ipAddress) </b></span><b><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> from entry-point "OperationStream"</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> $operation2 : Operation(this != $operation1, ipAddress == $ipAddress1, </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> this after[ 0s,30s ] $operation1) from entry-point "OperationStream"</span></b><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> then </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> #actions</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> System.out.println("over-active user " + $ipAddress1 );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">end</span><br>
<br><br>It works, and the main difference is the use of <b>after[]</b> instead of <b>window:time()</b><br>Is it because the window:time() was used outside of an <b>accumulate()</b> function ?<br>I'd just like to understand this. <br>
If anyone can take a few minutes to answer, thank you in advance<br><br>Best regards,<br><br>Xavier<br><br><br><br><div class="gmail_quote">On Wed, May 19, 2010 at 10:08 AM, Xavier Coulon <span dir="ltr"><<a href="mailto:xcoulon@gmail.com" target="_blank">xcoulon@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><br>
Hello Wolfgang,<br>
<br>
sorry, I wasn't available yesterday.<br>
I just followed your instructions:<br>
<br>
Here's my test method now :<br>
<br>
</div><div>@SuppressWarnings("unchecked")<br>
@Test<br>
public void testActivity() throws IOException, ParseException,<br>
InterruptedException {<br>
// parse the log file<br>
Resource logFile = new ClassPathResource(<br>
</div> "activity/activity18h20-18h30-extract.log");<br>
<div> // converter and inject tracks in the session,<br>
List<String> logLines = FileUtils.readLines(logFile.getFile(),<br>
"UTF-8");<br>
</div><div> LOGGER.info("loading events");<br>
// load events from stream<br>
</div> Operation previousOperation = null;<br>
<div> for (String logLine : logLines) {<br>
Operation operation = LineConverterUtil.getOperation(logLine);<br>
</div><div> Assert.assertFalse("Current operation equals() previous one",<br>
operation.equals(previousOperation));<br>
Assert.assertFalse("Current operation == previous one",<br>
operation == previousOperation);<br>
</div> previousOperation = operation;<br>
<div> LOGGER.debug("Moving clock from "<br>
+ (new Date(clock.getCurrentTime())).toString() + " to "<br>
+ operation.getDate());<br>
clock.advanceTime(operation.getDate().getTime()<br>
- clock.getCurrentTime(), TimeUnit.MILLISECONDS);<br>
// clock.advanceTime(10, TimeUnit.SECONDS);<br>
</div><div> LOGGER.debug("Inserting " + operation);<br>
FactHandle operationHandle = entryPoint.insert(operation);<br>
LOGGER.debug("Insertion done: " +<br>
operationHandle.toExternalForm());<br>
<br>
}<br>
</div> session.fireAllRules();<br>
<div><br>
LOGGER.info("done with events");<br>
// check...<br>
Assert.assertTrue("Rule not fired...", listener<br>
.isRuleFired("overActivity"));<br>
}<br>
<br>
</div><div>And the logs in the console :<br>
<br>
</div>Console> 2010-05-19 09:57:06|INFO ||DroolsRulesTestCase.testActivity|loading<br>
events<br>
Console> 2010-05-19 09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Moving<br>
<div>clock from Thu Jan 01 01:00:00 CET 1970 to Fri Apr 30 18:26:47 CEST 2010<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Inserting Operation<br>
<div>[date=Fri Apr 30 18:26:47 CEST 2010, executionTime=1, hostname=server1,<br>
ipAddress=1.2.3.4, operation=null, requestSize=0, responseSize=0]<br>
</div>Console> 2010-05-19 09:57:06|WARN<br>
<div>||TrackingWorkingMemoryEventListener.objectInserted|Object inserted: [event<br>
fid:1:1:Operation [date=Fri Apr 30 18:26:47 CEST 2010, executionTime=1,<br>
hostname=server1, ipAddress=1.2.3.4, operation=null, requestSize=0,<br>
responseSize=0]]<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Insertion done: [event<br>
<div>fid:1:1:Operation [date=Fri Apr 30 18:26:47 CEST 2010, executionTime=1,<br>
hostname=server1, ipAddress=1.2.3.4, operation=null, requestSize=0,<br>
responseSize=0]]<br>
</div>Console> 2010-05-19 09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Moving<br>
<div>clock from Fri Apr 30 18:26:47 CEST 2010 to Fri Apr 30 18:27:11 CEST 2010<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Inserting Operation<br>
<div>[date=Fri Apr 30 18:27:11 CEST 2010, executionTime=164, hostname=server1,<br>
ipAddress=1.2.3.4, operation=CONSULTATION, requestSize=1299,<br>
responseSize=895]<br>
</div>Console> 2010-05-19 09:57:06|WARN<br>
<div>||TrackingWorkingMemoryEventListener.objectRetracted|Object retracted:<br>
[event fid:1:1:Operation [date=Fri Apr 30 18:26:47 CEST 2010,<br>
executionTime=1, hostname=server1, ipAddress=1.2.3.4, operation=null,<br>
requestSize=0, responseSize=0]]<br>
</div>Console> 2010-05-19 09:57:06|WARN<br>
<div>||TrackingWorkingMemoryEventListener.objectInserted|Object inserted: [event<br>
fid:2:2:Operation [date=Fri Apr 30 18:27:11 CEST 2010, executionTime=164,<br>
hostname=server1, ipAddress=1.2.3.4, operation=CONSULTATION,<br>
requestSize=1299, responseSize=895]]<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Insertion done: [event<br>
<div>fid:2:2:Operation [date=Fri Apr 30 18:27:11 CEST 2010, executionTime=164,<br>
hostname=server1, ipAddress=1.2.3.4, operation=CONSULTATION,<br>
requestSize=1299, responseSize=895]]<br>
</div>Console> 2010-05-19 09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Moving<br>
<div>clock from Fri Apr 30 18:27:11 CEST 2010 to Fri Apr 30 18:28:47 CEST 2010<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Inserting Operation<br>
<div>[date=Fri Apr 30 18:28:47 CEST 2010, executionTime=1, hostname=server1,<br>
ipAddress=1.2.3.4, operation=null, requestSize=0, responseSize=0]<br>
</div>Console> 2010-05-19 09:57:06|WARN<br>
<div>||TrackingWorkingMemoryEventListener.objectRetracted|Object retracted:<br>
[event fid:2:2:Operation [date=Fri Apr 30 18:27:11 CEST 2010,<br>
executionTime=164, hostname=server1, ipAddress=1.2.3.4,<br>
operation=CONSULTATION, requestSize=1299, responseSize=895]]<br>
</div>Console> 2010-05-19 09:57:06|WARN<br>
<div>||TrackingWorkingMemoryEventListener.objectInserted|Object inserted: [event<br>
fid:3:3:Operation [date=Fri Apr 30 18:28:47 CEST 2010, executionTime=1,<br>
hostname=server1, ipAddress=1.2.3.4, operation=null, requestSize=0,<br>
responseSize=0]]<br>
</div>Console> 2010-05-19<br>
09:57:06|DEBUG||DroolsRulesTestCase.testActivity|Insertion done: [event<br>
<div>fid:3:3:Operation [date=Fri Apr 30 18:28:47 CEST 2010, executionTime=1,<br>
hostname=server1, ipAddress=1.2.3.4, operation=null, requestSize=0,<br>
responseSize=0]]<br>
</div>Console> 2010-05-19 09:57:06|INFO ||DroolsRulesTestCase.testActivity|done<br>
with events<br>
<br>
<div><br>
Strangely, the first operation is retracted when the second one is inserted,<br>
yet, they are not equals()...<br>
<br>
</div>/Xavier<br>
<font color="#888888">--<br>
View this message in context: <a href="http://drools-java-rules-engine.46999.n3.nabble.com/Drools-Fusion-Can-t-detect-2-occurrences-with-sliding-window-tp823141p828505.html" target="_blank">http://drools-java-rules-engine.46999.n3.nabble.com/Drools-Fusion-Can-t-detect-2-occurrences-with-sliding-window-tp823141p828505.html</a><br>
</font><div><div></div><div>Sent from the Drools - User mailing list archive at Nabble.com.<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Xavier<br>