rendered paste bodyIndex: 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 ) )