All pastes #337283 Raw Edit

Mine

public text v1 · immutable
·published 2007-02-02 18:17 UTC
rendered paste body
Index: opennms-correlation/drools-correlation-engine/src/test/java/org/opennms/netmgt/correlation/drools/DroolsCorrelationEngineTest.java
===================================================================
--- opennms-correlation/drools-correlation-engine/src/test/java/org/opennms/netmgt/correlation/drools/DroolsCorrelationEngineTest.java	(revision 5579)
+++ opennms-correlation/drools-correlation-engine/src/test/java/org/opennms/netmgt/correlation/drools/DroolsCorrelationEngineTest.java	(working copy)
@@ -166,9 +166,6 @@
         
         Thread.sleep(1100);
         
-        // FIXME:This doesnt work unless we wait an extra secode for each flap.  NOT GOOD
-        Thread.sleep(3000);
-        
         m_anticipatedMemorySize = 0;
         
         verify();
Index: opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/Flap.java
===================================================================
--- opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/Flap.java	(revision 5579)
+++ opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/Flap.java	(working copy)
@@ -3,13 +3,13 @@
 import java.util.Date;
 
 public class Flap {
-    Long m_nodeid;
-    String m_ipAddr;
-    String m_svcName;
-    Date m_startTime;
-    Date m_endTime;
-    Integer m_locationMonitor;
-    boolean m_counted;
+    private Long m_nodeid;
+    private String m_ipAddr;
+    private String m_svcName;
+    private Date m_startTime;
+    private Date m_endTime;
+    private Integer m_locationMonitor;
+    private FlapCount m_flapCount = null;
     
     public Flap(Long nodeid, String ipAddr, String svcName, Integer locationMonitor) {
         m_nodeid = nodeid;
@@ -17,7 +17,6 @@
         m_svcName = svcName;
         m_locationMonitor = locationMonitor;
         m_startTime = new Date();
-        m_counted = false;
     }
     
     public Date getEndTime() {
@@ -58,12 +57,14 @@
     }
 
     public boolean isCounted() {
-        return m_counted;
+        return m_flapCount != null;
     }
 
-    public void setCounted(boolean counted) {
-        m_counted = counted;
+    public void setFlapCount(FlapCount flapCount) {
+        m_flapCount = flapCount;
     }
     
-    
+    public void goByeBye() {
+        m_flapCount.decrement();
+    }
 }
Index: opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/FlapCount.java
===================================================================
--- opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/FlapCount.java	(revision 5579)
+++ opennms-correlation/drools-correlation-engine/src/main/java/org/opennms/netmgt/correlation/drools/FlapCount.java	(working copy)
@@ -1,16 +1,22 @@
 package org.opennms.netmgt.correlation.drools;
 
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+import org.drools.spi.KnowledgeHelper;
 
 public class FlapCount {
-    Long m_nodeid;
-    String m_ipAddr;
-    String m_svcName;
-    Integer m_locationMonitor;
+    private final PropertyChangeSupport m_changes = new PropertyChangeSupport(this);
+    
+    private Long m_nodeid;
+    private String m_ipAddr;
+    private String m_svcName;
+    private Integer m_locationMonitor;
     boolean m_alerted;
 
-    Integer m_count;
+    private Integer m_count;
     
-    public FlapCount(Long nodeid, String ipAddr, String svcName, Integer locationMonitor) {
+    private FlapCount(Long nodeid, String ipAddr, String svcName, Integer locationMonitor) {
         m_nodeid = nodeid;
         m_ipAddr = ipAddr;
         m_svcName = svcName;
@@ -19,12 +25,46 @@
         m_alerted = false;
     }
     
+    private FlapCount(Flap flap) {
+        this(flap.getNodeid(), flap.getIpAddr(), flap.getSvcName(), flap.getLocationMonitor());
+        flap.setFlapCount(this);
+    }
+    
+    private FlapCount(Flap flap, KnowledgeHelper helper) {
+        this(flap);
+        helper.assertObject(this, true);
+    }
+    
+    public static void createCountForFlap(Flap flap, KnowledgeHelper helper) {
+        new FlapCount(flap, helper);
+    }
+    
+    public void addPropertyChangeListener(final PropertyChangeListener l) {
+        m_changes.addPropertyChangeListener(l);
+    }
+
+    public void removePropertyChangeListener(final PropertyChangeListener l) {
+        m_changes.removePropertyChangeListener(l);
+    }
+  
+    /*
     public void increment() {
         m_count += 1;
     }
+    */
+    
+    public void add(Flap flap) {
+        Integer oldCount = m_count;
+        m_count += 1;
+        m_changes.firePropertyChange("count", oldCount, m_count);
+
+        flap.setFlapCount(this);
+    }
     
     public void decrement() {
+        Integer oldCount = m_count;
         m_count -= 1;
+        m_changes.firePropertyChange("count", oldCount, m_count);
     }
 
     public Integer getCount() {
Index: opennms-correlation/drools-correlation-engine/src/main/resources/org/opennms/netmgt/correlation/drools/Correlation.drl
===================================================================
--- opennms-correlation/drools-correlation-engine/src/main/resources/org/opennms/netmgt/correlation/drools/Correlation.drl	(revision 5579)
+++ opennms-correlation/drools-correlation-engine/src/main/resources/org/opennms/netmgt/correlation/drools/Correlation.drl	(working copy)
@@ -72,8 +72,7 @@
 		$flap : Flap( $nodeid : nodeid, $ipAddr : ipAddr, $svcName : svcName, $locMon : locationMonitor, endTime != null, counted == false )

 		not FlapCount( nodeid == $nodeid, ipAddr == $ipAddr, svcName == $svcName, locationMonitor == $locMon)

 	then

-		assert( new FlapCount( $nodeid, $ipAddr, $svcName, $locMon ) );

-		$flap.setCounted( true );

+	    FlapCount.createCountForFlap($flap, drools);

 		modify( $flap );

 end

 

@@ -82,9 +81,7 @@
 		$flap : Flap( $nodeid : nodeid, $ipAddr : ipAddr, $svcName : svcName, $locMon : locationMonitor, endTime != null, counted == false )

 		$flapCount : FlapCount( nodeid == $nodeid, ipAddr == $ipAddr, svcName == $svcName, locationMonitor == $locMon )

 	then

-		$flapCount.increment();

-		modify( $flapCount );

-		$flap.setCounted( true );

+		$flapCount.add( $flap );

 		modify( $flap );

 end

 

@@ -93,18 +90,19 @@
 rule "retract expired flaps"

 	duration 1000

 	when

-		$flap : Flap( $nodeid : nodeid, $ipAddr : ipAddr, $svcName : svcName, $locMon : locationMonitor )

-		$flapCount : FlapCount( nodeid == $nodeid, ipAddr == $ipAddr, svcName == $svcName, locationMonitor == $locMon )

+		$flap : Flap()

 	then

-		$flapCount.decrement();

-		if ( $flapCount.getCount() == 0 ) {

-			retract( $flapCount );

-		} else {

-			modify( $flapCount );

-		}

+		$flap.goByeBye();

 		retract( $flap );

 end

 

+rule "flap count 0"

+    when

+        $flapCount : FlapCount( count == 0 )

+    then

+    	retract( $flapCount );

+end

+

 rule "flap count exceeded"

 	when

 		$flapCount : FlapCount( $nodeid : nodeid, $ipAddr : ipAddr, $svcName : svcName, $locMon : locationMonitor, alerted == false, count >= ( flapCount ) )