[jboss-svn-commits] JBL Code SVN: r30786 - in labs/jbossrules/branches/5.0.x: drools-compiler/src/test/java/org/drools and 10 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Dec 21 09:26:40 EST 2009
Author: tirelli
Date: 2009-12-21 09:26:39 -0500 (Mon, 21 Dec 2009)
New Revision: 30786
Added:
labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/
labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/
labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/
labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/
labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
Modified:
labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/branches/5.0.x/pom.xml
Log:
JBRULES: Adding support to session report generation
Added: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,106 @@
+package org.drools.util.debug;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.Cheesery;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
+import org.drools.Worker;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class SessionInspectorTest extends TestCase {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testGetSessionInfo() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_SubNetworks.drl" ),
+ ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_AccumulateWithFromChaining.drl" ),
+ ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_CollectResultsBetaConstraint.drl" ),
+ ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_QueryMemoryLeak.drl" ),
+ ResourceType.DRL );
+
+ assertFalse( kbuilder.getErrors().toString(),
+ kbuilder.hasErrors() );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.setGlobal( "results", new ArrayList<Object>() );
+
+ ksession.insert( new Dimension( 100, 50 ) );
+ ksession.insert( new Dimension( 130, 80 ) );
+ ksession.insert( new Dimension( 50, 40 ) );
+ ksession.insert( new Dimension( 50, 40 ) );
+ Cheesery cheesery = new Cheesery();
+ cheesery.addCheese( new Cheese( "brie", 10 ));
+ cheesery.addCheese( new Cheese( "brie", 10 ));
+ cheesery.addCheese( new Cheese( "brie", 10 ));
+ cheesery.addCheese( new Cheese( "brie", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ cheesery.addCheese( new Cheese( "stilton", 10 ));
+ ksession.insert( cheesery );
+ ksession.insert( new Person( "Bob", "muzzarella") );
+ ksession.insert( new Person( "Mark", "brie") );
+ ksession.insert( new Cheese( "brie", 10 ) );
+ ksession.insert( new Cheese( "brie", 10 ) );
+ ksession.insert( new Cheese( "brie", 10 ) );
+ ksession.insert( new Cheese( "brie", 10 ) );
+ ksession.insert( new Cheese( "muzzarella", 10 ) );
+ ksession.insert( new Cheese( "muzzarella", 10 ) );
+ ksession.insert( new Cheese( "muzzarella", 10 ) );
+ ksession.insert( new Cheese( "muzzarella", 10 ) );
+ ksession.insert( new Cheese( "Stilton", 10 ) );
+ ksession.insert( new Cheese( "Stilton", 10 ) );
+ ksession.insert( new Cheese( "Stilton", 10 ) );
+ ksession.insert( new Double( 10 ) );
+ ksession.insert( new Double( 11 ) );
+ ksession.insert( new Double( 12 ) );
+ ksession.insert( new Double( 13 ) );
+ ksession.insert( new Double( 14 ) );
+ ksession.insert( new Integer( 15 ) );
+ ksession.insert( new Integer( 16 ) );
+ ksession.insert( new Integer( 17 ) );
+ ksession.insert( new Integer( 18 ) );
+ org.drools.runtime.rule.FactHandle handle = ksession.insert( new Worker( ) );
+
+ ksession.retract( handle );
+
+ SessionInspector inspector = new SessionInspector( ksession );
+
+ StatefulKnowledgeSessionInfo info = inspector.getSessionInfo();
+
+ String report = SessionReporter.generateReport( "simple", info, null );
+
+ System.out.println(report);
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
___________________________________________________________________
Name: svn:executable
+ *
Modified: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl 2009-12-21 14:26:39 UTC (rev 30786)
@@ -1,6 +1,6 @@
package org.drools;
-import java.awt.*;
+import java.awt.Dimension;
rule "A"
when
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -2,7 +2,6 @@
import java.util.Iterator;
-import org.drools.runtime.ObjectFilter;
import org.drools.runtime.rule.FactHandle;
public interface ObjectStore {
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -600,10 +600,6 @@
other.resultConstraints );
}
- public String toString() {
- return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
- }
-
/**
* Creates a BetaMemory for the BetaNode's memory.
*/
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -301,7 +301,7 @@
}
public String toString() {
- return "";
+ return "[ " + this.getClass().getSimpleName() + "(" + this.id + ") ]";
}
public void dumpMemory(final InternalWorkingMemory workingMemory) {
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -497,10 +497,6 @@
other.resultConstraints );
}
- public String toString() {
- return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
- }
-
/**
* Creates a BetaMemory for the BetaNode's memory.
*/
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -228,52 +228,6 @@
public void retractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- // final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
- // if ( !memory.getRightTupleMemory().remove( handle ) ) {
- // return;
- // }
- //
- // final Iterator it = memory.getLeftTupleMemory().iterator( handle );
- // this.constraints.updateFromFactHandle( memory.getContext(),
- // workingMemory,
- // handle );
- // for ( LeftTuple tuple = (LeftTuple) it.next(); tuple != null; tuple = (LeftTuple) it.next() ) {
- // if ( this.constraints.isAllowedCachedRight( memory.getContext(),
- // tuple ) ) {
- // if ( tuple.getMatch() == handle ) {
- // // reset the match
- // tuple.setMatch( null );
- //
- // // find next match, remember it and break.
- // final Iterator tupleIt = memory.getRightTupleMemory().iterator( tuple );
- // this.constraints.updateFromTuple( memory.getContext(),
- // workingMemory,
- // tuple );
- //
- // for ( FactEntry entry = (FactEntry) tupleIt.next(); entry != null; entry = (FactEntry) tupleIt.next() ) {
- // final InternalFactHandle rightHandle = entry.getFactHandle();
- // if ( this.constraints.isAllowedCachedLeft( memory.getContext(),
- // rightHandle ) ) {
- // tuple.setMatch( rightHandle );
- // break;
- // }
- // }
- //
- // this.constraints.resetTuple( memory.getContext() );
- //
- // // if there is now no new tuple match then propagate assert.
- // if ( tuple.getMatch() == null ) {
- // this.sink.propagateRetractLeftTuple( tuple,
- // context,
- // workingMemory );
- // }
- // }
- //
- // }
- // }
- //
- // this.constraints.resetFactHandle( memory.getContext() );
- // assign now, so we can remove from memory before doing any possible propagations
final RightTuple rootBlocker = (RightTuple) rightTuple.getPrevious();
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
@@ -319,6 +273,7 @@
leftTuple = temp;
}
+ rightTuple.setBlocked( null );
this.constraints.resetTuple( memory.getContext() );
}
@@ -385,11 +340,10 @@
public String toString() {
ObjectSource source = this.rightInput;
- while ( source.getClass() != ObjectTypeNode.class ) {
+ while ( source != null && source.getClass() != ObjectTypeNode.class ) {
source = source.source;
}
-
- return "[ExistsNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
+ return "[ExistsNode("+this.getId()+") - " + ((source != null) ? ((ObjectTypeNode) source).getObjectType() : "<source from a subnetwork>" ) + "]";
}
public short getType() {
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -187,8 +187,6 @@
this.rightParent.setBetaChildren( null );
}
- //this.parent = null;
-
this.blocker = null;
this.rightParent = null;
@@ -385,6 +383,8 @@
// we know the object is never null and always of the type LeftTuple
if ( other == this ) {
return true;
+ } else if( other == null ) {
+ return false;
}
// A LeftTuple is only the same if it has the same hashCode, factId and parent
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -251,6 +251,7 @@
leftTuple = temp;
}
+ rightTuple.setBlocked( null );
this.constraints.resetTuple( memory.getContext() );
}
@@ -305,10 +306,10 @@
public String toString() {
ObjectSource source = this.rightInput;
- while ( !(source instanceof ObjectTypeNode) ) {
+ while ( source != null && !(source instanceof ObjectTypeNode) ) {
source = source.source;
}
- return "[NotNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
+ return "[NotNode("+this.getId()+") - " + ((source != null) ? ((ObjectTypeNode) source).getObjectType() : "<source from a subnetwork>" ) + "]";
}
}
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -213,7 +213,7 @@
.getNodeMemory( this );
// first we clear up the action queued flag
- memory.isQueued().set( false );
+ memory.isQueued().compareAndSet( true, false );
// we limit the propagation to avoid a hang when this queue is never empty
Action next = memory.getNext();
@@ -221,9 +221,8 @@
next.execute( this.sink, workingMemory );
}
- if( memory.hasNext() ) {
+ if( memory.hasNext() && memory.isQueued().compareAndSet( false, true )) {
// add action to the queue again.
- memory.isQueued().set( true );
workingMemory.queueWorkingMemoryAction( this.action );
}
}
@@ -285,6 +284,10 @@
public AtomicBoolean isQueued() {
return isQueued;
}
+
+ public long getSize() {
+ return this.queue.size();
+ }
}
private static abstract class Action implements Externalizable {
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -157,7 +157,7 @@
}
public String toString() {
- return "[QueryTerminalNode: rule=" + this.rule.getName() + "]";
+ return "[QueryTerminalNode("+this.getId()+"): rule=" + this.rule.getName() + "]";
}
public void ruleAttached() {
Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -319,7 +319,7 @@
}
public String toString() {
- return "[RuleTerminalNode: rule=" + this.rule.getName() + "]";
+ return "[RuleTerminalNode("+this.getId()+"): rule=" + this.rule.getName() + "]";
}
public void ruleAttached() {
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,30 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public abstract class AbstractNetworkNodeVisitor
+ implements
+ NetworkNodeVisitor {
+
+ protected AbstractNetworkNodeVisitor() {
+ }
+
+ public void visit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ info.info( this.getClass().getSimpleName() + " - Visiting "+node );
+ DefaultNodeInfo dni = new DefaultNodeInfo( node );
+ info.addNodeInfo( node,
+ dni );
+ doVisit( node,
+ nodeStack,
+ info );
+ }
+
+ protected abstract void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info);
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,36 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.AccumulateNode;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
+
+public class AccumulateNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final AccumulateNodeVisitor INSTANCE = new AccumulateNodeVisitor();
+
+ protected AccumulateNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ AccumulateNode an = (AccumulateNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final AccumulateMemory memory = (AccumulateMemory) info.getSession().getNodeMemory( an );
+
+ ni.setMemoryEnabled( true );
+
+ if( an.isObjectMemoryEnabled() ) {
+ ni.setFactMemorySize( memory.betaMemory.getRightTupleMemory().size() );
+ }
+ if( an.isLeftTupleMemoryEnabled() ) {
+ ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+ ni.setCreatedFactHandles( memory.betaMemory.getCreatedHandles().size() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,22 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public class AlphaNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final AlphaNodeVisitor INSTANCE = new AlphaNodeVisitor();
+
+ protected AlphaNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ ni.setMemoryEnabled( false );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,35 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.BetaNode;
+
+public class BetaNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final BetaNodeVisitor INSTANCE = new BetaNodeVisitor();
+
+ protected BetaNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ BetaNode bn = (BetaNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final BetaMemory memory = (BetaMemory) info.getSession().getNodeMemory( bn );
+
+ ni.setMemoryEnabled( true );
+
+ if( bn.isObjectMemoryEnabled() ) {
+ ni.setFactMemorySize( memory.getRightTupleMemory().size() );
+ }
+ if( bn.isLeftTupleMemoryEnabled() ) {
+ ni.setTupleMemorySize( memory.getLeftTupleMemory().size() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,36 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.CollectNode;
+import org.drools.reteoo.CollectNode.CollectMemory;
+
+public class CollectNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final CollectNodeVisitor INSTANCE = new CollectNodeVisitor();
+
+ protected CollectNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ CollectNode an = (CollectNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final CollectMemory memory = (CollectMemory) info.getSession().getNodeMemory( an );
+
+ ni.setMemoryEnabled( true );
+
+ if( an.isObjectMemoryEnabled() ) {
+ ni.setFactMemorySize( memory.betaMemory.getRightTupleMemory().size() );
+ }
+ if( an.isLeftTupleMemoryEnabled() ) {
+ ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+ ni.setCreatedFactHandles( memory.betaMemory.getCreatedHandles().size() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,22 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public class DefaultNetworkNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final DefaultNetworkNodeVisitor INSTANCE = new DefaultNetworkNodeVisitor();
+
+ protected DefaultNetworkNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ // do nothing for now
+ }
+
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,122 @@
+package org.drools.util.debug;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.common.NetworkNode;
+import org.drools.common.RuleBasePartitionId;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.Rete;
+import org.drools.rule.Rule;
+
+public class DefaultNodeInfo
+ implements
+ NodeInfo {
+
+ private NetworkNode node;
+ private Set<Rule> rules;
+
+ private boolean memoryEnabled = false;
+ private long tupleMemorySize = -1;
+ private long factMemorySize = -1;
+ private long createdFactHandles = -1;
+ private long actionQueueSize = -1;
+
+ public DefaultNodeInfo(NetworkNode node) {
+ this.node = node;
+ this.rules = new HashSet<Rule>();
+ }
+
+ public void assign(Rule rule) {
+ this.rules.add( rule );
+ }
+
+ public Set<Rule> getRules() {
+ return rules;
+ }
+
+ public int getId() {
+ return node.getId();
+ }
+
+ public RuleBasePartitionId getPartitionId() {
+ return node.getPartitionId();
+ }
+
+ public long getTupleMemorySize() {
+ return tupleMemorySize;
+ }
+
+ public void setTupleMemorySize(long leftMemorySize) {
+ this.tupleMemorySize = leftMemorySize;
+ }
+
+ public long getFactMemorySize() {
+ return factMemorySize;
+ }
+
+ public void setFactMemorySize(long rightMemorySize) {
+ this.factMemorySize = rightMemorySize;
+ }
+
+ public long getCreatedFactHandles() {
+ return createdFactHandles;
+ }
+
+ public void setCreatedFactHandles(long createdFactHandles) {
+ this.createdFactHandles = createdFactHandles;
+ }
+
+ public long getActionQueueSize() {
+ return this.actionQueueSize;
+ }
+
+ public void setActionQueueSize(long size) {
+ this.actionQueueSize = size;
+ }
+
+ public NetworkNode getNode() {
+ return node;
+ }
+
+ public boolean isMemoryEnabled() {
+ return memoryEnabled;
+ }
+
+ public void setMemoryEnabled(boolean memoryEnabled) {
+ this.memoryEnabled = memoryEnabled;
+ }
+
+ public Collection<? extends NetworkNode> getSinkList() {
+ if ( node instanceof Rete ) {
+ Rete rete = (Rete) node;
+ return rete.getEntryPointNodes().values();
+ } else if ( node instanceof EntryPointNode ) {
+ EntryPointNode epn = (EntryPointNode) node;
+ return epn.getObjectTypeNodes().values();
+ } else if ( node instanceof ObjectSource ) {
+ List<NetworkNode> result = new ArrayList<NetworkNode>();
+ for ( ObjectSink sink : ((ObjectSource)node).getSinkPropagator().getSinks() ) {
+ result.add( (NetworkNode) sink );
+ }
+ return result;
+ } else if ( node instanceof LeftTupleSource ) {
+ List<NetworkNode> result = new ArrayList<NetworkNode>();
+ LeftTupleSource source = (LeftTupleSource) node;
+ for ( LeftTupleSink sink : source.getSinkPropagator().getSinks() ) {
+ result.add( (NetworkNode) sink );
+ }
+ return result;
+ }
+ return Collections.emptyList();
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,32 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.EvalConditionNode;
+import org.drools.reteoo.EvalConditionNode.EvalMemory;
+
+public class EvalConditionNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final EvalConditionNodeVisitor INSTANCE = new EvalConditionNodeVisitor();
+
+ protected EvalConditionNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ EvalConditionNode ecn = (EvalConditionNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final EvalMemory memory = (EvalMemory) info.getSession().getNodeMemory( ecn );
+
+ ni.setMemoryEnabled( ecn.isLeftTupleMemoryEnabled() );
+
+ if( ecn.isLeftTupleMemoryEnabled() ) {
+ ni.setTupleMemorySize( memory.getLeftTupleMemory().size() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,46 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.FromNode;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.FromNode.FromMemory;
+
+public class FromNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final FromNodeVisitor INSTANCE = new FromNodeVisitor();
+
+ protected FromNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ FromNode fn = (FromNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final FromMemory memory = (FromMemory) info.getSession().getNodeMemory( fn );
+
+ ni.setMemoryEnabled( true );
+
+ if( fn.isLeftTupleMemoryEnabled() ) {
+ ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+
+ long handles = 0;
+ org.drools.util.Iterator it = memory.betaMemory.getLeftTupleMemory().iterator();
+ for ( LeftTuple leftTuple = (LeftTuple) it.next(); leftTuple != null; leftTuple = (LeftTuple) it.next() ) {
+ LeftTuple child = leftTuple.getBetaChildren();
+ while( child != null ) {
+ handles++;
+ child = child.getLeftParentNext();
+ }
+ }
+ ni.setCreatedFactHandles( handles );
+ } else {
+ info.warn( "The left memory for this node is disabled, making it impossible to calculate the number of created handles" );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,28 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.LeftInputAdapterNode;
+import org.drools.util.RightTupleList;
+
+public class LeftInputAdapterNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final LeftInputAdapterNodeVisitor INSTANCE = new LeftInputAdapterNodeVisitor();
+
+ protected LeftInputAdapterNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ LeftInputAdapterNode an = (LeftInputAdapterNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final RightTupleList memory = (RightTupleList) info.getSession().getNodeMemory( an );
+
+ ni.setMemoryEnabled( true );
+ ni.setFactMemorySize( memory.size() );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,13 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public interface NetworkNodeVisitor {
+
+ void visit(NetworkNode parent,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info);
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,62 @@
+package org.drools.util.debug;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.drools.common.NetworkNode;
+import org.drools.common.RuleBasePartitionId;
+import org.drools.rule.Rule;
+
+public interface NodeInfo {
+
+ /**
+ * Returns this node ID
+ * @return
+ */
+ public int getId();
+
+ /**
+ * Returns the partition ID this node belongs to
+ * @return
+ */
+ public RuleBasePartitionId getPartitionId();
+
+ /**
+ * Returns the set of rules this node belongs to
+ * @return
+ */
+ public Set<Rule> getRules();
+
+ /**
+ * Returns the actual node
+ * @return
+ */
+ public NetworkNode getNode();
+
+ /**
+ * Returns true if memory is enabled for this node
+ * @return
+ */
+ public boolean isMemoryEnabled();
+
+ /**
+ * Returns the number of tuples in the tuple memory
+ * @return
+ */
+ public long getTupleMemorySize();
+
+ /**
+ * Returns the number of facts in the fact memory
+ * @return
+ */
+ public long getFactMemorySize();
+
+ /**
+ * Returns the number of infered fact handles created in this node
+ * @return
+ */
+ public long getCreatedFactHandles();
+
+ public Collection<? extends NetworkNode> getSinkList();
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,31 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.util.ObjectHashSet;
+
+public class ObjectTypeNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final ObjectTypeNodeVisitor INSTANCE = new ObjectTypeNodeVisitor();
+
+ protected ObjectTypeNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ ObjectTypeNode otn = (ObjectTypeNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ ni.setMemoryEnabled( otn.isObjectMemoryEnabled() );
+
+ if( otn.isObjectMemoryEnabled() ) {
+ final ObjectHashSet memory = (ObjectHashSet) info.getSession().getNodeMemory( otn );
+ ni.setFactMemorySize( memory.size() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,27 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.reteoo.PropagationQueuingNode.PropagationQueueingNodeMemory;
+
+public class PropagationQueueingNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final PropagationQueueingNodeVisitor INSTANCE = new PropagationQueueingNodeVisitor();
+
+ protected PropagationQueueingNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ PropagationQueuingNode pqn = (PropagationQueuingNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ PropagationQueueingNodeMemory memory = (PropagationQueueingNodeMemory) info.getSession().getNodeMemory( pqn );
+ ni.setMemoryEnabled( true );
+ ni.setActionQueueSize( memory.getSize() );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,34 @@
+package org.drools.util.debug;
+
+import java.util.LinkedList;
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.QueryTerminalNode;
+import org.drools.rule.Rule;
+
+public class QueryTerminalNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final QueryTerminalNodeVisitor INSTANCE = new QueryTerminalNodeVisitor();
+
+ protected QueryTerminalNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ QueryTerminalNode rtn = (QueryTerminalNode) node;
+ Rule rule = rtn.getRule();
+ // first thing, associate all nodes belonging to this rule
+ for( NetworkNode snode : nodeStack ) {
+ info.assign( snode, rule );
+ }
+
+ final LinkedList<?> memory = (LinkedList<?>) info.getSession().getNodeMemory( rtn );
+ final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ ni.setMemoryEnabled( true );
+ ni.setTupleMemorySize( memory.size() );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,29 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.RightInputAdapterNode;
+import org.drools.util.ObjectHashMap;
+
+public class RightInputAdapterNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final RightInputAdapterNodeVisitor INSTANCE = new RightInputAdapterNodeVisitor();
+
+ protected RightInputAdapterNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ RightInputAdapterNode an = (RightInputAdapterNode) node;
+ DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ final ObjectHashMap memory = (ObjectHashMap) info.getSession().getNodeMemory( an );
+
+ ni.setMemoryEnabled( true );
+ ni.setTupleMemorySize( memory.size() );
+ ni.setCreatedFactHandles( memory.size() );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,35 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.RuleTerminalNode.TerminalNodeMemory;
+import org.drools.rule.Rule;
+
+public class RuleTerminalNodeVisitor extends AbstractNetworkNodeVisitor {
+
+ public static final RuleTerminalNodeVisitor INSTANCE = new RuleTerminalNodeVisitor();
+
+ protected RuleTerminalNodeVisitor() {
+ }
+
+ @Override
+ protected void doVisit(NetworkNode node,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ RuleTerminalNode rtn = (RuleTerminalNode) node;
+ Rule rule = rtn.getRule();
+ // first thing, associate all nodes belonging to this rule
+ for( NetworkNode snode : nodeStack ) {
+ info.assign( snode, rule );
+ }
+
+ final TerminalNodeMemory memory = (TerminalNodeMemory) info.getSession().getNodeMemory( rtn );
+ final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+ ni.setMemoryEnabled( true );
+ ni.setTupleMemorySize( memory.getTupleMemory().size() );
+
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2008 Red Hat
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.util.debug;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.AccumulateNode;
+import org.drools.reteoo.AlphaNode;
+import org.drools.reteoo.CollectNode;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.EvalConditionNode;
+import org.drools.reteoo.ExistsNode;
+import org.drools.reteoo.FromNode;
+import org.drools.reteoo.JoinNode;
+import org.drools.reteoo.LeftInputAdapterNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.NotNode;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.reteoo.QueryTerminalNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.RightInputAdapterNode;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * @author etirelli
+ *
+ */
+public class SessionInspector {
+
+ private StatefulKnowledgeSession session;
+ private Map<Class< ? extends NetworkNode>, NetworkNodeVisitor> visitors;
+
+ public SessionInspector(StatefulKnowledgeSession session) {
+ this.session = session;
+ this.visitors = new HashMap<Class< ? extends NetworkNode>, NetworkNodeVisitor>();
+
+ // terminal nodes
+ this.visitors.put( RuleTerminalNode.class,
+ RuleTerminalNodeVisitor.INSTANCE );
+ this.visitors.put( QueryTerminalNode.class,
+ QueryTerminalNodeVisitor.INSTANCE );
+
+ // root node
+ this.visitors.put( Rete.class,
+ DefaultNetworkNodeVisitor.INSTANCE );
+
+ // object source nodes
+ this.visitors.put( EntryPointNode.class,
+ DefaultNetworkNodeVisitor.INSTANCE );
+ this.visitors.put( ObjectTypeNode.class,
+ ObjectTypeNodeVisitor.INSTANCE );
+ this.visitors.put( AlphaNode.class,
+ AlphaNodeVisitor.INSTANCE );
+ this.visitors.put( RightInputAdapterNode.class,
+ RightInputAdapterNodeVisitor.INSTANCE );
+ this.visitors.put( PropagationQueuingNode.class,
+ PropagationQueueingNodeVisitor.INSTANCE );
+
+ // left tuple source nodes
+ this.visitors.put( JoinNode.class,
+ BetaNodeVisitor.INSTANCE );
+ this.visitors.put( NotNode.class,
+ BetaNodeVisitor.INSTANCE );
+ this.visitors.put( ExistsNode.class,
+ BetaNodeVisitor.INSTANCE );
+ this.visitors.put( AccumulateNode.class,
+ AccumulateNodeVisitor.INSTANCE );
+ this.visitors.put( CollectNode.class,
+ CollectNodeVisitor.INSTANCE );
+ this.visitors.put( EvalConditionNode.class,
+ EvalConditionNodeVisitor.INSTANCE );
+ this.visitors.put( FromNode.class,
+ FromNodeVisitor.INSTANCE );
+ this.visitors.put( LeftInputAdapterNode.class,
+ LeftInputAdapterNodeVisitor.INSTANCE );
+
+ }
+
+ public StatefulKnowledgeSessionInfo getSessionInfo() {
+ StatefulKnowledgeSessionInfo info = new StatefulKnowledgeSessionInfo();
+ ReteooWorkingMemory wm = ((StatefulKnowledgeSessionImpl) this.session).session;
+ ReteooRuleBase rulebase = (ReteooRuleBase) wm.getRuleBase();
+
+ info.setSession( wm );
+
+ Stack<NetworkNode> nodeStack = new Stack<NetworkNode>();
+ gatherNodeInfo( rulebase.getRete(),
+ nodeStack,
+ info );
+
+ return info;
+ }
+
+ private void gatherNodeInfo(NetworkNode parent,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ if ( !info.visited( parent ) ) {
+ nodeStack.push( parent );
+ NetworkNodeVisitor visitor = visitors.get( parent.getClass() );
+ if ( visitor != null ) {
+ visitor.visit( parent,
+ nodeStack,
+ info );
+ } else {
+ throw new RuntimeException( "No visitor found for node: " + parent );
+ }
+ visitChildren( parent,
+ nodeStack,
+ info );
+ nodeStack.pop();
+ } else {
+ // if already visited, then assign the same rules to the nodes currently in the stack
+ Set<Rule> rules = info.getNodeInfo( parent ).getRules();
+ for ( NetworkNode snode : nodeStack ) {
+ for ( Rule rule : rules ) {
+ info.assign( snode,
+ rule );
+ }
+ }
+ }
+ }
+
+ protected void visitChildren(NetworkNode parent,
+ Stack<NetworkNode> nodeStack,
+ StatefulKnowledgeSessionInfo info) {
+ if ( parent instanceof Rete ) {
+ Rete rete = (Rete) parent;
+ for ( EntryPointNode sink : rete.getEntryPointNodes().values() ) {
+ gatherNodeInfo( sink,
+ nodeStack,
+ info );
+ }
+ } else if ( parent instanceof EntryPointNode ) {
+ EntryPointNode epn = (EntryPointNode) parent;
+ for ( ObjectTypeNode sink : epn.getObjectTypeNodes().values() ) {
+ gatherNodeInfo( sink,
+ nodeStack,
+ info );
+ }
+ } else if ( parent instanceof ObjectSource ) {
+ ObjectSource source = (ObjectSource) parent;
+ for ( ObjectSink sink : source.getSinkPropagator().getSinks() ) {
+ gatherNodeInfo( sink,
+ nodeStack,
+ info );
+ }
+ } else if ( parent instanceof LeftTupleSource ) {
+ LeftTupleSource source = (LeftTupleSource) parent;
+ for ( LeftTupleSink sink : source.getSinkPropagator().getSinks() ) {
+ gatherNodeInfo( sink,
+ nodeStack,
+ info );
+ }
+ } else if ( parent instanceof RuleTerminalNode || parent instanceof QueryTerminalNode ) {
+ // no children to visit
+ } else {
+ // did we forget any node type?
+ throw new RuntimeException( "ERROR: No idea how to visit childrens of this node: " + parent );
+ }
+ }
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,51 @@
+package org.drools.util.debug;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mvel2.compiler.AbstractParser;
+import org.mvel2.integration.impl.MapVariableResolverFactory;
+import org.mvel2.optimizers.OptimizerFactory;
+import org.mvel2.templates.SimpleTemplateRegistry;
+import org.mvel2.templates.TemplateCompiler;
+import org.mvel2.templates.TemplateRegistry;
+import org.mvel2.templates.TemplateRuntime;
+
+public class SessionReporter {
+
+ protected static final TemplateRegistry REPORT_REGISTRY = new SimpleTemplateRegistry();
+
+ static {
+ OptimizerFactory.setDefaultOptimizer( "reflective" );
+
+ REPORT_REGISTRY.addNamedTemplate( "simple",
+ TemplateCompiler.compileTemplate( SessionReporter.class.getResourceAsStream( "reports.mvel" ),
+ null ) );
+
+ /**
+ * Process these templates
+ */
+ TemplateRuntime.execute( REPORT_REGISTRY.getNamedTemplate( "simple" ),
+ null,
+ REPORT_REGISTRY );
+ }
+
+ public static String generateReport(final String ruleTemplate,
+ final StatefulKnowledgeSessionInfo session,
+ final Map<String, Object> vars) {
+ AbstractParser.setLanguageLevel( 5 );
+
+ Map<String, Object> context = new HashMap<String, Object>();
+ if ( vars != null ) {
+ context.putAll( vars );
+ }
+ context.put( "session",
+ session );
+
+ return (String) TemplateRuntime.execute( REPORT_REGISTRY.getNamedTemplate( ruleTemplate ),
+ null,
+ new MapVariableResolverFactory( context ),
+ REPORT_REGISTRY );
+ }
+
+}
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2008 Red Hat
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.util.debug;
+
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+
+public class StatefulKnowledgeSessionInfo {
+ private ReteooWorkingMemory session;
+ private Map<NetworkNode, DefaultNodeInfo> nodesInfo;
+ private List<String> log;
+
+ private SimpleDateFormat df;
+
+ public StatefulKnowledgeSessionInfo() {
+ nodesInfo = new TreeMap<NetworkNode, DefaultNodeInfo>( new Comparator<NetworkNode>() {
+ public int compare(NetworkNode o1,
+ NetworkNode o2) {
+ return o1.getId() - o2.getId();
+ }
+ } );
+ log = new LinkedList<String>();
+ df = new SimpleDateFormat( "HH:mm:ss.SSS" );
+ }
+
+ public Package[] getPackages() {
+ return this.session.getRuleBase().getPackages();
+ }
+
+ public int getNodeCount() {
+ return ((ReteooRuleBase) this.session.getRuleBase()).getNodeCount();
+ }
+
+ public int getExternalFactCount() {
+ return this.session.getObjectStore().size();
+ }
+
+ public void assign(NetworkNode snode,
+ Rule rule) {
+ DefaultNodeInfo info = this.nodesInfo.get( snode );
+ info.assign( rule );
+ }
+
+ public boolean visited(NetworkNode node) {
+ return this.nodesInfo.containsKey( node );
+ }
+
+ public DefaultNodeInfo getNodeInfo(NetworkNode node) {
+ return this.nodesInfo.get( node );
+ }
+
+ public void addNodeInfo(NetworkNode node,
+ DefaultNodeInfo dni) {
+ this.nodesInfo.put( node,
+ dni );
+ }
+
+ public void info(String msg) {
+ log( msg,
+ " [INFO] - " );
+ }
+
+ public void warn(String msg) {
+ log( msg,
+ " [WARN] - " );
+ }
+
+ public void error(String msg) {
+ log( msg,
+ " [ERRO] - " );
+ }
+
+ private void log(String msg,
+ String lvl) {
+ log.add( df.format( System.currentTimeMillis() ) + lvl + msg );
+ }
+
+ public List<String> getLog() {
+ return log;
+ }
+
+ public Collection< ? extends NodeInfo> getNodeInfos() {
+ return this.nodesInfo.values();
+ }
+
+ public ReteooWorkingMemory getSession() {
+ return session;
+ }
+
+ public void setSession(ReteooWorkingMemory session) {
+ this.session = session;
+ }
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
___________________________________________________________________
Name: svn:executable
+ *
Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel 2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,27 @@
+ at declare{"simple"}
+********************************************************************************************
+ Report for Knowledge Session
+********************************************************************************************
+Next node id : @{session.nodeCount}
+User facts count : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name} rules: @{pkg.rules.length}
+ at end{}
+
+============== Nodes Info ==================
+ @foreach{node : session.nodeInfos}Node: @{node.node}
+ @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize} @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize} @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"} Connects to nodes:
+ @foreach{child : node.sinkList}@{child}
+ @end{}
+ at end{} Rules:
+ @foreach{ rule : node.rules }rule : @{rule.name}
+ @end{}
+ @end{}
+
+============== Execution Log ==================
+ @foreach{msg : session.log}@{msg}
+ @end{}
+ at end{}
+
\ No newline at end of file
Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
___________________________________________________________________
Name: svn:executable
+ *
Modified: labs/jbossrules/branches/5.0.x/pom.xml
===================================================================
--- labs/jbossrules/branches/5.0.x/pom.xml 2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/pom.xml 2009-12-21 14:26:39 UTC (rev 30786)
@@ -547,6 +547,9 @@
<configuration>
<source>1.5</source>
<target>1.5</target>
+ <fork>true</fork>
+ <meminitial>128m</meminitial>
+ <maxmem>512m</maxmem>
</configuration>
</plugin>
<plugin>
More information about the jboss-svn-commits
mailing list