mirror of https://github.com/apache/cloudstack.git
159 lines
4.6 KiB
Java
159 lines
4.6 KiB
Java
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
|
// file except in compliance with the License. Citrix Systems, Inc.
|
|
// reserves all rights not expressly granted by 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.
|
|
//
|
|
// Automatically generated by addcopyright.py at 04/03/2012
|
|
package com.cloud.network.security;
|
|
|
|
import java.util.ArrayList;
|
|
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.hypervisor.Hypervisor.HypervisorType;
|
|
import com.cloud.network.security.LocalSecurityGroupWorkQueue.LocalSecurityGroupWork;
|
|
import com.cloud.network.security.SecurityGroupWork.Step;
|
|
import com.cloud.vm.VMInstanceVO;
|
|
import com.cloud.vm.VirtualMachine.Type;
|
|
import com.cloud.network.security.SecurityRule.SecurityRuleType;
|
|
|
|
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<Long, Date> _scheduleTimestamps = new ConcurrentHashMap<Long, Date>(4000, 100, 64);
|
|
Map<Long, Date> _updateTimestamps = new ConcurrentHashMap<Long, Date>(4000, 100, 64);
|
|
|
|
|
|
protected SecurityManagerMBeanImpl(SecurityGroupManagerImpl2 securityGroupManager) {
|
|
super(SecurityGroupManagerMBean.class, false);
|
|
this._sgMgr = securityGroupManager;
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
public int getQueueSize() {
|
|
return this._sgMgr.getQueueSize();
|
|
}
|
|
|
|
@Override
|
|
public void logUpdateDetails(Long vmId, Long seqno) {
|
|
if (_monitoringEnabled) {
|
|
_updateTimestamps.put(vmId, new Date());
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void logScheduledDetails(Set<Long> vmIds) {
|
|
if (_monitoringEnabled) {
|
|
for (Long vmId : vmIds) {
|
|
_scheduleTimestamps.put(vmId, new Date());
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void enableUpdateMonitor(boolean enable) {
|
|
_monitoringEnabled = enable;
|
|
if (!enable) {
|
|
_updateTimestamps.clear();
|
|
_scheduleTimestamps.clear();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public Map<Long, Date> getScheduledTimestamps() {
|
|
return _scheduleTimestamps;
|
|
}
|
|
|
|
@Override
|
|
public Map<Long, Date> getLastUpdateSentTimestamps() {
|
|
return _updateTimestamps;
|
|
}
|
|
|
|
|
|
@Override
|
|
public List<Long> getVmsInQueue() {
|
|
return _sgMgr.getWorkQueue().getVmsInQueue();
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
public void disableSchedulerForVm(Long vmId) {
|
|
_sgMgr.disableSchedulerForVm(vmId, true);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void enableSchedulerForVm(Long vmId) {
|
|
_sgMgr.disableSchedulerForVm(vmId, false);
|
|
|
|
}
|
|
|
|
@Override
|
|
public Long[] getDisabledVmsForScheduler() {
|
|
return _sgMgr.getDisabledVmsForScheduler();
|
|
}
|
|
|
|
|
|
@Override
|
|
public void enableSchedulerForAllVms() {
|
|
_sgMgr.enableAllVmsForScheduler();
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
public void scheduleRulesetUpdateForVm(Long vmId) {
|
|
List<Long> affectedVms = new ArrayList<Long>(1);
|
|
affectedVms.add(vmId);
|
|
_sgMgr.scheduleRulesetUpdateToHosts(affectedVms, true, null);
|
|
}
|
|
|
|
|
|
@Override
|
|
public void tryRulesetUpdateForVmBypassSchedulerVeryDangerous(Long vmId, Long seqno) {
|
|
LocalSecurityGroupWork work = new LocalSecurityGroupWorkQueue.LocalSecurityGroupWork(vmId, seqno, Step.Scheduled);
|
|
_sgMgr.sendRulesetUpdates(work);
|
|
}
|
|
|
|
@Override
|
|
public void simulateVmStart(Long vmId) {
|
|
//all we need is the vmId
|
|
VMInstanceVO vm = new VMInstanceVO(vmId, 5, "foo", "foo", Type.User, null, HypervisorType.Any, 8, 1, 1, false, false);
|
|
_sgMgr.handleVmStarted(vm);
|
|
}
|
|
|
|
@Override
|
|
public void disableSchedulerEntirelyVeryDangerous(boolean disable) {
|
|
_sgMgr.disableScheduler(disable);
|
|
}
|
|
|
|
@Override
|
|
public boolean isSchedulerDisabledEntirely() {
|
|
return _sgMgr.isSchedulerDisabled();
|
|
}
|
|
|
|
@Override
|
|
public void clearSchedulerQueueVeryDangerous() {
|
|
_sgMgr.clearWorkQueue();
|
|
}
|
|
}
|