CLOUDSTACK-5742 Add usage event detials for vm state transitions when using custom compute offering.

This commit is contained in:
Bharat Kumar 2014-01-07 19:54:59 +05:30 committed by Kishan Kavala
parent c3e6444adf
commit 55a9b5d2a2
2 changed files with 32 additions and 13 deletions

View File

@ -371,6 +371,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
@Inject
protected NicDao _nicDao;
@Inject
protected ServiceOfferingDao _offerringDao;
@Inject
protected VpcDao _vpcDao;
@Inject
protected RulesManager _rulesMgr;
@ -1659,7 +1661,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
_itMgr.registerGuru(VirtualMachine.Type.User, this);
VirtualMachine.State.getStateMachine().registerListener(
new UserVmStateListener(_usageEventDao, _networkDao, _nicDao));
new UserVmStateListener(_usageEventDao, _networkDao, _nicDao, _offeringDao));
String value = _configDao.getValue(Config.SetVmInternalNameUsingDisplayName.key());
_instanceNameFlag = (value == null)?false:Boolean.parseBoolean(value);

View File

@ -19,16 +19,20 @@ package com.cloud.vm;
import com.cloud.event.EventCategory;
import com.cloud.event.EventTypes;
import com.cloud.event.UsageEventUtils;
import com.cloud.event.UsageEventVO;
import com.cloud.event.dao.UsageEventDao;
import com.cloud.network.Network;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.server.ManagementServer;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.fsm.StateListener;
import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import org.apache.cloudstack.framework.events.EventBus;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@ -45,14 +49,16 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
@Inject protected UsageEventDao _usageEventDao;
@Inject protected NetworkDao _networkDao;
@Inject protected NicDao _nicDao;
@Inject protected ServiceOfferingDao _offeringDao;
private static final Logger s_logger = Logger.getLogger(UserVmStateListener.class);
protected static EventBus _eventBus = null;
public UserVmStateListener(UsageEventDao usageEventDao, NetworkDao networkDao, NicDao nicDao) {
public UserVmStateListener(UsageEventDao usageEventDao, NetworkDao networkDao, NicDao nicDao, ServiceOfferingDao offeringDao) {
this._usageEventDao = usageEventDao;
this._networkDao = networkDao;
this._nicDao = nicDao;
this._offeringDao = offeringDao;
}
@Override
@ -74,16 +80,11 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
if (VirtualMachine.State.isVmCreated(oldState, event, newState)) {
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
vo.getClass().getName(), vo.getUuid());
generateUsageEvent(vo.getServiceOfferingId(), vo, EventTypes.EVENT_VM_CREATE);
} else if (VirtualMachine.State.isVmStarted(oldState, event, newState)) {
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_START, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
vo.getClass().getName(), vo.getUuid());
generateUsageEvent(vo.getServiceOfferingId(), vo, EventTypes.EVENT_VM_START);
} else if (VirtualMachine.State.isVmStopped(oldState, event, newState)) {
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_STOP, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName(),
vo.getClass().getName(), vo.getUuid());
generateUsageEvent(vo.getServiceOfferingId(), vo, EventTypes.EVENT_VM_STOP);
List<NicVO> nics = _nicDao.listByVmId(vo.getId());
for (NicVO nic : nics) {
NetworkVO network = _networkDao.findById(nic.getNetworkId());
@ -91,13 +92,29 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
vo.getId(), Long.toString(nic.getId()),network.getNetworkOfferingId(), null, 0L, vo.getClass().getName(), vo.getUuid());
}
} else if (VirtualMachine.State.isVmDestroyed(oldState, event, newState)) {
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
vo.getClass().getName(), vo.getUuid());
generateUsageEvent(vo.getServiceOfferingId(), vo, EventTypes.EVENT_VM_DESTROY);
}
return true;
}
private void generateUsageEvent(Long serviceOfferingId,VirtualMachine vm, String eventType){
ServiceOfferingVO serviceOffering = _offeringDao.findById(vm.getId(), serviceOfferingId);
if (!serviceOffering.isDynamic()) {
UsageEventUtils.publishUsageEvent(eventType, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
vm.getHostName(), serviceOffering.getId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
VirtualMachine.class.getName(), vm.getUuid());
}
else {
Map<String, String> customParameters = new HashMap<String, String>();
customParameters.put(UsageEventVO.DynamicParameters.cpuNumber.name(), serviceOffering.getCpu().toString());
customParameters.put(UsageEventVO.DynamicParameters.cpuSpeed.name(), serviceOffering.getSpeed().toString());
customParameters.put(UsageEventVO.DynamicParameters.memory.name(), serviceOffering.getRamSize().toString());
UsageEventUtils.publishUsageEvent(eventType, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
vm.getHostName(), serviceOffering.getId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
VirtualMachine.class.getName(), vm.getUuid(), customParameters);
}
}
private void pubishOnEventBus(String event, String status, VirtualMachine vo, VirtualMachine.State oldState, VirtualMachine.State newState) {
try {