[rules-users] Drools Fusion inconsistencies at increasing event throughputs

Vieri vieri.emiliani at gmail.com
Wed Apr 2 11:39:24 EDT 2014


Mario,
My fault. Here you are the drls:

*Not working *(log #1 in my last mail)
*[This is the drl I included in my first post to the list. The accumulate
occurs in the when clause of the cron based rule.]*

package it.intext.unity.test

import it.intext.unity.test.SynthEvent;

import java.util.Date;

global org.slf4j.Logger logger;

declare SynthEvent   // The class is the same you used in previous tests
    @role( event )
    @timestamp( timestamp )
end

declare EventCounter
@role( event )
@timestamp( timestamp )
id : long
key : String
timestamp : Date
end

// Business rules
rule "Create counter"
    when
    $e : SynthEvent() from entry-point "synth"
    then
    entryPoints["counters"].insert( new EventCounter( $e.getId(), "event",
$e.getTimestamp() ) );
    // if (Math.random() < 0.001) logger.debug("New event: {}", $e.getId());
end

// Metrics

rule "Count epm"
    timer ( cron: 0/10 * * * * ? )
when
    Number( $count : intValue ) from accumulate(
        EventCounter( key == "event" ) over window:time( 60s ) from
entry-point "counters", count(1) )
then
    logger.debug("epm = {}", $count );
end

rule "Count live counters"
    timer ( cron: 0/60 * * * * ? )
when
    Number( $count : intValue ) from accumulate(
        EventCounter( key == "event" ) from entry-point "counters",
count(1) )
then
    logger.debug("Live counters = {}", $count );
end



*Working *(log #3 in my last mail)
*[This is the drl you posted in your reply. Here you can see the
CronTrigger usage. Cron based rule has empty LHS, and RHS inserts a
trigger, accumulate occurs in a standard (not cron based) rule]*

package it.intext.unity.test

import it.intext.unity.test.SynthEvent;

import java.util.Date;

global org.slf4j.Logger logger;

declare SynthEvent
    @role( event )
    @timestamp( timestamp )
end

declare EventCounter
      @role( event )
      @timestamp( timestamp )
      id          : long
      key         : String
      timestamp   : Date
end

declare CronTrigger end

rule "Trigger Metric"
timer ( cron: 0/10 * * * * ? )
when
then
    entryPoints["triggers"].insert( new CronTrigger() );
end

rule "Create counter"
when
$e : SynthEvent() from entry-point "synth"
then
    entryPoints["counters"].insert(new EventCounter( $e.getId(), "event",
$e.getTimestamp() ) );
end

rule "Count epm"
when
    $trigger : CronTrigger() from entry-point "triggers"
    Number( $count : intValue ) from accumulate(
            EventCounter( key == "event" ) over window:time( 60s )from
entry-point "counters", count(1) )
then
    System.out.println("[" + new Date() + "] epm = " + $count );
    retract($trigger);
end



The code used to run the tests is the one we both used in our previous test
session. For details you can mail me directly.
Thanks,
Vieri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140402/2e111a23/attachment-0001.html 


More information about the rules-users mailing list