blob: 7b768ab933272e73176a959e5a3c93d4fd3c7763 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with 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.
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;
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, 1, false, false, null);
_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();
}
}