diff --git a/server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java b/server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java index 4b7c3225a33..72676aec212 100644 --- a/server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java +++ b/server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java @@ -198,6 +198,22 @@ public class LocalSecurityGroupWorkQueue implements SecurityGroupWorkQueue { } } + + + @Override + public List getVmsInQueue() { + List vmIds = new ArrayList(); + _lock.lock(); + try { + Iterator iter = _currentWork.iterator(); + while (iter.hasNext()) { + vmIds.add(iter.next().getInstanceId()); + } + } finally { + _lock.unlock(); + } + return vmIds; + } } diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java index 52fd67468d4..9013fb01118 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java @@ -236,8 +236,11 @@ public class SecurityGroupManagerImpl2 extends SecurityGroupManagerImpl{ public int getQueueSize() { return _workQueue.size(); } + + public SecurityGroupWorkQueue getWorkQueue() { + return _workQueue; + } - @Override public boolean configure(String name, Map params) throws ConfigurationException { diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerMBean.java b/server/src/com/cloud/network/security/SecurityGroupManagerMBean.java index 92b302bd1af..5cd1a1f8c23 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManagerMBean.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerMBean.java @@ -17,9 +17,9 @@ */ package com.cloud.network.security; +import java.util.List; import java.util.Map; import java.util.Date; -import com.cloud.utils.Ternary; /** * Allows JMX access @@ -28,8 +28,12 @@ import com.cloud.utils.Ternary; public interface SecurityGroupManagerMBean { void enableUpdateMonitor(boolean enable); - Map> getVmUpdateDetails(); + Map getScheduledTimestamps(); + + Map getLastUpdateSentTimestamps(); int getQueueSize(); + List getVmsInQueue(); + } diff --git a/server/src/com/cloud/network/security/SecurityGroupWorkQueue.java b/server/src/com/cloud/network/security/SecurityGroupWorkQueue.java index 29a592731c2..e6ada37cc71 100644 --- a/server/src/com/cloud/network/security/SecurityGroupWorkQueue.java +++ b/server/src/com/cloud/network/security/SecurityGroupWorkQueue.java @@ -37,4 +37,6 @@ public interface SecurityGroupWorkQueue { int size(); void clear(); + + List getVmsInQueue(); } diff --git a/server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java b/server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java index 0622c30c117..699f43fae7e 100644 --- a/server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java +++ b/server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java @@ -1,19 +1,19 @@ package com.cloud.network.security; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import javax.management.StandardMBean; -import com.cloud.utils.Ternary; - public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityGroupManagerMBean, RuleUpdateLog { SecurityGroupManagerImpl2 _sgMgr; boolean _monitoringEnabled = false; //keep track of last scheduled, last update sent and last seqno sent per vm. Make it available over JMX - Map> _updateDetails = new ConcurrentHashMap>(4000, 100, 64); + Map _scheduleTimestamps = new ConcurrentHashMap(4000, 100, 64); + Map _updateTimestamps = new ConcurrentHashMap(4000, 100, 64); protected SecurityManagerMBeanImpl(SecurityGroupManagerImpl2 securityGroupManager) { @@ -22,10 +22,7 @@ public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityG } - @Override - public Map> getVmUpdateDetails() { - return _updateDetails; - } + @Override public int getQueueSize() { @@ -35,13 +32,7 @@ public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityG @Override public void logUpdateDetails(Long vmId, Long seqno) { if (_monitoringEnabled) { - Ternary detail = _updateDetails.get(vmId); - if (detail == null) { - detail = new Ternary(new Date(), new Date(), seqno); - } - detail.second(new Date()); - detail.third(seqno); - _updateDetails.put(vmId, detail); + _updateTimestamps.put(vmId, new Date()); } } @@ -50,12 +41,7 @@ public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityG public void logScheduledDetails(Set vmIds) { if (_monitoringEnabled) { for (Long vmId : vmIds) { - Ternary detail = _updateDetails.get(vmId); - if (detail == null) { - detail = new Ternary(new Date(), null, 0L); - } - detail.first(new Date()); - _updateDetails.put(vmId, detail); + _scheduleTimestamps.put(vmId, new Date()); } } } @@ -64,8 +50,26 @@ public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityG public void enableUpdateMonitor(boolean enable) { _monitoringEnabled = enable; if (!enable) { - _updateDetails.clear(); + _updateTimestamps.clear(); + _scheduleTimestamps.clear(); } } + + @Override + public Map getScheduledTimestamps() { + return _scheduleTimestamps; + } + + @Override + public Map getLastUpdateSentTimestamps() { + return _updateTimestamps; + } + + + @Override + public List getVmsInQueue() { + return _sgMgr.getWorkQueue().getVmsInQueue(); + } + }