I'll preface this by saying this may not be the correct way to do this, so
suggestions welcome...
For this example, the name can be something like 'collector1', 'collector2'.
For each collector, there are normalized stats, like 'CPU', 'IO', etc.
pre
// Imports and other stuff
declare InstanceHealth
@role(event)
@expires(10s)
@timestamp(timeStamp)
end
rule Iostats above 90 over 5 seconds
when
$mih:InstanceHealth($id:id, $luid:name, $stat:stat )
from entry-point stat-stream
$measure : Number( doubleValue 90 )
from accumulate(
InstanceHealth( $inst:name==$luid, $value:value,
stat==$stat)
over window:time( 5s ) from entry-point stat-stream,
average($value))
then
logger.warn( Average-- );
logger.warn( $mih.hashCode() + // +$stat + // +$id+ :
+$luid + == +$measure );
// doStuff based upon the name and stat
end
rule Log instance
when
$m:InstanceHealth($id:id, $stat:stat, $inst:name, $v:value )
from entry-point stat-stream
then
logger.warn( Instance-- );
logger.warn( --+$inst+ == +$stat + value = +$v );
end
/pre
So the 'Iostats above 90 over 5 seconds' rule is trying to match up stats
with collectors so there are no cross-products (stats aren't accumulated
across collectors and each stat type gets it's own evaluation). This
actually seems to be working, except the InstanceHealth objects don't seem
to be being evicted and I'm apparently getting multiple activations (?).
Note when I remove the line w/ the $mih binding, things get evicted fine but
I don't have access to the name, stat, etc. TIA.
A snippet of a log (I can confirm that three different iostats were inserted
for collector2)
==[ObjectInsertedEventImpl:
getFactHandle()=1:19:1003982845:1003982845:19:stat-stream,
getObject()=com.poc.mediator.domain.InstanceHealth : null,
getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@30a2268a,
getPropagationContext()=PropagationContextImpl [activeActivations=0,
dormantActivations=15, entryPoint=EntryPoint::stat-stream,
factHandle=1:19:1003982845:1003982845:19:stat-stream, leftTuple=null,
originOffset=-1, propagationNumber=13, rule=null, type=0]]
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
Average--
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
1302111244 // iostats // null : collector2 == 91.0
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
Average--
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
158787804 // iostats // null : collector2 == 91.0
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
Average--
2011-09-23 11:35:16,004 [Rule-Execution-Thread] WARN WorkingMemory -
1785305512 // iostats // null : collector2 == 91.0
==[ObjectInsertedEventImpl:
getFactHandle()=1:21:1340153218:1340153218:21:stat-stream,
getObject()=com.poc.mediator.domain.InstanceHealth : null,
getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@30a2268a,
getPropagationContext()=PropagationContextImpl [activeActivations=0,
dormantActivations=20, entryPoint=EntryPoint::stat-stream,
factHandle=1:21:1340153218:1340153218:21:stat-stream, leftTuple=null,
originOffset=-1, propagationNumber=16, rule=null, type=0]]
2011-09-23 11:35:16,100 [Insertion Thread] INFO
mediator.RulesExecutionService - inserting
com.poc.mediator.domain.InstanceHealth : null...
2011-09-23 11:35:16,101 [Insertion Thread] WARN
mediator.RulesExecutionService -
lt;org.drools.event.rule.impl.ObjectInsertedEventImpl@1dddec9e
factHandle=1:21:1340153218:1340153218:21:stat-stream
object=com.poc.mediator.domain.InstanceHealth : null
kruntime=org.drools.impl.StatefulKnowledgeSessionImpl@30a2268a
propagationContext=PropagationContextImpl [activeActivations=0,
dormantActivations=20, entryPoint=EntryPoint::stat-stream,
factHandle=1:21:1340153218:1340153218:21:stat-stream, leftTuple=null,
originOffset=-1, propagationNumber=16, rule=null, type=0]gt;
2011-09-23 11:35:16,101 [Insertion Thread] INFO
mediator.RulesExecutionService - ...done inserting
lt;com.poc.mediator.domain.InstanceHealth@4fe11d82 timeStamp=Fri Sep 23
11:35:16 CDT 2011 stat=cpu value=88.0 id=null version=null
Instance=com.poc.mediator.domain.Instance : nullgt;
2011-09-23 11:35:16,108 [Insertion Thread] INFO
mediator.RulesExecutionService - inserting
com.poc.mediator.domain.InstanceHealth : null...
2011-09-23 11:35:16,109 [Insertion Thread] WARN
mediator.RulesExecutionService -
lt;org.drools.event.rule.impl.ObjectInsertedEventImpl@56300388
factHandle=1:23:1092542236:1092542236:23:stat-stream