mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-5742 Add usage event detials for vm state transitions when using custom compute offering.
This commit is contained in:
parent
c3e6444adf
commit
55a9b5d2a2
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue