diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 870c7e7f1f4..9a264a50e82 100644 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -63,10 +63,8 @@ import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.User; -import com.cloud.vm.ConsoleProxy; import com.cloud.vm.Nic; import com.cloud.vm.NicSecondaryIp; -import com.cloud.vm.SecondaryStorageVm; import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.config.Configuration; import org.apache.cloudstack.usage.Usage; @@ -557,13 +555,13 @@ public class EventTypes { entityEventDetails.put(EVENT_ROUTER_HA, VirtualRouter.class); entityEventDetails.put(EVENT_ROUTER_UPGRADE, VirtualRouter.class); - entityEventDetails.put(EVENT_PROXY_CREATE, ConsoleProxy.class); - entityEventDetails.put(EVENT_PROXY_DESTROY, ConsoleProxy.class); - entityEventDetails.put(EVENT_PROXY_START, ConsoleProxy.class); - entityEventDetails.put(EVENT_PROXY_STOP, ConsoleProxy.class); - entityEventDetails.put(EVENT_PROXY_REBOOT, ConsoleProxy.class); - entityEventDetails.put(EVENT_ROUTER_HA, ConsoleProxy.class); - entityEventDetails.put(EVENT_PROXY_HA, ConsoleProxy.class); + entityEventDetails.put(EVENT_PROXY_CREATE, VirtualMachine.class); + entityEventDetails.put(EVENT_PROXY_DESTROY, VirtualMachine.class); + entityEventDetails.put(EVENT_PROXY_START, VirtualMachine.class); + entityEventDetails.put(EVENT_PROXY_STOP, VirtualMachine.class); + entityEventDetails.put(EVENT_PROXY_REBOOT, VirtualMachine.class); + entityEventDetails.put(EVENT_ROUTER_HA, VirtualMachine.class); + entityEventDetails.put(EVENT_PROXY_HA, VirtualMachine.class); entityEventDetails.put(EVENT_VNC_CONNECT, "VNC"); entityEventDetails.put(EVENT_VNC_DISCONNECT, "VNC"); @@ -668,12 +666,12 @@ public class EventTypes { entityEventDetails.put(EVENT_ISO_UPLOAD, "Iso"); // SSVM - entityEventDetails.put(EVENT_SSVM_CREATE, SecondaryStorageVm.class); - entityEventDetails.put(EVENT_SSVM_DESTROY, SecondaryStorageVm.class); - entityEventDetails.put(EVENT_SSVM_START, SecondaryStorageVm.class); - entityEventDetails.put(EVENT_SSVM_STOP, SecondaryStorageVm.class); - entityEventDetails.put(EVENT_SSVM_REBOOT, SecondaryStorageVm.class); - entityEventDetails.put(EVENT_SSVM_HA, SecondaryStorageVm.class); + entityEventDetails.put(EVENT_SSVM_CREATE, VirtualMachine.class); + entityEventDetails.put(EVENT_SSVM_DESTROY, VirtualMachine.class); + entityEventDetails.put(EVENT_SSVM_START, VirtualMachine.class); + entityEventDetails.put(EVENT_SSVM_STOP, VirtualMachine.class); + entityEventDetails.put(EVENT_SSVM_REBOOT, VirtualMachine.class); + entityEventDetails.put(EVENT_SSVM_HA, VirtualMachine.class); // Service Offerings entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index 5754ec50108..2a2e16dd0bd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -114,4 +114,9 @@ public class DeleteAccountCmd extends BaseAsyncCmd { public ApiCommandJobType getInstanceType() { return ApiCommandJobType.Account; } + + @Override + public Long getInstanceId() { + return id; + } } diff --git a/api/src/org/apache/cloudstack/context/CallContext.java b/api/src/org/apache/cloudstack/context/CallContext.java index 73da826155e..2619f4a2e2c 100644 --- a/api/src/org/apache/cloudstack/context/CallContext.java +++ b/api/src/org/apache/cloudstack/context/CallContext.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Stack; import java.util.UUID; +import com.cloud.projects.Project; import org.apache.log4j.Logger; import org.apache.log4j.NDC; @@ -59,6 +60,7 @@ public class CallContext { private User user; private long userId; private final Map context = new HashMap(); + private Project project; static EntityManager s_entityMgr; @@ -314,6 +316,14 @@ public class CallContext { this.eventDescription = eventDescription; } + public Project getProject() { + return this.project; + } + + public void setProject(Project project) { + this.project = project; + } + /** * Whether to display the event to the end user. * @return true - if the event is to be displayed to the end user, false otherwise. diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 50ddc5915ca..2a87bf5eb72 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -2083,6 +2083,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra }); CallContext.current().setEventDetails("Network Id: " + network.getId()); + CallContext.current().putContextParameter(Network.class, network.getUuid()); return network; } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 0dc11643ba9..73755883697 100644 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -21,6 +21,8 @@ import java.util.Map; import javax.annotation.PostConstruct; import javax.inject.Inject; +import com.cloud.projects.Project; +import com.cloud.utils.db.EntityManager; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.ControlledEntity; @@ -54,6 +56,9 @@ public class ApiDispatcher { @Inject AccountManager _accountMgr; + @Inject + EntityManager _entityMgr; + @Inject() protected DispatchChainFactory dispatchChainFactory; @@ -102,6 +107,10 @@ public class ApiDispatcher { final CallContext ctx = CallContext.current(); ctx.setEventDisplayEnabled(cmd.isDisplay()); + if(params.get(ApiConstants.PROJECT_ID) != null) { + Project project = _entityMgr.findByUuidIncludingRemoved(Project.class, params.get(ApiConstants.PROJECT_ID)); + ctx.setProject(project); + } // TODO This if shouldn't be here. Use polymorphism and move it to validateSpecificParameters if (cmd instanceof BaseAsyncCmd) { diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 4da8b1e1be8..1459dc28325 100644 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -277,11 +277,10 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer } } // For some reason, the instanceType / instanceId are not abstract, which means we may get null values. - org.apache.cloudstack.framework.events.Event event = new org.apache.cloudstack.framework.events.Event( - "management-server", - EventCategory.ASYNC_JOB_CHANGE_EVENT.getName(), - jobEvent, - (job.getInstanceType() != null ? job.getInstanceType().toString() : "unknown"), null); + String instanceType = job.getInstanceType() != null ? job.getInstanceType() : "unknown"; + String instanceUuid = job.getInstanceId() != null ? ApiDBUtils.findJobInstanceUuid(job) : ""; + org.apache.cloudstack.framework.events.Event event = new org.apache.cloudstack.framework.events.Event("management-server", EventCategory.ASYNC_JOB_CHANGE_EVENT.getName(), + jobEvent, instanceType, instanceUuid); Map eventDescription = new HashMap(); eventDescription.put("command", job.getCmd()); @@ -289,8 +288,8 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer eventDescription.put("account", jobOwner.getUuid()); eventDescription.put("processStatus", "" + job.getProcessStatus()); eventDescription.put("resultCode", "" + job.getResultCode()); - eventDescription.put("instanceUuid", (job.getInstanceId() != null ? ApiDBUtils.findJobInstanceUuid(job) : "" ) ); - eventDescription.put("instanceType", (job.getInstanceType() != null ? job.getInstanceType().toString() : "unknown")); + eventDescription.put("instanceUuid", instanceUuid); + eventDescription.put("instanceType", instanceType); eventDescription.put("commandEventType", cmdEventType); eventDescription.put("jobId", job.getUuid()); eventDescription.put("jobResult", job.getResult()); @@ -638,7 +637,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer params.put("id", objectId.toString()); Class entityClass = EventTypes.getEntityClassForEvent(createCmd.getEventType()); if (entityClass != null) - ctx.putContextParameter(entityClass.getName(), objectUuid); + ctx.putContextParameter(entityClass, objectUuid); } else { // Extract the uuid before params are processed and id reflects internal db id objectUuid = params.get(ApiConstants.ID); diff --git a/server/src/com/cloud/api/dispatch/ParamProcessWorker.java b/server/src/com/cloud/api/dispatch/ParamProcessWorker.java index eb3b77a5fa5..3c81ff6b46c 100644 --- a/server/src/com/cloud/api/dispatch/ParamProcessWorker.java +++ b/server/src/com/cloud/api/dispatch/ParamProcessWorker.java @@ -410,7 +410,7 @@ public class ParamProcessWorker implements DispatchWorker { if (internalId != null){ // Populate CallContext for each of the entity. for (final Class entity : entities) { - CallContext.current().putContextParameter(entity.getName(), internalId); + CallContext.current().putContextParameter(entity, internalId); } return internalId; } @@ -434,7 +434,7 @@ public class ParamProcessWorker implements DispatchWorker { } // Return on first non-null Id for the uuid entity if (internalId != null){ - CallContext.current().putContextParameter(entity.getName(), uuid); + CallContext.current().putContextParameter(entity, uuid); break; } } diff --git a/server/src/com/cloud/event/ActionEventInterceptor.java b/server/src/com/cloud/event/ActionEventInterceptor.java index 5d2d51a102a..d2dacd98a42 100644 --- a/server/src/com/cloud/event/ActionEventInterceptor.java +++ b/server/src/com/cloud/event/ActionEventInterceptor.java @@ -84,7 +84,7 @@ public class ActionEventInterceptor implements ComponentMethodInterceptor, Metho for (ActionEvent actionEvent : getActionEvents(method)) { CallContext ctx = CallContext.current(); long userId = ctx.getCallingUserId(); - long accountId = ctx.getCallingAccountId(); + long accountId = ctx.getProject() != null ? ctx.getProject().getProjectAccountId() : ctx.getCallingAccountId(); //This should be the entity owner id rather than the Calling User Account Id. long startEventId = ctx.getStartEventId(); String eventDescription = getEventDescription(actionEvent, ctx); String eventType = getEventType(actionEvent, ctx); diff --git a/server/src/com/cloud/event/ActionEventUtils.java b/server/src/com/cloud/event/ActionEventUtils.java index 2ac43036c34..0ca41cc3a73 100644 --- a/server/src/com/cloud/event/ActionEventUtils.java +++ b/server/src/com/cloud/event/ActionEventUtils.java @@ -37,7 +37,6 @@ import org.apache.cloudstack.framework.events.EventBus; import org.apache.cloudstack.framework.events.EventBusException; import com.cloud.configuration.Config; -import com.cloud.domain.Domain; import com.cloud.event.dao.EventDao; import com.cloud.server.ManagementService; import com.cloud.user.Account; @@ -121,7 +120,7 @@ public class ActionEventUtils { public static void onStartedActionEventFromContext(String eventType, String eventDescription, boolean eventDisplayEnabled) { CallContext ctx = CallContext.current(); long userId = ctx.getCallingUserId(); - long accountId = ctx.getCallingAccountId(); + long accountId = ctx.getProject() != null ? ctx.getProject().getProjectAccountId() : ctx.getCallingAccountId(); //This should be the entity owner id rather than the Calling User Account Id. long startEventId = ctx.getStartEventId(); if (!eventType.equals("")) @@ -204,20 +203,15 @@ public class ActionEventUtils { String entityType = null; String entityUuid = null; CallContext context = CallContext.current(); - Class entityKey = getEntityKey(eventType); - if (entityKey != null){ - //FIXME - Remove this since it should be covered by the else if condition below. - entityUuid = (String)context.getContextParameter(entityKey); - if (entityUuid != null) - entityType = entityKey.getName(); - }else if (EventTypes.getEntityClassForEvent(eventType) != null){ - //Get entity Class(Example - VirtualMachine.class) from the event Type eg. - VM.CREATE - Class entityClass = EventTypes.getEntityClassForEvent(eventType); - + //Get entity Class(Example - VirtualMachine.class) from the event Type eg. - VM.CREATE + Class entityClass = EventTypes.getEntityClassForEvent(eventType); + if (entityClass != null){ //Get uuid from id - if(context.getContextParameter(entityClass.getName()) != null){ + Object param = context.getContextParameter(entityClass); + if(param != null){ try { - entityUuid = getEntityUuid(entityClass, context.getContextParameter(entityClass.getName())); + entityUuid = getEntityUuid(entityClass, param); + entityType = entityClass.getName(); } catch (Exception e){ s_logger.debug("Caught exception while finding entityUUID, moving on"); } @@ -312,22 +306,4 @@ public class ActionEventUtils { } - private static Class getEntityKey(String eventType) - { - // FIXME - Remove this - if (eventType.startsWith("DOMAIN.")) - { - return Domain.class; - } - else if (eventType.startsWith("ACCOUNT.")) - { - return Account.class; - } - else if (eventType.startsWith("USER.")) - { - return User.class; - } - - return null; - } } diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index 510b55ca1a2..95cf68a354a 100644 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -222,6 +222,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager { if (project != null) { CallContext.current().setEventDetails("Project id=" + project.getId()); + CallContext.current().putContextParameter(Project.class, project.getUuid()); } //Increment resource count diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 84830182e35..25071a2b28f 100644 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -3250,7 +3250,6 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } @Override - @ActionEvent(eventType = EventTypes.EVENT_PROXY_REBOOT, eventDescription = "", async = true) public VMInstanceVO rebootSystemVM(final RebootSystemVmCmd cmd) { final VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(cmd.getId(), VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index e8b9a0e0cd7..fb8889f274a 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -777,7 +777,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, } // TODO - Make createSnapshotPolicy - BaseAsyncCreate and remove this. - CallContext.current().putContextParameter(SnapshotPolicy.class.getName(), policy.getUuid()); + CallContext.current().putContextParameter(SnapshotPolicy.class, policy.getUuid()); return policy; } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index ee87ab49623..97eceaf4b43 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1212,7 +1212,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir if (guestNic == null) { throw new CloudRuntimeException("Unable to add NIC to " + vmInstance); } - CallContext.current().putContextParameter(Nic.class.getName(), guestNic.getUuid()); + CallContext.current().putContextParameter(Nic.class, guestNic.getUuid()); s_logger.debug("Successful addition of " + network + " from " + vmInstance); return _vmDao.findById(vmInstance.getId()); }