AgendaTimerListner

    public static void main(final String[] args) throws Exception {
        try {
            PackageBuilder builder = new PackageBuilder();
            builder.addPackageFromDrl( new InputStreamReader( WaltzBenchmark.class.getResourceAsStream( "xxx.drl" ) ) );
            Package pkg = builder.getPackage();
            
            final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
            ruleBase.addPackage( pkg );        
       
            WorkingMemory workingMemory = ruleBase.newWorkingMemory();
            final PrintStream out = new PrintStream(new BufferedOutputStream( new FileOutputStream( "stats.log" ) ) );
            workingMemory.addEventListener( new DefaultAgendaEventListener() {

                public void activationCancelled(ActivationCancelledEvent activation) {                    
                    String name  = activation.getActivation().getRule().getName();
                    Integer integer = ( Integer ) cancelled.get( name );
                    if ( integer == null ) {
                        integer = new Integer( 0 );
                    }
                    integer  = new Integer( integer.intValue() + 1 );
                    cancelled.put( name, integer );                                      
                }

                public void activationCreated(ActivationCreatedEvent activation) {
                    String name  = activation.getActivation().getRule().getName();
                    Integer integer = ( Integer ) created.get( name );
                    if ( integer == null ) {
                        integer = new Integer( 0 );
                    }
                    integer  = new Integer( integer.intValue() + 1 );
                    created.put( name, integer );                    
                }

                public void afterActivationFired(AfterActivationFiredEvent activation) {
                    String name  = activation.getActivation().getRule().getName();
                    Integer integer = ( Integer ) fired.get( name );
                    if ( integer == null ) {
                        integer = new Integer( 0 );
                    }
                    integer  = new Integer( integer.intValue() + 1 );
                    fired.put( name, integer );
                    
                    out.println( timings.getRule() + "  : " + ( System.currentTimeMillis() - timings.getTime() ) ); 
                    timings.setRule( name );
                    timings.setTime( System.currentTimeMillis() );
                }
                
            } );
                        
            long start = System.currentTimeMillis();
            workingMemory.fireAllRules();
            System.out.println( (System.currentTimeMillis() - start) / 1000 );
                        
            out.println("-------------------");
            out.println( "created" );
            int total = 0;
            for ( Iterator it = created.entrySet().iterator(); it.hasNext(); ) {
                Entry entry = ( Entry ) it.next();
                out.println(  entry.getKey() + " : " + entry.getValue() );
                total = total + ( ( Integer )entry.getValue() ).intValue();
            }                  
            out.println( "total : " + total );
            out.println("-------------------");
            out.println( "cancelled" );
            total = 0;
            for ( Iterator it = cancelled.entrySet().iterator(); it.hasNext(); ) {
                Entry entry = ( Entry ) it.next();
                out.println(  entry.getKey() + " : " + entry.getValue() );
                total = total + ( ( Integer )entry.getValue() ).intValue();
            }
            out.println( "total : " + total );
            out.println("-------------------");
            out.println( "fired" );
            total = 0;
            for ( Iterator it = fired.entrySet().iterator(); it.hasNext(); ) {
                Entry entry = ( Entry ) it.next();
                out.println(  entry.getKey() + " : " + entry.getValue() );
                total = total + ( ( Integer )entry.getValue() ).intValue();
            }      
            out.println( "total : " + total );
            out.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

        
    static class RuleTimings {
        String rule;
        long time;
        public String getRule() {
            return this.rule;
        }
        public void setRule(String rule) {
            this.rule = rule;
        }
        public long getTime() {
            return this.time;
        }
        public void setTime(long time) {
            this.time = time;
        }                
    }    

 

 

Referenced by: