From 8a0b4397b8602369c33c0fd86fc12656dae6d644 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 11 Feb 2022 13:37:07 +0530 Subject: [PATCH 01/40] schema,server,api: events improvement Add resource ID and resource type to event. Signed-off-by: Abhishek Kumar --- .../java/com/cloud/event/ActionEvent.java | 4 + api/src/main/java/com/cloud/event/Event.java | 4 + .../cloudstack/api/ApiCommandJobType.java | 98 ++++++++++++++++++- .../api/response/EventResponse.java | 19 +++- .../main/java/com/cloud/event/EventVO.java | 24 +++++ .../META-INF/db/schema-41610to41700.sql | 50 ++++++++++ .../guru/BigSwitchBcfGuestNetworkGuru.java | 2 +- .../network/guru/OvsGuestNetworkGuru.java | 14 +-- .../network/guru/VxlanGuestNetworkGuru.java | 9 +- .../main/java/com/cloud/api/ApiServer.java | 2 +- .../com/cloud/api/query/vo/EventJoinVO.java | 14 +++ .../cloud/event/ActionEventInterceptor.java | 24 ++++- .../com/cloud/event/ActionEventUtils.java | 47 +++++---- .../com/cloud/event/dao/EventJoinDaoImpl.java | 20 +++- .../cloud/network/IpAddressManagerImpl.java | 3 +- .../guru/ExternalGuestNetworkGuru.java | 16 +-- .../cloud/network/guru/GuestNetworkGuru.java | 6 +- .../VirtualNetworkApplianceManagerImpl.java | 13 +-- .../cloud/resource/ResourceManagerImpl.java | 4 +- .../RollingMaintenanceManagerImpl.java | 45 +++++---- .../cloud/server/ManagementServerImpl.java | 16 +-- .../storage/snapshot/SnapshotManagerImpl.java | 9 +- .../snapshot/SnapshotSchedulerImpl.java | 8 +- .../com/cloud/user/AccountManagerImpl.java | 5 +- .../java/com/cloud/vm/UserVmManagerImpl.java | 16 +-- .../cloudstack/backup/BackupManagerImpl.java | 7 +- .../download/DirectDownloadManagerImpl.java | 3 +- .../apache/cloudstack/ha/HAManagerImpl.java | 7 +- .../OutOfBandManagementServiceImpl.java | 59 +++++------ .../PowerOperationTask.java | 8 +- .../com/cloud/event/ActionEventUtilsTest.java | 2 +- .../resource/ResourceManagerImplTest.java | 6 +- 32 files changed, 410 insertions(+), 154 deletions(-) diff --git a/api/src/main/java/com/cloud/event/ActionEvent.java b/api/src/main/java/com/cloud/event/ActionEvent.java index 8fe14dd800b9..e72cdd92bf00 100644 --- a/api/src/main/java/com/cloud/event/ActionEvent.java +++ b/api/src/main/java/com/cloud/event/ActionEvent.java @@ -33,4 +33,8 @@ String eventType(); String eventDescription(); + + long resourceId() default -1; + + String resourceType() default ""; } diff --git a/api/src/main/java/com/cloud/event/Event.java b/api/src/main/java/com/cloud/event/Event.java index bd86a7ffadf7..0d1fb11a1b1d 100644 --- a/api/src/main/java/com/cloud/event/Event.java +++ b/api/src/main/java/com/cloud/event/Event.java @@ -33,6 +33,10 @@ public enum State { String getDescription(); + Long getResourceId(); + + String getResourceType(); + Date getCreateDate(); long getUserId(); diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java index 1cac1daba19a..a42eee6b631e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java @@ -16,6 +16,18 @@ // under the License. package org.apache.cloudstack.api; +import org.apache.cloudstack.region.PortableIp; +import org.apache.commons.lang3.StringUtils; + +import com.cloud.network.GuestVlan; +import com.cloud.network.Networks; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.router.VirtualRouter; +import com.cloud.storage.GuestOS; +import com.cloud.storage.GuestOSHypervisor; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.vm.VirtualMachine; + public enum ApiCommandJobType { None, VirtualMachine, @@ -54,5 +66,89 @@ public enum ApiCommandJobType { GuestOs, GuestOsMapping, Network, - Management + Management, + KubernetesCluster; + + public static Class getTypeClass(ApiCommandJobType type) { + switch (type) { + case VirtualMachine: + return VirtualMachine.class; + case DomainRouter: + case InternalLbVm: + return VirtualRouter.class; + case Volume: + return com.cloud.storage.Volume.class; + case ConsoleProxy: + return com.cloud.vm.ConsoleProxy.class; + case Snapshot: + return com.cloud.storage.Snapshot.class; + case Backup: + return org.apache.cloudstack.backup.Backup.class; + case Template: + case Iso: + return VirtualMachineTemplate.class; + case SystemVm: + return com.cloud.vm.SystemVm.class; + case Host: + return com.cloud.host.Host.class; + case StoragePool: + return com.cloud.storage.StoragePool.class; + case ImageStore: + return com.cloud.storage.ImageStore.class; + case IpAddress: + return com.cloud.network.IpAddress.class; + case PortableIpAddress: + return PortableIp.class; + case SecurityGroup: + return com.cloud.network.security.SecurityGroup.class; + case PhysicalNetwork: + return com.cloud.network.PhysicalNetwork.class; + case TrafficType: + return Networks.TrafficType.class; + case PhysicalNetworkServiceProvider: + return com.cloud.network.PhysicalNetworkServiceProvider.class; + case FirewallRule: + return com.cloud.network.rules.FirewallRule.class; + case Account: + return com.cloud.user.Account.class; + case User: + return com.cloud.user.User.class; + case PrivateGateway: + return com.cloud.network.vpc.PrivateGateway.class; + case StaticRoute: + return com.cloud.network.vpc.StaticRoute.class; + case Counter: + return com.cloud.network.as.Counter.class; + case Condition: + return com.cloud.network.as.Condition.class; + case AutoScalePolicy: + return com.cloud.network.as.AutoScalePolicy.class; + case AutoScaleVmProfile: + return com.cloud.network.as.AutoScaleVmProfile.class; + case AutoScaleVmGroup: + return com.cloud.network.as.AutoScaleVmGroup.class; + case GlobalLoadBalancerRule: + return com.cloud.region.ha.GlobalLoadBalancerRule.class; + case LoadBalancerRule: + return LoadBalancingRule.class; + case AffinityGroup: + return org.apache.cloudstack.affinity.AffinityGroup.class; + case DedicatedGuestVlanRange: + return GuestVlan.class; + case GuestOs: + return GuestOS.class; + case GuestOsMapping: + return GuestOSHypervisor.class; + case Network: + return com.cloud.network.Network.class; + } + return null; + } + + public static Class getTypeClass(String type) { + if (StringUtils.isEmpty(type)) { + return null; + } + return getTypeClass(valueOf(type)); + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java index da15434e6d0f..559781855329 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java @@ -18,14 +18,13 @@ import java.util.Date; -import com.google.gson.annotations.SerializedName; - import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.EntityReference; import com.cloud.event.Event; import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; @EntityReference(value = Event.class) @SuppressWarnings("unused") @@ -70,6 +69,14 @@ public class EventResponse extends BaseResponse implements ControlledViewEntityR @Param(description = "the name of the account's domain") private String domainName; + @SerializedName(ApiConstants.RESOURCE_ID) + @Param(description = "the id of the resource") + private String resourceId; + + @SerializedName(ApiConstants.RESOURCE_TYPE) + @Param(description = "the type of the resource") + private String resourceType; + @SerializedName(ApiConstants.CREATED) @Param(description = "the date the event was created") private Date created; @@ -117,6 +124,14 @@ public void setDomainName(String domainName) { this.domainName = domainName; } + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + public void setCreated(Date created) { this.created = created; } diff --git a/engine/schema/src/main/java/com/cloud/event/EventVO.java b/engine/schema/src/main/java/com/cloud/event/EventVO.java index e5cf2a273977..24c3e8cd0641 100644 --- a/engine/schema/src/main/java/com/cloud/event/EventVO.java +++ b/engine/schema/src/main/java/com/cloud/event/EventVO.java @@ -61,6 +61,12 @@ public class EventVO implements Event { @Column(name = "domain_id") private long domainId; + @Column(name = "resource_id") + private long resourceId; + + @Column(name = "resource_type") + private String resourceType; + @Column(name = "level") private String level = LEVEL_INFO; @@ -158,6 +164,24 @@ public void setDomainId(long domainId) { this.domainId = domainId; } + @Override + public Long getResourceId() { + return resourceId; + } + + public void setResourceId(long resourceId) { + this.resourceId = resourceId; + } + + @Override + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + @Override public int getTotalSize() { return totalSize; diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql b/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql index 822cf00e630b..bab2df9bd7b8 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql @@ -643,3 +643,53 @@ CREATE VIEW `cloud`.`domain_router_view` AS `cloud`.`async_job` ON async_job.instance_id = vm_instance.id and async_job.instance_type = 'DomainRouter' and async_job.job_status = 0; + + + +-- Alter event table to add resource_id and resource_type +ALTER TABLE `cloud`.`event` + ADD COLUMN `resource_id` bigint unsigned COMMENT 'ID of the resource associated with the even' AFTER `domain_id`, + ADD COLUMN `resource_type` varchar(32) COMMENT 'Account role in the project (Owner or Regular)' AFTER `resource_id`; + +DROP VIEW IF EXISTS `cloud`.`event_view`; +CREATE VIEW `cloud`.`event_view` AS + SELECT + event.id, + event.uuid, + event.type, + event.state, + event.description, + event.resource_id, + event.resource_type, + event.created, + event.level, + event.parameters, + event.start_id, + eve.uuid start_uuid, + event.user_id, + event.archived, + event.display, + user.username user_name, + account.id account_id, + account.uuid account_uuid, + account.account_name account_name, + account.type account_type, + domain.id domain_id, + domain.uuid domain_uuid, + domain.name domain_name, + domain.path domain_path, + projects.id project_id, + projects.uuid project_uuid, + projects.name project_name + FROM + `cloud`.`event` + INNER JOIN + `cloud`.`account` ON event.account_id = account.id + INNER JOIN + `cloud`.`domain` ON event.domain_id = domain.id + INNER JOIN + `cloud`.`user` ON event.user_id = user.id + LEFT JOIN + `cloud`.`projects` ON projects.project_account_id = event.account_id + LEFT JOIN + `cloud`.`event` eve ON event.start_id = eve.id; diff --git a/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java index 45f4a1fcebad..2472ee553b2d 100644 --- a/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java +++ b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java @@ -205,7 +205,7 @@ public Network implement(Network network, NetworkOffering offering, DeployDestin } implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vnetId)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), - EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnetId + " Network Id: " + network.getId(), 0); + EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnetId + " Network Id: " + network.getId(), null, null, 0); } else { implemented.setBroadcastUri(network.getBroadcastUri()); } diff --git a/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java index 7b0ccdbc07ec..d25a5c7e10e1 100644 --- a/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java +++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java @@ -17,6 +17,12 @@ package com.cloud.network.guru; +import javax.inject.Inject; + +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.deploy.DeployDestination; @@ -45,11 +51,6 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachineProfile; -import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; @Component public class OvsGuestNetworkGuru extends GuestNetworkGuru { @@ -228,7 +229,8 @@ protected void allocateVnet(Network network, NetworkVO implemented, EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " - + network.getId(), 0); + + network.getId(), + null, null, 0); } else { implemented.setBroadcastUri(network.getBroadcastUri()); } diff --git a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java index 8a45f754fddc..d2713200ec30 100644 --- a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java +++ b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java @@ -17,6 +17,10 @@ package com.cloud.network.guru; +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.deploy.DeployDestination; @@ -39,9 +43,6 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachineProfile; -import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; @Component public class VxlanGuestNetworkGuru extends GuestNetworkGuru { @@ -102,7 +103,7 @@ protected void allocateVnet(Network network, NetworkVO implemented, long dcId, l protected void allocateVnetComplete(Network network, NetworkVO implemented, long dcId, long physicalNetworkId, String reservationId, String vnet) { //TODO(VXLAN): Add new event type for vxlan? ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, - "Assigned Zone vNet: " + vnet + " Network Id: " + network.getId(), 0); + "Assigned Zone vNet: " + vnet + " Network Id: " + network.getId(), null, null, 0); } @Override diff --git a/server/src/main/java/com/cloud/api/ApiServer.java b/server/src/main/java/com/cloud/api/ApiServer.java index 91812e655178..c17c8c0771fd 100644 --- a/server/src/main/java/com/cloud/api/ApiServer.java +++ b/server/src/main/java/com/cloud/api/ApiServer.java @@ -724,7 +724,7 @@ private String queueCommand(final BaseCmd cmdObj, final Map para // save the scheduled event final Long eventId = ActionEventUtils.onScheduledActionEvent((callerUserId == null) ? (Long)User.UID_SYSTEM : callerUserId, asyncCmd.getEntityOwnerId(), asyncCmd.getEventType(), - asyncCmd.getEventDescription(), asyncCmd.isDisplay(), startEventId); + asyncCmd.getEventDescription(), asyncCmd.getInstanceId(), asyncCmd.getInstanceType().toString(), asyncCmd.isDisplay(), startEventId); if (startEventId == 0) { // There was no create event before, set current event id as start eventId startEventId = eventId; diff --git a/server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java index 3584038fab0d..9d9c865b7a38 100644 --- a/server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java @@ -95,6 +95,12 @@ public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name = "domain_path") private String domainPath = null; + @Column(name = "resource_id") + private Long resourceId; + + @Column(name = "resource_type") + private String resourceType; + @Column(name = "project_id") private long projectId; @@ -163,6 +169,14 @@ public String getDomainPath() { return domainPath; } + public Long getResourceId() { + return resourceId; + } + + public String getResourceType() { + return resourceType; + } + public long getProjectId() { return projectId; } diff --git a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java index d2dacd98a428..778ac7d8c009 100644 --- a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java +++ b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java @@ -24,6 +24,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.apache.cloudstack.context.CallContext; +import org.apache.commons.lang3.StringUtils; import com.cloud.utils.component.ComponentMethodInterceptor; @@ -73,7 +74,8 @@ public Object interceptStart(Method method, Object target) { String eventType = getEventType(actionEvent, ctx); boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled(); - ActionEventUtils.onStartedActionEventFromContext(eventType, eventDescription, isEventDisplayEnabled); + ActionEventUtils.onStartedActionEventFromContext(eventType, eventDescription, + getEventResourceId(actionEvent), getEventResourceType(actionEvent), isEventDisplayEnabled); } } return event; @@ -96,11 +98,13 @@ public void interceptComplete(Method method, Object target, Object event) { if (actionEvent.create()) { //This start event has to be used for subsequent events of this action startEventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_INFO, eventType, - isEventDisplayEnabled, "Successfully created entity for " + eventDescription); + isEventDisplayEnabled, "Successfully created entity for " + eventDescription, + getEventResourceId(actionEvent), getEventResourceType(actionEvent)); ctx.setStartEventId(startEventId); } else { ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_INFO, eventType, - isEventDisplayEnabled, "Successfully completed " + eventDescription, startEventId); + isEventDisplayEnabled, "Successfully completed " + eventDescription, + getEventResourceId(actionEvent), getEventResourceType(actionEvent), startEventId); } } } @@ -121,11 +125,13 @@ public void interceptException(Method method, Object target, Object event) { if (actionEvent.create()) { long eventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, eventType, - isEventDisplayEnabled, "Error while creating entity for " + eventDescription); + isEventDisplayEnabled, "Error while creating entity for " + eventDescription, + getEventResourceId(actionEvent), getEventResourceType(actionEvent)); ctx.setStartEventId(eventId); } else { ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, eventType, isEventDisplayEnabled, - "Error while " + eventDescription, startEventId); + "Error while " + eventDescription, + getEventResourceId(actionEvent), getEventResourceType(actionEvent), startEventId); } } } @@ -183,4 +189,12 @@ protected String getEventDescription(ActionEvent actionEvent, CallContext ctx) { return eventDescription; } + + protected Long getEventResourceId(ActionEvent actionEvent) { + return actionEvent.resourceId() == -1? null : actionEvent.resourceId(); + } + + protected String getEventResourceType(ActionEvent actionEvent) { + return StringUtils.isEmpty(actionEvent.resourceType()) ? null : actionEvent.resourceType(); + } } diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index b1dd8fdbaa17..140f51ab8f12 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -25,28 +25,27 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; -import com.cloud.utils.ReflectUtil; -import com.cloud.utils.db.EntityManager; import org.apache.cloudstack.api.Identity; -import org.apache.log4j.Logger; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; - import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.events.EventBus; import org.apache.cloudstack.framework.events.EventBusException; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import com.cloud.configuration.Config; import com.cloud.event.dao.EventDao; +import com.cloud.projects.Project; +import com.cloud.projects.dao.ProjectDao; import com.cloud.server.ManagementService; import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.user.User; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; -import com.cloud.projects.dao.ProjectDao; -import com.cloud.projects.Project; +import com.cloud.utils.ReflectUtil; import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.db.EntityManager; public class ActionEventUtils { private static final Logger s_logger = Logger.getLogger(ActionEventUtils.class); @@ -91,11 +90,11 @@ void init() { s_configDao = configDao; } - public static Long onActionEvent(Long userId, Long accountId, Long domainId, String type, String description) { + public static Long onActionEvent(Long userId, Long accountId, Long domainId, String type, String description, Long resourceId, String resourceType) { publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description); - Event event = persistActionEvent(userId, accountId, domainId, null, type, Event.State.Completed, true, description, null); + Event event = persistActionEvent(userId, accountId, domainId, null, type, Event.State.Completed, true, description, resourceId, resourceType, null); return event.getId(); } @@ -103,67 +102,67 @@ public static Long onActionEvent(Long userId, Long accountId, Long domainId, Str /* * Save event after scheduling an async job */ - public static Long onScheduledActionEvent(Long userId, Long accountId, String type, String description, boolean eventDisplayEnabled, long startEventId) { + public static Long onScheduledActionEvent(Long userId, Long accountId, String type, String description, Long resourceId, String resourceType, boolean eventDisplayEnabled, long startEventId) { publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Scheduled, description); - Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Scheduled, eventDisplayEnabled, description, startEventId); + Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Scheduled, eventDisplayEnabled, description, resourceId, resourceType, startEventId); return event.getId(); } - public static void startNestedActionEvent(String eventType, String eventDescription) { + public static void startNestedActionEvent(String eventType, String eventDescription, Long resourceId, String resourceType) { CallContext.setActionEventInfo(eventType, eventDescription); - onStartedActionEventFromContext(eventType, eventDescription, true); + onStartedActionEventFromContext(eventType, eventDescription, resourceId, resourceType, true); } - public static void onStartedActionEventFromContext(String eventType, String eventDescription, boolean eventDisplayEnabled) { + public static void onStartedActionEventFromContext(String eventType, String eventDescription, Long resourceId, String resourceType, boolean eventDisplayEnabled) { CallContext ctx = CallContext.current(); long userId = ctx.getCallingUserId(); 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("")) - ActionEventUtils.onStartedActionEvent(userId, accountId, eventType, eventDescription, eventDisplayEnabled, startEventId); + ActionEventUtils.onStartedActionEvent(userId, accountId, eventType, eventDescription, resourceId, resourceType, eventDisplayEnabled, startEventId); } /* * Save event after starting execution of an async job */ - public static Long onStartedActionEvent(Long userId, Long accountId, String type, String description, boolean eventDisplayEnabled, long startEventId) { + public static Long onStartedActionEvent(Long userId, Long accountId, String type, String description, Long resourceId, String resourceType, boolean eventDisplayEnabled, long startEventId) { publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Started, description); - Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Started, eventDisplayEnabled, description, startEventId); + Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Started, eventDisplayEnabled, description, resourceId, resourceType, startEventId); return event.getId(); } - public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, String description, long startEventId) { + public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, String description, Long resourceId, String resourceType, long startEventId) { - return onCompletedActionEvent(userId, accountId, level, type, true, description, startEventId); + return onCompletedActionEvent(userId, accountId, level, type, true, description, resourceId, resourceType, startEventId); } - public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description, long startEventId) { + public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType, long startEventId) { publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description); - Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Completed, eventDisplayEnabled, description, startEventId); + Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Completed, eventDisplayEnabled, description, resourceId, resourceType, startEventId); return event.getId(); } - public static Long onCreatedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description) { + public static Long onCreatedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType) { publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Created, description); - Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Created, eventDisplayEnabled, description, null); + Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Created, eventDisplayEnabled, description, resourceId, resourceType, null); return event.getId(); } private static Event persistActionEvent(Long userId, Long accountId, Long domainId, String level, String type, - Event.State state, boolean eventDisplayEnabled, String description, Long startEventId) { + Event.State state, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType, Long startEventId) { EventVO event = new EventVO(); event.setUserId(userId); event.setAccountId(accountId); diff --git a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java index 8a78a6934f2b..180424aac0ea 100644 --- a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java @@ -18,16 +18,19 @@ import java.util.List; +import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.response.EventResponse; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import org.apache.cloudstack.api.response.EventResponse; - import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.event.Event; import com.cloud.event.Event.State; +import com.cloud.utils.db.EntityManager; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -43,6 +46,9 @@ public class EventJoinDaoImpl extends GenericDaoBase implemen private SearchBuilder CompletedEventSearch; + @Inject + EntityManager entityMgr; + protected EventJoinDaoImpl() { vrSearch = createSearchBuilder(); @@ -85,7 +91,15 @@ public EventResponse newEventResponse(EventJoinVO event) { responseEvent.setParentId(event.getStartUuid()); responseEvent.setState(event.getState()); responseEvent.setUsername(event.getUserName()); - + Long resourceId = event.getResourceId(); + Class clazz = ApiCommandJobType.getTypeClass(event.getResourceType()); + if (resourceId != null && clazz != null ) { + final Object objVO = entityMgr.findById(clazz, resourceId); + if (objVO instanceof Identity) { + responseEvent.setResourceType(event.getResourceType()); + responseEvent.setResourceId(((Identity)objVO).getUuid()); + } + } ApiResponseHelper.populateOwner(responseEvent, event); responseEvent.setObjectName("event"); return responseEvent; diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 97ef0503b690..88547634b2a7 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -34,6 +34,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse; import org.apache.cloudstack.context.CallContext; @@ -1712,7 +1713,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) { // trigger an action event for the transfer of portable IP across the networks, so that external entities // monitoring for this event can initiate the route advertisement for the availability of IP from the zoe ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_PORTABLE_IP_TRANSFER, - "Portable IP associated is transferred from network " + currentNetworkId + " to " + newNetworkId); + "Portable IP associated is transferred from network " + currentNetworkId + " to " + newNetworkId, newNetworkId, ApiCommandJobType.Network.toString()); } protected List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { diff --git a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java index 5da0952b0d14..c553a9cc3d87 100644 --- a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java +++ b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java @@ -17,6 +17,14 @@ package com.cloud.network.guru; +import java.util.List; + +import javax.inject.Inject; + +import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; +import org.apache.log4j.Logger; + import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.dao.DataCenterDao; @@ -60,12 +68,6 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; -import org.apache.log4j.Logger; - -import javax.inject.Inject; -import java.util.List; public class ExternalGuestNetworkGuru extends GuestNetworkGuru { private static final Logger s_logger = Logger.getLogger(ExternalGuestNetworkGuru.class); @@ -158,7 +160,7 @@ public Network implement(Network config, NetworkOffering offering, DeployDestina implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlanTag)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), config.getAccountId(), EventVO.LEVEL_INFO, - EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), 0); + EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), null, null, 0); } else { vlanTag = Integer.parseInt(BroadcastDomainType.getValue(config.getBroadcastUri())); implemented.setBroadcastUri(config.getBroadcastUri()); diff --git a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java index c1ce99c0606e..eebe041f7724 100644 --- a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java @@ -22,7 +22,6 @@ import javax.inject.Inject; -import com.cloud.network.Network.GuestType; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.ConfigKey; @@ -45,6 +44,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; +import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; @@ -299,7 +299,7 @@ protected void allocateVnet(final Network network, final NetworkVO implemented, } implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vnet)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, - EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), 0); + EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), null, null, 0); } else { implemented.setBroadcastUri(network.getBroadcastUri()); } @@ -455,7 +455,7 @@ public void shutdown(final NetworkProfile profile, final NetworkOffering offerin _dcDao.releaseVnet(BroadcastDomainType.getValue(profile.getBroadcastUri()), profile.getDataCenterId(), profile.getPhysicalNetworkId(), profile.getAccountId(), profile.getReservationId()); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), profile.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_RELEASE, - "Released Zone Vnet: " + BroadcastDomainType.getValue(profile.getBroadcastUri()) + " for Network: " + profile.getId(), 0); + "Released Zone Vnet: " + BroadcastDomainType.getValue(profile.getBroadcastUri()) + " for Network: " + profile.getId(), null, null, 0); } profile.setBroadcastUri(null); diff --git a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index c81f06d0ab99..29b8a9f7d056 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -17,6 +17,8 @@ package com.cloud.network.router; +import static com.cloud.utils.NumbersUtil.toHumanReadableSize; + import java.lang.reflect.Type; import java.math.BigInteger; import java.nio.charset.Charset; @@ -45,9 +47,9 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.offering.DiskOffering; import org.apache.cloudstack.alert.AlertService; import org.apache.cloudstack.alert.AlertService.AlertType; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; @@ -207,6 +209,7 @@ import com.cloud.network.vpc.VpcService; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpn.Site2SiteVpnManager; +import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -272,8 +275,6 @@ import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; -import static com.cloud.utils.NumbersUtil.toHumanReadableSize; - /** * VirtualNetworkApplianceManagerImpl manages the different types of virtual * network appliances available in the Cloud Stack. @@ -1242,7 +1243,7 @@ private void handleFailingChecks(DomainRouterVO router, List failingChec } ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, - Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, failingChecksEvent.toString()); + Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, failingChecksEvent.toString(), router.getId(), ApiCommandJobType.DomainRouter.toString()); if (recreateRouter) { s_logger.warn("Health Check Alert: Found failing checks in " + @@ -1266,7 +1267,7 @@ private boolean restartVpcInDomainRouter(DomainRouterJoinVO router, User user) { s_logger.debug("Attempting restart VPC " + router.getVpcName() + " for router recreation " + router.getUuid()); ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, - "Recreating router " + router.getUuid() + " by restarting VPC " + router.getVpcUuid()); + "Recreating router " + router.getUuid() + " by restarting VPC " + router.getVpcUuid(), router.getId(), ApiCommandJobType.DomainRouter.toString()); return vpcService.restartVpc(router.getVpcId(), true, false, user); } catch (Exception e) { s_logger.error("Failed to restart VPC for router recreation " + @@ -1290,7 +1291,7 @@ private boolean restartGuestNetworkInDomainRouter(DomainRouterJoinVO router, Use s_logger.info("Attempting restart network " + router.getNetworkName() + " for router recreation " + router.getUuid()); ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, - "Recreating router " + router.getUuid() + " by restarting network " + router.getNetworkUuid()); + "Recreating router " + router.getUuid() + " by restarting network " + router.getNetworkUuid(), router.getId(), ApiCommandJobType.DomainRouter.toString()); return networkService.restartNetwork(router.getNetworkId(), true, false, user); } catch (Exception e) { s_logger.error("Failed to restart network " + router.getNetworkName() + diff --git a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java index 70d205ade209..0b4e89694619 100755 --- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java @@ -1319,7 +1319,7 @@ private boolean doMaintain(final long hostId) { throw new CloudRuntimeException(err + e.getMessage()); } - ActionEventUtils.onStartedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventTypes.EVENT_MAINTENANCE_PREPARE, "starting maintenance for host " + hostId, true, 0); + ActionEventUtils.onStartedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventTypes.EVENT_MAINTENANCE_PREPARE, "starting maintenance for host " + hostId, hostId, null, true, 0); _agentMgr.pullAgentToMaintenance(hostId); /* TODO: move below to listener */ @@ -1640,7 +1640,7 @@ protected boolean setHostIntoMaintenance(HostVO host) throws NoTransitionExcepti resourceStateTransitTo(host, ResourceState.Event.InternalEnterMaintenance, _nodeId); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_MAINTENANCE_PREPARE, - "completed maintenance for host " + host.getId(), 0); + "completed maintenance for host " + host.getId(), host.getId(), null, 0); return true; } diff --git a/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java b/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java index f298d257829f..255d08a31f18 100644 --- a/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java @@ -16,6 +16,29 @@ // under the License. package com.cloud.resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.inject.Inject; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.affinity.AffinityGroupProcessor; +import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd; +import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd; +import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.commons.collections.CollectionUtils; +import org.apache.log4j.Logger; + import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.RollingMaintenanceAnswer; @@ -48,26 +71,6 @@ import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.VMInstanceDao; -import org.apache.cloudstack.affinity.AffinityGroupProcessor; -import org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd; -import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; -import org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd; -import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.framework.config.ConfigKey; -import org.apache.commons.collections.CollectionUtils; -import org.apache.log4j.Logger; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; public class RollingMaintenanceManagerImpl extends ManagerBase implements RollingMaintenanceManager { @@ -136,7 +139,7 @@ private void generateReportAndFinishingEvent(StartRollingMaintenanceCmd cmd, boo generateReportHostsUpdated(hostsUpdated), generateReportHostsSkipped(hostsSkipped)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_INFO, cmd.getEventType(), - "Completed rolling maintenance for entity " + entity + " with IDs: " + ids + " - " + description, 0); + "Completed rolling maintenance for entity " + entity + " with IDs: " + ids + " - " + description, null, ApiCommandJobType.Host.toString(), 0); } private String generateReportHostsUpdated(List hostsUpdated) { diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 2780a0dd7a37..2afb86914fac 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -3774,10 +3774,10 @@ public VirtualMachine startSystemVM(final long vmId) { } if (systemVm.getType() == VirtualMachine.Type.ConsoleProxy) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_START, "starting console proxy Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_START, "starting console proxy Vm", vmId, null); return startConsoleProxy(vmId); } else if (systemVm.getType() == VirtualMachine.Type.SecondaryStorageVm) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_START, "starting secondary storage Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_START, "starting secondary storage Vm", vmId, null); return startSecondaryStorageVm(vmId); } else { final InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm with specified vmId"); @@ -3801,10 +3801,10 @@ public VMInstanceVO stopSystemVM(final StopSystemVmCmd cmd) throws ResourceUnava try { if (systemVm.getType() == VirtualMachine.Type.ConsoleProxy) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_STOP, "stopping console proxy Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_STOP, "stopping console proxy Vm", systemVm.getId(), null); return stopConsoleProxy(systemVm, cmd.isForced()); } else if (systemVm.getType() == VirtualMachine.Type.SecondaryStorageVm) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_STOP, "stopping secondary storage Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_STOP, "stopping secondary storage Vm", systemVm.getId(), null); return stopSecondaryStorageVm(systemVm, cmd.isForced()); } return null; @@ -3825,13 +3825,13 @@ public VMInstanceVO rebootSystemVM(final RebootSystemVmCmd cmd) { try { if (systemVm.getType().equals(VirtualMachine.Type.ConsoleProxy)) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_REBOOT, "rebooting console proxy Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_REBOOT, "rebooting console proxy Vm", systemVm.getId(), null); if (cmd.isForced()) { return forceRebootConsoleProxy(systemVm); } return rebootConsoleProxy(cmd.getId()); } else { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_REBOOT, "rebooting secondary storage Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_REBOOT, "rebooting secondary storage Vm", systemVm.getId(), null); if (cmd.isForced()) { return forceRebootSecondaryStorageVm(systemVm); } @@ -3856,10 +3856,10 @@ public VMInstanceVO destroySystemVM(final DestroySystemVmCmd cmd) { } if (systemVm.getType().equals(VirtualMachine.Type.ConsoleProxy)) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_DESTROY, "destroying console proxy Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_DESTROY, "destroying console proxy Vm", systemVm.getId(), null); return destroyConsoleProxy(cmd.getId()); } else { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_DESTROY, "destroying secondary storage Vm"); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_DESTROY, "destroying secondary storage Vm", systemVm.getId(), null); return destroySecondaryStorageVm(cmd.getId()); } } diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index f7ec977c911b..2199b19bbb53 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -31,6 +31,7 @@ import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd; import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd; import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd; @@ -60,7 +61,10 @@ import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao; import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -143,9 +147,6 @@ import com.cloud.vm.snapshot.VMSnapshot; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; -import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; @Component public class SnapshotManagerImpl extends MutualExclusiveIdsManagerBase implements SnapshotManager, SnapshotApiService, Configurable { @@ -554,7 +555,7 @@ private void postCreateRecurringSnapshotForPolicy(long userId, long volumeId, lo if (deleteSnapshot(oldSnapId)) { //log Snapshot delete event ActionEventUtils.onCompletedActionEvent(User.UID_SYSTEM, oldestSnapshot.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_SNAPSHOT_DELETE, - "Successfully deleted oldest snapshot: " + oldSnapId, 0); + "Successfully deleted oldest snapshot: " + oldSnapId, oldSnapId, ApiCommandJobType.Snapshot.toString(), 0); } snaps.remove(oldestSnapshot); } diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index bccf8c68b232..fcddf09f3665 100644 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -27,9 +27,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -38,6 +36,8 @@ import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao; import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO; import org.apache.cloudstack.managed.context.ManagedContextTimerTask; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; @@ -301,7 +301,7 @@ protected void scheduleSnapshots() { tmpSnapshotScheduleVO = _snapshotScheduleDao.acquireInLockTable(snapshotScheId); final Long eventId = ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, volume.getAccountId(), EventTypes.EVENT_SNAPSHOT_CREATE, "creating snapshot for volume Id:" + - volume.getUuid(), true, 0); + volume.getUuid(), volumeId, ApiCommandJobType.Volume.toString(), true, 0); final Map params = new HashMap(); params.put(ApiConstants.VOLUME_ID, "" + volumeId); diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index 88cd217698a3..40a5f82caa13 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -45,6 +45,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.dao.AffinityGroupDao; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd; @@ -2195,7 +2196,7 @@ protected UserVO createUser(long accountId, String userName, String password, St public void logoutUser(long userId) { UserAccount userAcct = _userAccountDao.findById(userId); if (userAcct != null) { - ActionEventUtils.onActionEvent(userId, userAcct.getAccountId(), userAcct.getDomainId(), EventTypes.EVENT_USER_LOGOUT, "user has logged out"); + ActionEventUtils.onActionEvent(userId, userAcct.getAccountId(), userAcct.getDomainId(), EventTypes.EVENT_USER_LOGOUT, "user has logged out", userId, ApiCommandJobType.User.toString()); } // else log some kind of error event? This likely means the user doesn't exist, or has been deleted... } @@ -2334,7 +2335,7 @@ public UserAccount authenticateUser(final String username, final String password s_logger.debug("User: " + username + " in domain " + domainId + " has successfully logged in"); } - ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in from IP Address " + loginIpAddress); + ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in from IP Address " + loginIpAddress, user.getId(), ApiCommandJobType.User.toString()); return user; } else { diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 275f7018b40e..2ca9feac17b0 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.vm; +import static com.cloud.configuration.ConfigurationManagerImpl.VM_USERDATA_MAX_LENGTH; import static com.cloud.utils.NumbersUtil.toHumanReadableSize; import java.io.IOException; @@ -26,6 +27,7 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -50,8 +52,6 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import com.cloud.network.router.CommandSetupHelper; -import com.cloud.network.router.NetworkHelper; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -62,6 +62,7 @@ import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.HTTPMethod; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; @@ -118,6 +119,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; +import org.apache.cloudstack.utils.bytescale.ByteScaleUtils; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -248,6 +250,8 @@ import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.router.CommandSetupHelper; +import com.cloud.network.router.NetworkHelper; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRuleVO; @@ -357,10 +361,6 @@ import com.cloud.vm.snapshot.VMSnapshotManager; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; -import java.util.HashSet; -import org.apache.cloudstack.utils.bytescale.ByteScaleUtils; - -import static com.cloud.configuration.ConfigurationManagerImpl.VM_USERDATA_MAX_LENGTH; public class UserVmManagerImpl extends ManagerBase implements UserVmManager, VirtualMachineGuru, UserVmService, Configurable { private static final Logger s_logger = Logger.getLogger(UserVmManagerImpl.class); @@ -734,7 +734,7 @@ protected void runInContext() { decrementCount = false; ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_NETWORK_EXTERNAL_DHCP_VM_IPFETCH, - "VM " + vmId + " nic id " + nicId + " ip address " + vmIp + " got fetched successfully"); + "VM " + vmId + " nic id " + nicId + " ip address " + vmIp + " got fetched successfully", vmId, ApiCommandJobType.VirtualMachine.toString()); } } } else { @@ -2537,7 +2537,7 @@ protected void runInContext() { ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_NETWORK_EXTERNAL_DHCP_VM_IPFETCH, - "VM " + vmId + " nic id "+ nicId + " ip addr fetch failed "); + "VM " + vmId + " nic id "+ nicId + " ip addr fetch failed ", vmId, ApiCommandJobType.VirtualMachine.toString()); continue; } diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index fd92faa31e60..52709ffbde40 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -31,6 +31,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.backup.DeleteBackupOfferingCmd; import org.apache.cloudstack.api.command.admin.backup.ImportBackupOfferingCmd; @@ -65,6 +66,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.api.ApiDispatcher; @@ -110,7 +112,6 @@ import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.dao.VMInstanceDao; -import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; public class BackupManagerImpl extends ManagerBase implements BackupManager { @@ -924,7 +925,9 @@ public void scheduleBackups() { tmpBackupScheduleVO = backupScheduleDao.acquireInLockTable(backupScheduleId); final Long eventId = ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, vm.getAccountId(), - EventTypes.EVENT_VM_BACKUP_CREATE, "creating backup for VM ID:" + vm.getUuid(), true, 0); + EventTypes.EVENT_VM_BACKUP_CREATE, "creating backup for VM ID:" + vm.getUuid(), + vmId, ApiCommandJobType.VirtualMachine.toString(), + true, 0); final Map params = new HashMap(); params.put(ApiConstants.VIRTUAL_MACHINE_ID, "" + vmId); params.put("ctxUserId", "1"); diff --git a/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java index 8efe8654026e..03f06e48b028 100644 --- a/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java @@ -48,6 +48,7 @@ import org.apache.cloudstack.agent.directdownload.NfsDirectDownloadCommand; import org.apache.cloudstack.agent.directdownload.RevokeDirectDownloadCertificateCommand; import org.apache.cloudstack.agent.directdownload.SetupDirectDownloadCertificateCommand; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -371,7 +372,7 @@ private void logUsageEvent(VMTemplateVO template, long poolId) { } String description = "Direct Download for template Id: " + template.getId() + " on pool Id: " + poolId + " failed"; s_logger.error(description); - ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), template.getAccountId(), EventVO.LEVEL_INFO, event, description, 0); + ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), template.getAccountId(), EventVO.LEVEL_INFO, event, description, template.getId(), ApiCommandJobType.Template.toString(), 0); } /** diff --git a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java index 5ee837b71c22..9c68d6e3d142 100644 --- a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java @@ -31,6 +31,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.admin.ha.ConfigureHAForHostCmd; @@ -54,13 +55,14 @@ import org.apache.cloudstack.ha.task.RecoveryTask; import org.apache.cloudstack.kernel.Partition; import org.apache.cloudstack.managed.context.ManagedContextRunnable; +import org.apache.cloudstack.management.ManagementServerHost; import org.apache.cloudstack.poll.BackgroundPollManager; import org.apache.cloudstack.poll.BackgroundPollTask; import org.apache.cloudstack.utils.identity.ManagementServerNode; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.cluster.ClusterManagerListener; -import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterDetailsVO; import com.cloud.dc.DataCenter; @@ -86,7 +88,6 @@ import com.cloud.utils.fsm.StateListener; import com.cloud.utils.fsm.StateMachine2; import com.google.common.base.Preconditions; -import org.apache.commons.lang3.StringUtils; public final class HAManagerImpl extends ManagerBase implements HAManager, ClusterManagerListener, PluggableService, Configurable, StateListener { public static final Logger LOG = Logger.getLogger(HAManagerImpl.class); @@ -160,7 +161,7 @@ public boolean transitionHAState(final HAConfig.Event event, final HAConfig haCo if (nextState == HAConfig.HAState.Recovering || nextState == HAConfig.HAState.Fencing || nextState == HAConfig.HAState.Fenced) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), - Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message); + Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message, haConfig.getResourceId(), ApiCommandJobType.Host.toString()); } } return result; diff --git a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java index 855ca81c2ab0..317219ac3331 100644 --- a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java @@ -16,6 +16,36 @@ // under the License. package org.apache.cloudstack.outofbandmanagement; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.response.OutOfBandManagementResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.cloudstack.framework.config.Configurable; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; +import org.apache.cloudstack.outofbandmanagement.dao.OutOfBandManagementDao; +import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverChangePasswordCommand; +import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverPowerCommand; +import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverResponse; +import org.apache.cloudstack.poll.BackgroundPollManager; +import org.apache.cloudstack.poll.BackgroundPollTask; +import org.apache.cloudstack.utils.identity.ManagementServerNode; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import com.cloud.alert.AlertManager; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterDetailsVO; @@ -37,36 +67,9 @@ import com.cloud.utils.db.TransactionStatus; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.NoTransitionException; -import org.apache.commons.lang3.StringUtils; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableMap; -import org.apache.cloudstack.api.response.OutOfBandManagementResponse; -import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.framework.config.ConfigKey; -import org.apache.cloudstack.framework.config.Configurable; -import org.apache.cloudstack.managed.context.ManagedContextRunnable; -import org.apache.cloudstack.outofbandmanagement.dao.OutOfBandManagementDao; -import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverChangePasswordCommand; -import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverPowerCommand; -import org.apache.cloudstack.outofbandmanagement.driver.OutOfBandManagementDriverResponse; -import org.apache.cloudstack.poll.BackgroundPollManager; -import org.apache.cloudstack.poll.BackgroundPollTask; -import org.apache.cloudstack.utils.identity.ManagementServerNode; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; @Component public class OutOfBandManagementServiceImpl extends ManagerBase implements OutOfBandManagementService, Manager, Configurable { @@ -213,7 +216,7 @@ private boolean transitionPowerState(OutOfBandManagement.PowerState.Event event, LOG.debug(message); if (newPowerState == OutOfBandManagement.PowerState.Unknown) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), Domain.ROOT_DOMAIN, - EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_POWERSTATE_TRANSITION, message); + EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_POWERSTATE_TRANSITION, message, host.getId(), ApiCommandJobType.Host.toString()); } } return result; diff --git a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java index 0bb197761e2c..b5ac11d675af 100644 --- a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java +++ b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java @@ -17,12 +17,14 @@ package org.apache.cloudstack.outofbandmanagement; +import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; + import com.cloud.event.ActionEventUtils; import com.cloud.event.EventTypes; import com.cloud.event.EventVO; import com.cloud.host.Host; -import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; public class PowerOperationTask implements Runnable { public static final Logger LOG = Logger.getLogger(PowerOperationTask.class); @@ -54,7 +56,7 @@ public void run() { .format("Error while issuing out-of-band management action %s for host: %s", powerOperation.name(), host.getName()); ActionEventUtils.onCreatedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_WARN, - EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_ACTION, true, eventMessage); + EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_ACTION, true, eventMessage, host.getId(), ApiCommandJobType.Host.toString()); } } } diff --git a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java index 17d3909e6c8f..52d815aca938 100644 --- a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java +++ b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java @@ -208,7 +208,7 @@ public void testPopulateFirstClassEntities() { CallContext.current().putContextParameter(VirtualMachine.class, instanceUuid); CallContext.current().putContextParameter(IpAddress.class, ipUuid); - ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), "StaticNat", "Test event"); + ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), "StaticNat", "Test event", null, null); //Assertions Assert.assertNotEquals(publishedEvents.size(), 0); diff --git a/server/src/test/java/com/cloud/resource/ResourceManagerImplTest.java b/server/src/test/java/com/cloud/resource/ResourceManagerImplTest.java index 79d50d84ebcf..1793456ab91a 100644 --- a/server/src/test/java/com/cloud/resource/ResourceManagerImplTest.java +++ b/server/src/test/java/com/cloud/resource/ResourceManagerImplTest.java @@ -37,7 +37,6 @@ import java.util.List; import java.util.UUID; -import com.cloud.exception.InvalidParameterValueException; import org.apache.cloudstack.api.command.admin.host.CancelHostAsDegradedCmd; import org.apache.cloudstack.api.command.admin.host.DeclareHostAsDegradedCmd; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -48,9 +47,9 @@ import org.mockito.BDDMockito; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; -import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -60,6 +59,7 @@ import com.cloud.agent.api.GetVncPortCommand; import com.cloud.capacity.dao.CapacityDao; import com.cloud.event.ActionEventUtils; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.ha.HighAvailabilityManager; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -160,7 +160,7 @@ public void setup() throws Exception { when(vmInstanceDao.listVmsMigratingFromHost(hostId)).thenReturn(new ArrayList<>()); when(vmInstanceDao.listNonMigratingVmsByHostEqualsLastHost(hostId)).thenReturn(new ArrayList<>()); PowerMockito.mockStatic(ActionEventUtils.class); - BDDMockito.given(ActionEventUtils.onCompletedActionEvent(anyLong(), anyLong(), anyString(), anyString(), anyString(), anyLong())) + BDDMockito.given(ActionEventUtils.onCompletedActionEvent(anyLong(), anyLong(), anyString(), anyString(), anyString(), anyLong(), anyString(), anyLong())) .willReturn(1L); when(getVncPortAnswerVm1.getAddress()).thenReturn(vm1VncAddress); when(getVncPortAnswerVm1.getPort()).thenReturn(vm1VncPort); From 3ac99db97ad484684b4d31dad5e0a7aa81897c15 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 25 Feb 2022 10:54:27 +0530 Subject: [PATCH 02/40] wip Signed-off-by: Abhishek Kumar --- .../admin/account/DisableAccountCmd.java | 5 ++++ .../cloudstack/context/CallContext.java | 25 ++++++++++++++++ .../com/cloud/api/ApiAsyncJobDispatcher.java | 14 +++++---- .../java/com/cloud/api/ApiDispatcher.java | 13 +++++--- .../main/java/com/cloud/api/ApiServer.java | 6 ++++ .../cloud/event/ActionEventInterceptor.java | 30 ++++++++++++++----- .../com/cloud/event/ActionEventUtils.java | 9 +++++- .../com/cloud/event/dao/EventJoinDaoImpl.java | 7 +++-- ui/public/locales/en.json | 1 + ui/src/config/section/event.js | 2 +- 10 files changed, 90 insertions(+), 22 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 3e5e1d3d0178..62e816548830 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -136,4 +136,9 @@ public void execute() throws ConcurrentOperationException, ResourceUnavailableEx public ApiCommandJobType getInstanceType() { return ApiCommandJobType.Account; } + + @Override + public Long getInstanceId() { + return id; + } } diff --git a/api/src/main/java/org/apache/cloudstack/context/CallContext.java b/api/src/main/java/org/apache/cloudstack/context/CallContext.java index 9df02dd320e4..e1a4508a590a 100644 --- a/api/src/main/java/org/apache/cloudstack/context/CallContext.java +++ b/api/src/main/java/org/apache/cloudstack/context/CallContext.java @@ -21,6 +21,7 @@ import java.util.Stack; import java.util.UUID; +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.managed.threadlocal.ManagedThreadLocal; import org.apache.log4j.Logger; import org.apache.log4j.NDC; @@ -56,6 +57,8 @@ protected Stack initialValue() { private String eventDetails; private String eventType; private boolean isEventDisplayEnabled = true; // default to true unless specifically set + private Long eventResourceId; + private ApiCommandJobType eventResourceType; private User user; private long userId; private final Map context = new HashMap(); @@ -327,6 +330,28 @@ public void setEventDescription(String eventDescription) { this.eventDescription = eventDescription; } + public Long getEventResourceId() { + return eventResourceId; + } + + public void setEventResourceId(Long eventResourceId) { + this.eventResourceId = eventResourceId; + } + + public ApiCommandJobType getEventResourceType() { + return eventResourceType; + } + + public void setEventResourceType(ApiCommandJobType eventResourceType) { + this.eventResourceType = eventResourceType; + } + + public void setEventResourceAndDetails(ApiCommandJobType eventResourceType, Long eventResourceId, String eventDetails) { + setEventResourceType(eventResourceType); + setEventResourceId(eventResourceId); + setEventDetails(eventDetails); + } + public Project getProject() { return this.project; } diff --git a/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java index 0b7d681ad95d..adcc7b39e53a 100644 --- a/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java +++ b/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java @@ -21,11 +21,6 @@ import javax.inject.Inject; -import org.apache.log4j.Logger; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -36,6 +31,7 @@ import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher; import org.apache.cloudstack.framework.jobs.AsyncJobManager; import org.apache.cloudstack.jobs.JobInfo; +import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.Account; @@ -43,6 +39,8 @@ import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentContext; import com.cloud.utils.db.EntityManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispatcher { private static final Logger s_logger = Logger.getLogger(ApiAsyncJobDispatcher.class); @@ -102,6 +100,12 @@ public void runJob(final AsyncJob job) { Type objectMapType = new TypeToken>() {}.getType(); ctx.putContextParameters((Map) gson.fromJson(contextDetails, objectMapType)); } + if (cmdObj.getInstanceId() != null) { + ctx.setEventResourceId(cmdObj.getInstanceId()); + } + if (cmdObj.getInstanceType() != null) { + ctx.setEventResourceType(cmdObj.getInstanceType()); + } try { // dispatch could ultimately queue the job diff --git a/server/src/main/java/com/cloud/api/ApiDispatcher.java b/server/src/main/java/com/cloud/api/ApiDispatcher.java index 11615ea3f54b..f973fd5a4ec4 100644 --- a/server/src/main/java/com/cloud/api/ApiDispatcher.java +++ b/server/src/main/java/com/cloud/api/ApiDispatcher.java @@ -21,10 +21,6 @@ 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; import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -38,12 +34,15 @@ import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.jobs.AsyncJob; import org.apache.cloudstack.framework.jobs.AsyncJobManager; +import org.apache.log4j.Logger; import com.cloud.api.dispatch.DispatchChain; import com.cloud.api.dispatch.DispatchChainFactory; import com.cloud.api.dispatch.DispatchTask; +import com.cloud.projects.Project; import com.cloud.user.Account; import com.cloud.user.AccountManager; +import com.cloud.utils.db.EntityManager; public class ApiDispatcher { private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName()); @@ -122,6 +121,12 @@ public void dispatch(final BaseCmd cmd, final Map params, final final BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd; final String startEventId = params.get(ApiConstants.CTX_START_EVENT_ID); ctx.setStartEventId(Long.parseLong(startEventId)); + if (asyncCmd.getInstanceId() != null) { + ctx.setEventResourceId(asyncCmd.getInstanceId()); + } + if (asyncCmd.getInstanceType() != null) { + ctx.setEventResourceType(asyncCmd.getInstanceType()); + } // Synchronise job on the object if needed if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) { diff --git a/server/src/main/java/com/cloud/api/ApiServer.java b/server/src/main/java/com/cloud/api/ApiServer.java index c17c8c0771fd..e37fd3a4c02c 100644 --- a/server/src/main/java/com/cloud/api/ApiServer.java +++ b/server/src/main/java/com/cloud/api/ApiServer.java @@ -707,6 +707,12 @@ private String queueCommand(final BaseCmd cmdObj, final Map para } final BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmdObj; + if (asyncCmd.getInstanceId() != null) { + ctx.setEventResourceId(asyncCmd.getInstanceId()); + } + if (asyncCmd.getInstanceType() != null) { + ctx.setEventResourceType(asyncCmd.getInstanceType()); + } if (callerUserId != null) { params.put("ctxUserId", callerUserId.toString()); diff --git a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java index 778ac7d8c009..8b8c227d5cb2 100644 --- a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java +++ b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java @@ -22,7 +22,7 @@ import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; - +import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.context.CallContext; import org.apache.commons.lang3.StringUtils; @@ -71,11 +71,13 @@ public Object interceptStart(Method method, Object target) { CallContext ctx = CallContext.current(); String eventDescription = getEventDescription(actionEvent, ctx); + Long eventResourceId = getEventResourceId(actionEvent, ctx); + String eventResourceType = getEventResourceType(actionEvent, ctx); String eventType = getEventType(actionEvent, ctx); boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled(); ActionEventUtils.onStartedActionEventFromContext(eventType, eventDescription, - getEventResourceId(actionEvent), getEventResourceType(actionEvent), isEventDisplayEnabled); + eventResourceId, eventResourceType, isEventDisplayEnabled); } } return event; @@ -89,6 +91,8 @@ public void interceptComplete(Method method, Object target, Object event) { 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); + Long eventResourceId = getEventResourceId(actionEvent, ctx); + String eventResourceType = getEventResourceType(actionEvent, ctx); String eventType = getEventType(actionEvent, ctx); boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled(); @@ -99,12 +103,12 @@ public void interceptComplete(Method method, Object target, Object event) { //This start event has to be used for subsequent events of this action startEventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_INFO, eventType, isEventDisplayEnabled, "Successfully created entity for " + eventDescription, - getEventResourceId(actionEvent), getEventResourceType(actionEvent)); + eventResourceId, eventResourceType); ctx.setStartEventId(startEventId); } else { ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_INFO, eventType, isEventDisplayEnabled, "Successfully completed " + eventDescription, - getEventResourceId(actionEvent), getEventResourceType(actionEvent), startEventId); + eventResourceId, eventResourceType, startEventId); } } } @@ -117,6 +121,8 @@ public void interceptException(Method method, Object target, Object event) { long accountId = ctx.getCallingAccountId(); long startEventId = ctx.getStartEventId(); String eventDescription = getEventDescription(actionEvent, ctx); + Long eventResourceId = getEventResourceId(actionEvent, ctx); + String eventResourceType = getEventResourceType(actionEvent, ctx); String eventType = getEventType(actionEvent, ctx); boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled(); @@ -126,12 +132,12 @@ public void interceptException(Method method, Object target, Object event) { if (actionEvent.create()) { long eventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, eventType, isEventDisplayEnabled, "Error while creating entity for " + eventDescription, - getEventResourceId(actionEvent), getEventResourceType(actionEvent)); + eventResourceId, eventResourceType); ctx.setStartEventId(eventId); } else { ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, eventType, isEventDisplayEnabled, "Error while " + eventDescription, - getEventResourceId(actionEvent), getEventResourceType(actionEvent), startEventId); + eventResourceId, eventResourceType, startEventId); } } } @@ -190,11 +196,19 @@ protected String getEventDescription(ActionEvent actionEvent, CallContext ctx) { return eventDescription; } - protected Long getEventResourceId(ActionEvent actionEvent) { + protected Long getEventResourceId(ActionEvent actionEvent, CallContext ctx) { + Long resourceId = ctx.getEventResourceId(); + if (resourceId != null) { + return resourceId; + } return actionEvent.resourceId() == -1? null : actionEvent.resourceId(); } - protected String getEventResourceType(ActionEvent actionEvent) { + protected String getEventResourceType(ActionEvent actionEvent, CallContext ctx) { + ApiCommandJobType resourceType = ctx.getEventResourceType(); + if (resourceType != null) { + return resourceType.toString(); + } return StringUtils.isEmpty(actionEvent.resourceType()) ? null : actionEvent.resourceType(); } } diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index 140f51ab8f12..5fb8fa600a58 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -162,7 +162,8 @@ public static Long onCreatedActionEvent(Long userId, Long accountId, String leve } private static Event persistActionEvent(Long userId, Long accountId, Long domainId, String level, String type, - Event.State state, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType, Long startEventId) { + Event.State state, boolean eventDisplayEnabled, String description, + Long resourceId, String resourceType, Long startEventId) { EventVO event = new EventVO(); event.setUserId(userId); event.setAccountId(accountId); @@ -176,6 +177,12 @@ private static Event persistActionEvent(Long userId, Long accountId, Long domain } else { event.setDomainId(getDomainId(accountId)); } + if (resourceId != null) { + event.setResourceId(resourceId); + } + if (resourceType != null) { + event.setResourceType(resourceType); + } if (level != null && !level.isEmpty()) { event.setLevel(level); } diff --git a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java index 180424aac0ea..81088dfa8ba5 100644 --- a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.commons.lang3.ObjectUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -92,11 +93,11 @@ public EventResponse newEventResponse(EventJoinVO event) { responseEvent.setState(event.getState()); responseEvent.setUsername(event.getUserName()); Long resourceId = event.getResourceId(); + responseEvent.setResourceType(event.getResourceType()); Class clazz = ApiCommandJobType.getTypeClass(event.getResourceType()); - if (resourceId != null && clazz != null ) { - final Object objVO = entityMgr.findById(clazz, resourceId); + if (ObjectUtils.allNotNull(resourceId, clazz)) { + final Object objVO = entityMgr.findByIdIncludingRemoved(clazz, resourceId); if (objVO instanceof Identity) { - responseEvent.setResourceType(event.getResourceType()); responseEvent.setResourceId(((Identity)objVO).getUuid()); } } diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index c3ee434e9704..e63213f905b3 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -1894,6 +1894,7 @@ "label.resourcename": "Resource Name", "label.resources": "Resources", "label.resourcestate": "Resource state", +"label.resourcetype": "Resource Type", "label.response.timeout.in.sec": "Response Timeout (in sec)", "label.restart.network": "Restart network", "label.restart.vpc": "Restart VPC", diff --git a/ui/src/config/section/event.js b/ui/src/config/section/event.js index e4e853275528..ebdbba3c4497 100644 --- a/ui/src/config/section/event.js +++ b/ui/src/config/section/event.js @@ -21,7 +21,7 @@ export default { icon: 'schedule', docHelp: 'adminguide/events.html', permission: ['listEvents'], - columns: ['level', 'type', 'state', 'description', 'username', 'account', 'domain', 'created'], + columns: ['level', 'type', 'state', 'description', 'resourcetype', 'resourceid', 'username', 'account', 'domain', 'created'], details: ['username', 'id', 'description', 'state', 'level', 'type', 'account', 'domain', 'created'], searchFilters: ['level', 'domainid', 'account', 'keyword'], related: [{ From f770ba60ceae55f4083f7f9c574338ad200548f8 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 25 Feb 2022 15:49:00 +0530 Subject: [PATCH 03/40] refactor resourcetype association with API class Signed-off-by: Abhishek Kumar --- .../cloudstack/api/ApiCommandJobType.java | 154 ------------------ .../api/ApiCommandResourceType.java | 118 ++++++++++++++ .../apache/cloudstack/api/BaseAsyncCmd.java | 15 -- .../org/apache/cloudstack/api/BaseCmd.java | 25 ++- .../apache/cloudstack/api/BaseListCmd.java | 5 - .../apache/cloudstack/api/IBaseListCmd.java | 2 - .../admin/account/DeleteAccountCmd.java | 8 +- .../admin/account/DisableAccountCmd.java | 8 +- .../admin/account/EnableAccountCmd.java | 11 ++ .../admin/account/UpdateAccountCmd.java | 11 ++ .../admin/autoscale/CreateCounterCmd.java | 6 +- .../admin/autoscale/DeleteCounterCmd.java | 6 +- .../admin/ca/ProvisionCertificateCmd.java | 6 +- .../diagnostics/GetDiagnosticsDataCmd.java | 6 +- .../admin/diagnostics/RunDiagnosticsCmd.java | 6 +- .../command/admin/domain/CreateDomainCmd.java | 6 + .../command/admin/domain/DeleteDomainCmd.java | 11 ++ .../command/admin/domain/UpdateDomainCmd.java | 11 ++ .../command/admin/guest/AddGuestOsCmd.java | 6 +- .../admin/guest/AddGuestOsMappingCmd.java | 6 +- .../command/admin/guest/RemoveGuestOsCmd.java | 6 +- .../admin/guest/RemoveGuestOsMappingCmd.java | 6 +- .../command/admin/guest/UpdateGuestOsCmd.java | 6 +- .../admin/guest/UpdateGuestOsMappingCmd.java | 6 +- .../admin/host/CancelHostAsDegradedCmd.java | 8 +- .../admin/host/CancelMaintenanceCmd.java | 8 +- .../admin/host/DeclareHostAsDegradedCmd.java | 8 +- .../command/admin/host/ListHostTagsCmd.java | 6 +- .../api/command/admin/host/ListHostsCmd.java | 6 +- .../admin/host/PrepareForMaintenanceCmd.java | 8 +- .../command/admin/host/ReconnectHostCmd.java | 8 +- .../admin/host/ReleaseHostReservationCmd.java | 8 +- .../internallb/ListInternalLBVMsCmd.java | 6 +- .../internallb/StartInternalLBVMCmd.java | 8 +- .../admin/internallb/StopInternalLBVMCmd.java | 8 +- .../admin/management/ListMgmtsCmd.java | 6 +- .../network/AddNetworkServiceProviderCmd.java | 6 +- .../network/CreatePhysicalNetworkCmd.java | 6 +- .../DeleteNetworkServiceProviderCmd.java | 6 +- .../network/DeletePhysicalNetworkCmd.java | 6 +- .../ReleaseDedicatedGuestVlanRangeCmd.java | 6 +- .../UpdateNetworkServiceProviderCmd.java | 6 +- .../network/UpdatePhysicalNetworkCmd.java | 6 +- .../admin/offering/CreateDiskOfferingCmd.java | 6 + ...ssueOutOfBandManagementPowerActionCmd.java | 6 +- .../region/CreatePortableIpRangeCmd.java | 6 +- .../region/DeletePortableIpRangeCmd.java | 6 +- .../admin/router/ConfigureOvsElementCmd.java | 8 +- .../ConfigureVirtualRouterElementCmd.java | 8 +- .../admin/router/DestroyRouterCmd.java | 8 +- .../command/admin/router/ListRoutersCmd.java | 6 +- .../command/admin/router/RebootRouterCmd.java | 8 +- .../command/admin/router/StartRouterCmd.java | 8 +- .../command/admin/router/StopRouterCmd.java | 8 +- .../router/UpgradeRouterTemplateCmd.java | 6 +- .../CancelPrimaryStorageMaintenanceCmd.java | 8 +- .../FindStoragePoolsForMigrationCmd.java | 6 +- .../admin/storage/ListStoragePoolsCmd.java | 6 +- .../admin/storage/ListStorageTagsCmd.java | 6 +- ...reparePrimaryStorageForMaintenanceCmd.java | 8 +- .../admin/systemvm/DestroySystemVmCmd.java | 8 +- .../admin/systemvm/ListSystemVMsCmd.java | 6 +- .../admin/systemvm/RebootSystemVmCmd.java | 8 +- .../admin/systemvm/StartSystemVMCmd.java | 8 +- .../admin/systemvm/StopSystemVmCmd.java | 8 +- .../admin/usage/AddTrafficTypeCmd.java | 6 +- .../admin/usage/DeleteTrafficTypeCmd.java | 6 +- .../admin/usage/UpdateTrafficTypeCmd.java | 6 +- .../command/admin/user/DisableUserCmd.java | 6 +- .../api/command/admin/vm/ExpungeVMCmd.java | 8 +- .../admin/vm/UnmanageVMInstanceCmd.java | 8 +- .../admin/vpc/CreatePrivateGatewayCmd.java | 6 +- .../admin/vpc/DeletePrivateGatewayCmd.java | 6 +- .../zone/MarkDefaultZoneForAccountCmd.java | 12 +- .../user/account/AddAccountToProjectCmd.java | 11 ++ .../account/DeleteAccountFromProjectCmd.java | 11 ++ .../command/user/account/ListAccountsCmd.java | 15 +- .../user/account/ListProjectAccountsCmd.java | 6 + .../user/address/AssociateIPAddrCmd.java | 6 +- .../user/address/DisassociateIPAddrCmd.java | 8 +- .../address/ListPublicIpAddressesCmd.java | 6 +- .../affinitygroup/CreateAffinityGroupCmd.java | 6 +- .../affinitygroup/DeleteAffinityGroupCmd.java | 6 +- .../affinitygroup/ListAffinityGroupsCmd.java | 6 +- .../UpdateVMAffinityGroupCmd.java | 6 +- .../autoscale/CreateAutoScalePolicyCmd.java | 6 +- .../autoscale/CreateAutoScaleVmGroupCmd.java | 6 +- .../CreateAutoScaleVmProfileCmd.java | 6 +- .../user/autoscale/CreateConditionCmd.java | 6 +- .../autoscale/DeleteAutoScalePolicyCmd.java | 6 +- .../autoscale/DeleteAutoScaleVmGroupCmd.java | 6 +- .../DeleteAutoScaleVmProfileCmd.java | 6 +- .../user/autoscale/DeleteConditionCmd.java | 6 +- .../autoscale/DisableAutoScaleVmGroupCmd.java | 6 +- .../autoscale/EnableAutoScaleVmGroupCmd.java | 6 +- .../autoscale/UpdateAutoScalePolicyCmd.java | 6 +- .../autoscale/UpdateAutoScaleVmGroupCmd.java | 6 +- .../UpdateAutoScaleVmProfileCmd.java | 6 +- .../command/user/backup/CreateBackupCmd.java | 6 +- .../firewall/CreateEgressFirewallRuleCmd.java | 6 +- .../user/firewall/CreateFirewallRuleCmd.java | 6 +- .../firewall/CreatePortForwardingRuleCmd.java | 6 +- .../firewall/DeleteEgressFirewallRuleCmd.java | 6 +- .../user/firewall/DeleteFirewallRuleCmd.java | 6 +- .../firewall/DeletePortForwardingRuleCmd.java | 6 +- .../api/command/user/iso/DeleteIsoCmd.java | 8 +- .../api/command/user/iso/ExtractIsoCmd.java | 8 +- .../api/command/user/iso/ListIsosCmd.java | 6 +- .../CreateApplicationLoadBalancerCmd.java | 6 +- .../CreateLoadBalancerRuleCmd.java | 6 +- .../DeleteApplicationLoadBalancerCmd.java | 6 +- .../DeleteLoadBalancerRuleCmd.java | 6 +- .../user/nat/CreateIpForwardingRuleCmd.java | 6 +- .../user/nat/DeleteIpForwardingRuleCmd.java | 6 +- .../user/network/DeleteNetworkCmd.java | 8 +- .../gslb/CreateGlobalLoadBalancerRuleCmd.java | 6 +- .../gslb/DeleteGlobalLoadBalancerRuleCmd.java | 6 +- .../AuthorizeSecurityGroupEgressCmd.java | 8 +- .../AuthorizeSecurityGroupIngressCmd.java | 8 +- .../securitygroup/ListSecurityGroupsCmd.java | 6 +- .../RevokeSecurityGroupEgressCmd.java | 8 +- .../RevokeSecurityGroupIngressCmd.java | 8 +- .../user/snapshot/CreateSnapshotCmd.java | 6 +- .../CreateSnapshotFromVMSnapshotCmd.java | 6 +- .../user/snapshot/DeleteSnapshotCmd.java | 8 +- .../user/snapshot/ListSnapshotsCmd.java | 6 +- .../user/snapshot/RevertSnapshotCmd.java | 8 +- .../snapshot/UpdateSnapshotPolicyCmd.java | 2 +- .../user/template/CopyTemplateCmd.java | 13 +- .../user/template/CreateTemplateCmd.java | 6 +- .../user/template/DeleteTemplateCmd.java | 8 +- .../user/template/ExtractTemplateCmd.java | 13 +- .../user/template/ListTemplatesCmd.java | 6 +- .../user/template/RegisterTemplateCmd.java | 6 +- .../api/command/user/vm/AddIpToVmNicCmd.java | 6 +- .../api/command/user/vm/DeployVMCmd.java | 6 +- .../api/command/user/vm/DestroyVMCmd.java | 8 +- .../api/command/user/vm/ListNicsCmd.java | 6 +- .../api/command/user/vm/ListVMsCmd.java | 21 ++- .../api/command/user/vm/RebootVMCmd.java | 8 +- .../command/user/vm/RemoveIpFromVmNicCmd.java | 6 +- .../command/user/vm/ResetVMPasswordCmd.java | 8 +- .../api/command/user/vm/ResetVMSSHKeyCmd.java | 8 +- .../api/command/user/vm/StartVMCmd.java | 8 +- .../api/command/user/vm/StopVMCmd.java | 8 +- .../api/command/user/vm/UpdateVmNicIpCmd.java | 6 +- .../command/user/volume/AttachVolumeCmd.java | 8 +- .../command/user/volume/CreateVolumeCmd.java | 6 +- .../command/user/volume/DestroyVolumeCmd.java | 8 +- .../command/user/volume/DetachVolumeCmd.java | 8 +- .../command/user/volume/ExtractVolumeCmd.java | 8 +- .../command/user/volume/ListVolumesCmd.java | 7 +- .../user/volume/RemoveResourceDetailCmd.java | 6 +- .../command/user/volume/ResizeVolumeCmd.java | 6 +- .../command/user/volume/UpdateVolumeCmd.java | 8 +- .../user/vpc/CreateStaticRouteCmd.java | 6 +- .../user/vpc/DeleteStaticRouteCmd.java | 6 +- .../cloudstack/context/CallContext.java | 14 +- .../jobs/impl/AsyncJobManagerImpl.java | 4 +- .../cluster/CreateKubernetesClusterCmd.java | 20 ++- .../api/command/CreateServiceInstanceCmd.java | 5 + .../api/commands/StopNetScalerVMCmd.java | 8 +- .../api/command/LinkAccountToLdapCmd.java | 26 ++- .../command/ListAndSwitchSAMLAccountCmd.java | 48 +++--- .../com/cloud/api/ApiAsyncJobDispatcher.java | 10 +- .../main/java/com/cloud/api/ApiDBUtils.java | 52 +++--- .../java/com/cloud/api/ApiDispatcher.java | 14 +- .../main/java/com/cloud/api/ApiServer.java | 25 +-- .../cloud/api/query/vo/AsyncJobJoinVO.java | 6 +- .../ConfigurationManagerImpl.java | 5 +- .../cloud/event/ActionEventInterceptor.java | 4 +- .../com/cloud/event/ActionEventUtils.java | 136 ++++++++++------ .../com/cloud/event/dao/EventJoinDaoImpl.java | 5 +- .../cloud/network/IpAddressManagerImpl.java | 4 +- .../network/firewall/FirewallManagerImpl.java | 1 + .../VirtualNetworkApplianceManagerImpl.java | 10 +- .../RollingMaintenanceManagerImpl.java | 4 +- .../cloud/storage/VolumeApiServiceImpl.java | 18 +- .../storage/snapshot/SnapshotManagerImpl.java | 4 +- .../snapshot/SnapshotSchedulerImpl.java | 6 +- .../com/cloud/user/AccountManagerImpl.java | 7 +- .../java/com/cloud/vm/UserVmManagerImpl.java | 6 +- .../cloudstack/backup/BackupManagerImpl.java | 6 +- .../download/DirectDownloadManagerImpl.java | 4 +- .../apache/cloudstack/ha/HAManagerImpl.java | 4 +- .../OutOfBandManagementServiceImpl.java | 4 +- .../PowerOperationTask.java | 4 +- .../storage/dao/AsyncJobJoinDaoTest.java | 4 +- 188 files changed, 984 insertions(+), 872 deletions(-) delete mode 100644 api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java create mode 100644 api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java deleted file mode 100644 index a42eee6b631e..000000000000 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java +++ /dev/null @@ -1,154 +0,0 @@ -// 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 org.apache.cloudstack.api; - -import org.apache.cloudstack.region.PortableIp; -import org.apache.commons.lang3.StringUtils; - -import com.cloud.network.GuestVlan; -import com.cloud.network.Networks; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.router.VirtualRouter; -import com.cloud.storage.GuestOS; -import com.cloud.storage.GuestOSHypervisor; -import com.cloud.template.VirtualMachineTemplate; -import com.cloud.vm.VirtualMachine; - -public enum ApiCommandJobType { - None, - VirtualMachine, - DomainRouter, - Volume, - ConsoleProxy, - Snapshot, - Backup, - Template, - Iso, - SystemVm, - Host, - StoragePool, - ImageStore, - IpAddress, - PortableIpAddress, - SecurityGroup, - PhysicalNetwork, - TrafficType, - PhysicalNetworkServiceProvider, - FirewallRule, - Account, - User, - PrivateGateway, - StaticRoute, - Counter, - Condition, - AutoScalePolicy, - AutoScaleVmProfile, - AutoScaleVmGroup, - GlobalLoadBalancerRule, - LoadBalancerRule, - AffinityGroup, - InternalLbVm, - DedicatedGuestVlanRange, - GuestOs, - GuestOsMapping, - Network, - Management, - KubernetesCluster; - - public static Class getTypeClass(ApiCommandJobType type) { - switch (type) { - case VirtualMachine: - return VirtualMachine.class; - case DomainRouter: - case InternalLbVm: - return VirtualRouter.class; - case Volume: - return com.cloud.storage.Volume.class; - case ConsoleProxy: - return com.cloud.vm.ConsoleProxy.class; - case Snapshot: - return com.cloud.storage.Snapshot.class; - case Backup: - return org.apache.cloudstack.backup.Backup.class; - case Template: - case Iso: - return VirtualMachineTemplate.class; - case SystemVm: - return com.cloud.vm.SystemVm.class; - case Host: - return com.cloud.host.Host.class; - case StoragePool: - return com.cloud.storage.StoragePool.class; - case ImageStore: - return com.cloud.storage.ImageStore.class; - case IpAddress: - return com.cloud.network.IpAddress.class; - case PortableIpAddress: - return PortableIp.class; - case SecurityGroup: - return com.cloud.network.security.SecurityGroup.class; - case PhysicalNetwork: - return com.cloud.network.PhysicalNetwork.class; - case TrafficType: - return Networks.TrafficType.class; - case PhysicalNetworkServiceProvider: - return com.cloud.network.PhysicalNetworkServiceProvider.class; - case FirewallRule: - return com.cloud.network.rules.FirewallRule.class; - case Account: - return com.cloud.user.Account.class; - case User: - return com.cloud.user.User.class; - case PrivateGateway: - return com.cloud.network.vpc.PrivateGateway.class; - case StaticRoute: - return com.cloud.network.vpc.StaticRoute.class; - case Counter: - return com.cloud.network.as.Counter.class; - case Condition: - return com.cloud.network.as.Condition.class; - case AutoScalePolicy: - return com.cloud.network.as.AutoScalePolicy.class; - case AutoScaleVmProfile: - return com.cloud.network.as.AutoScaleVmProfile.class; - case AutoScaleVmGroup: - return com.cloud.network.as.AutoScaleVmGroup.class; - case GlobalLoadBalancerRule: - return com.cloud.region.ha.GlobalLoadBalancerRule.class; - case LoadBalancerRule: - return LoadBalancingRule.class; - case AffinityGroup: - return org.apache.cloudstack.affinity.AffinityGroup.class; - case DedicatedGuestVlanRange: - return GuestVlan.class; - case GuestOs: - return GuestOS.class; - case GuestOsMapping: - return GuestOSHypervisor.class; - case Network: - return com.cloud.network.Network.class; - } - return null; - } - - public static Class getTypeClass(String type) { - if (StringUtils.isEmpty(type)) { - return null; - } - return getTypeClass(valueOf(type)); - } -} diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java new file mode 100644 index 000000000000..354772b057b3 --- /dev/null +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java @@ -0,0 +1,118 @@ +// 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 org.apache.cloudstack.api; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.cloudstack.region.PortableIp; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.EnumUtils; +import org.apache.commons.lang3.StringUtils; + +import com.cloud.network.GuestVlan; +import com.cloud.network.Networks; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.router.VirtualRouter; +import com.cloud.storage.GuestOS; +import com.cloud.storage.GuestOSHypervisor; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.vm.VirtualMachine; + +public enum ApiCommandResourceType { + None(null), + VirtualMachine(VirtualMachine.class), + DomainRouter(VirtualRouter.class), + Volume(com.cloud.storage.Volume.class), + ConsoleProxy(com.cloud.vm.ConsoleProxy.class), + Snapshot(com.cloud.storage.Snapshot.class), + Backup(org.apache.cloudstack.backup.Backup.class), + Template(VirtualMachineTemplate.class), + Iso(VirtualMachineTemplate.class), + SystemVm(com.cloud.vm.SystemVm.class), + Host(com.cloud.host.Host.class), + StoragePool(com.cloud.storage.StoragePool.class), + ImageStore(com.cloud.storage.ImageStore.class), + IpAddress(com.cloud.network.IpAddress.class), + PortableIpAddress(PortableIp.class), + SecurityGroup(com.cloud.network.security.SecurityGroup.class), + PhysicalNetwork(com.cloud.network.PhysicalNetwork.class), + TrafficType(Networks.TrafficType.class), + PhysicalNetworkServiceProvider(com.cloud.network.PhysicalNetworkServiceProvider.class), + FirewallRule(com.cloud.network.rules.FirewallRule.class), + Account(com.cloud.user.Account.class), + User(com.cloud.user.User.class), + PrivateGateway(com.cloud.network.vpc.PrivateGateway.class), + StaticRoute(com.cloud.network.vpc.StaticRoute.class), + Counter(com.cloud.network.as.Counter.class), + Condition(com.cloud.network.as.Condition.class), + AutoScalePolicy(com.cloud.network.as.AutoScalePolicy.class), + AutoScaleVmProfile(com.cloud.network.as.AutoScaleVmProfile.class), + AutoScaleVmGroup(com.cloud.network.as.AutoScaleVmGroup.class), + GlobalLoadBalancerRule(com.cloud.region.ha.GlobalLoadBalancerRule.class), + LoadBalancerRule(LoadBalancingRule.class), + AffinityGroup(org.apache.cloudstack.affinity.AffinityGroup.class), + InternalLbVm(VirtualRouter.class), + DedicatedGuestVlanRange(GuestVlan.class), + GuestOs(GuestOS.class), + GuestOsMapping(GuestOSHypervisor.class), + Network(com.cloud.network.Network.class), + Project(com.cloud.projects.Project.class), + Domain(com.cloud.domain.Domain.class), + DiskOffering(com.cloud.offering.DiskOffering.class), + ServiceOffering(com.cloud.offering.ServiceOffering.class), + NetworkOffering(com.cloud.offering.NetworkOffering.class), + VpcOffering(com.cloud.network.vpc.VpcOffering.class), + BackupOffering(org.apache.cloudstack.backup.BackupOffering.class); + + private final Class clazz; + + private ApiCommandResourceType(Class clazz) { + this.clazz = clazz; + } + + public Class getAssociatedClass() { + return this.clazz; + } + + public static List valuesFromAssociatedClass(Class clazz) { + List types = new ArrayList<>(); + for (ApiCommandResourceType type : ApiCommandResourceType.values()) { + if (type.getAssociatedClass() == clazz) { + types.add(type); + } + } + return types; + } + + public static ApiCommandResourceType valueFromAssociatedClass(Class clazz) { + List types = valuesFromAssociatedClass(clazz); + return CollectionUtils.isEmpty(types) ? null : types.get(0); + } + + @Override + public String toString() { + return this.name(); + } + + public static ApiCommandResourceType fromString(String value) { + if (StringUtils.isNotEmpty(value) && EnumUtils.isValidEnum(ApiCommandResourceType.class, value)) { + return valueOf(value); + } + return null; + } +} diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java index 1c3822c1057c..865ec7456409 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -74,21 +74,6 @@ public void setStartEventId(Long startEventId) { this.startEventId = startEventId; } - /** - * Async commands that want to be tracked as part of the listXXX commands need to - * provide implementations of the two following methods, getInstanceId() and getInstanceType() - * - * getObjectId() should return the id of the object the async command is executing on - * getObjectType() should return a type from the AsyncJob.Type enumeration - */ - public Long getInstanceId() { - return null; - } - - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.None; - } - public String getSyncObjType() { return null; } diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java index 475745d081a4..3c2ea3add72d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java @@ -29,11 +29,6 @@ import javax.inject.Inject; -import com.cloud.server.ManagementService; -import com.cloud.server.ResourceIconManager; -import com.cloud.server.ResourceManagerUtil; -import com.cloud.server.ResourceMetaDataService; -import com.cloud.server.TaggedResourceService; import org.apache.cloudstack.acl.ProjectRoleService; import org.apache.cloudstack.acl.RoleService; import org.apache.cloudstack.acl.RoleType; @@ -72,6 +67,11 @@ import com.cloud.network.vpn.Site2SiteVpnService; import com.cloud.projects.ProjectService; import com.cloud.resource.ResourceService; +import com.cloud.server.ManagementService; +import com.cloud.server.ResourceIconManager; +import com.cloud.server.ResourceManagerUtil; +import com.cloud.server.ResourceMetaDataService; +import com.cloud.server.TaggedResourceService; import com.cloud.storage.DataStoreProviderApiService; import com.cloud.storage.StorageService; import com.cloud.storage.VolumeApiService; @@ -430,4 +430,19 @@ private Object getEntityVO(Class entityType, Object entityId){ return null; } + /** + * Async commands that want to be tracked as part of the listXXX commands need to + * provide implementations of the two following methods, getApiResourceId() and getApiResourceType() + * + * getApiResourceId() should return the id of the object the async command is executing on + * getApiResourceType() should return a type from the ApiCommandResourceType enumeration + */ + public Long getApiResourceId() { + return null; + } + + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.None; + } + } diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java index bcebbb860033..9bd69dc9e494 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java @@ -117,11 +117,6 @@ public Long getStartIndex() { return startIndex; } - @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.None; - } - @Override public void validateSpecificParameters(final Map params){ super.validateSpecificParameters(params); diff --git a/api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java index 70957ea91533..bf87e116082b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java @@ -27,6 +27,4 @@ public interface IBaseListCmd { Long getPageSizeVal(); Long getStartIndex(); - - ApiCommandJobType getInstanceType(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index 1896f97311c3..22eec04c57b0 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -110,12 +110,12 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Account; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return id; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 62e816548830..f71484c2dea4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -133,12 +133,12 @@ public void execute() throws ConcurrentOperationException, ResourceUnavailableEx } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Account; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return id; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index f30c985c961a..e9dc9f611d83 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -18,6 +18,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -108,4 +109,14 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable account"); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index 43377dad8a3b..0dd7a37bb910 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -21,6 +21,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.response.RoleResponse; import org.apache.log4j.Logger; @@ -145,4 +146,14 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update account"); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index ea715663d9c1..6c49a23aa586 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -97,8 +97,8 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Counter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Counter; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 3547ef10c8c7..6575bf940baf 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -83,8 +83,8 @@ public Long getId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Counter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Counter; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java index 2745f071dd07..99f3eae2aea7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -119,7 +119,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/GetDiagnosticsDataCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/GetDiagnosticsDataCmd.java index dc058ff0a28b..717c06a7f618 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/GetDiagnosticsDataCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/GetDiagnosticsDataCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiArgValidator; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; @@ -150,8 +150,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java index d7f3b3933107..c25cc9058706 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiArgValidator; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -141,8 +141,8 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index fe1c20206b67..80f1c03095be 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.domain; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; @@ -103,4 +104,9 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create domain"); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Domain; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 037cf3d9ab4b..4302089dbc3d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -109,4 +110,14 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete domain"); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Domain; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index 409a84d7d80b..76cc3292c9f8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -18,6 +18,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -100,4 +101,14 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update domain"); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Domain; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java index 717bcfe81550..891ecb6d47b9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -143,8 +143,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOs; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOs; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java index 8af50a15bfa3..79e82d6f5d4c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -130,8 +130,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOsMapping; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOsMapping; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java index 3de7f7a68da6..fc8c9e641a2d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -91,8 +91,8 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOs; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOs; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java index ddd45399de21..690bc9f94b72 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -91,8 +91,8 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOsMapping; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOsMapping; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java index ff3b49d79be6..d67ffc66e959 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -122,7 +122,7 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOs; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOs; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java index d760d534cfb7..2683a21dfcf3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -95,8 +95,8 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GuestOsMapping; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GuestOsMapping; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelHostAsDegradedCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelHostAsDegradedCmd.java index 98557dd710ab..9d6a575bc62c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelHostAsDegradedCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelHostAsDegradedCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.ApiArgValidator; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -87,12 +87,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index d23a7651bbc9..a584c057595d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -88,12 +88,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeclareHostAsDegradedCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeclareHostAsDegradedCmd.java index bdf440fc054f..c6188eadb8d5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeclareHostAsDegradedCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeclareHostAsDegradedCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.ApiArgValidator; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -87,12 +87,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java index 5f55ada61da3..7adb3a14d198 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.HostTagResponse; @@ -49,8 +49,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 9a5d3115b597..1ec8f6bf5dce 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -24,7 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.BaseListCmd; @@ -198,8 +198,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } protected ListResponse getHostResponses() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index 7083f0db133d..fc228225c2e1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -88,12 +88,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index 34e439f3a378..82625280270e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -89,12 +89,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java index 6aeff6312c9e..c0d339e86b71 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -84,12 +84,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java index fd415858f564..f57569097062 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -137,8 +137,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java index 7040e7cf29ad..fdec79478538 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -94,12 +94,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.InternalLbVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.InternalLbVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java index 51a3d9f8fa02..1381f6705276 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -92,12 +92,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.InternalLbVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.InternalLbVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java index c01019e6e879..4e2ae10da541 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.api.command.admin.management; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; @@ -65,8 +65,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index bb87015da780..756c35fc233e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -143,7 +143,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetworkServiceProvider; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetworkServiceProvider; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index c691a18c8358..9819cde6b4e4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -181,7 +181,7 @@ public void create() throws ResourceAllocationException { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetwork; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetwork; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index 9df27d3e06c0..fc752e8f8816 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -103,7 +103,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetworkServiceProvider; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetworkServiceProvider; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 4d8c44628d3f..41911e157fd5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -94,7 +94,7 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetwork; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetwork; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java index 263d46a75099..f6e49491fdf6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -64,8 +64,8 @@ public Long getId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DedicatedGuestVlanRange; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DedicatedGuestVlanRange; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index bb4f64e04004..a448ed77df3d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -112,8 +112,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetworkServiceProvider; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetworkServiceProvider; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index ed3fa97ce7a9..6f0cc3f60152 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.Parameter; @@ -115,7 +115,7 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PhysicalNetwork; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PhysicalNetwork; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index 1992ed8caa1f..b628ce44f1aa 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -334,4 +335,9 @@ public void execute() { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create disk offering"); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DiskOffering; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java index 49eab1f176c6..d61f62c1b0a6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiArgValidator; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -118,7 +118,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Host; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Host; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java index 403eaf3e39ac..c28a29c6e9fc 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -148,7 +148,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PortableIpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PortableIpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java index 413818b8242b..6cc884645e9c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -89,7 +89,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PortableIpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PortableIpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java index 7577f2eb884e..d3b4896e53b6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java @@ -21,7 +21,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -106,12 +106,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.None; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.None; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return id; } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index 6dd05a48b710..575920cc3277 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -112,12 +112,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.None; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.None; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return id; } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index c460c6665e79..b6b370a6ba4e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -86,12 +86,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 3c9b684c0c86..e5c689dcd87f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -160,8 +160,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index 764d304e25b6..bc0e6e8dee70 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -90,12 +90,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index 6d36a3c801e6..25235cb04349 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -93,12 +93,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 2474171a459c..dc970ce61adf 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -91,12 +91,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java index fedc314be7fb..2004910c9f41 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseResponse; @@ -117,8 +117,8 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getInstanceType() { + return ApiCommandResourceType.DomainRouter; } public Long getInstanceId() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java index 91348ecf6b04..a694aba30fbe 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -69,12 +69,12 @@ public static String getResultObjectName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StoragePool; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StoragePool; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java index 73c596c9e56a..8133806cbc6f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -67,8 +67,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StoragePool; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StoragePool; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java index 2450ac7cd6ba..b2455c3037a7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -112,8 +112,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StoragePool; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StoragePool; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java index 9e0aeccee5e4..d740d04cff70 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.StorageTagResponse; @@ -49,8 +49,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StoragePool; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StoragePool; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java index cf5fdf66c648..ddabefb14c86 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -69,12 +69,12 @@ public static String getResultObjectName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StoragePool; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StoragePool; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index f68f9ddb49e1..0a477a894091 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -88,12 +88,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index 2b2faf50113d..aee2084c2e8c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -123,8 +123,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 352fd3b330b2..6c440ff2ba83 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -98,12 +98,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index a2b70a6630be..a3dd5a032d91 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -99,12 +99,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 9237004b7274..440566710446 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -101,12 +101,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SystemVm; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SystemVm; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 9e4254c49aa5..1111434c6603 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -191,7 +191,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.TrafficType; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.TrafficType; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index 46383cca7251..0dda89b2a5cf 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -88,8 +88,8 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.TrafficType; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.TrafficType; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 6d0824cca796..3c7548583c39 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -135,7 +135,7 @@ public String getEventType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.TrafficType; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.TrafficType; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index c6e09ef0f9e6..89c7af4cec20 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -104,7 +104,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.User; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java index ea6cb00efa78..cd9b89b6ffe6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -93,12 +93,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UnmanageVMInstanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UnmanageVMInstanceCmd.java index f49577ebd590..db729b7f8d7c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UnmanageVMInstanceCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UnmanageVMInstanceCmd.java @@ -30,7 +30,7 @@ import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -124,12 +124,12 @@ public long getEntityOwnerId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return vmId; } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index fab1b5983519..206eca2c9912 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -219,7 +219,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PrivateGateway; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PrivateGateway; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 8d67a4ed8c50..82809e5bd0d7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -107,8 +107,8 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.PrivateGateway; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.PrivateGateway; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index 28a6d6ccc138..9dd0337a83f8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -107,8 +107,14 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Account; + public Long getApiResourceId() { + Account account = _accountService.getActiveAccountByName(accountName, domainId); + return account != null ? account.getId() : null; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index 255cdeb293eb..1ccb18ffaa68 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -19,6 +19,7 @@ import java.util.List; import org.apache.cloudstack.api.ApiArgValidator; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.response.ProjectRoleResponse; import org.apache.commons.lang3.EnumUtils; @@ -159,4 +160,14 @@ public String getEventDescription() { return "Sending invitation to email " + email + " to join project: " + getProjectId(); } } + + @Override + public Long getApiResourceId() { + return projectId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Project; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index 84b06c0a2532..6804f091e713 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -18,6 +18,7 @@ import java.util.List; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -112,4 +113,14 @@ public String getEventType() { public String getEventDescription() { return "Removing account " + accountName + " from project: " + projectId; } + + @Override + public Long getApiResourceId() { + return projectId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Project; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index 993384d6a3f3..e89118afef62 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -20,12 +20,8 @@ import java.util.EnumSet; import java.util.List; -import com.cloud.server.ResourceIcon; -import com.cloud.server.ResourceTag; -import org.apache.cloudstack.api.response.ResourceIconResponse; -import org.apache.log4j.Logger; - import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.DomainDetails; import org.apache.cloudstack.api.BaseListDomainResourcesCmd; @@ -34,8 +30,12 @@ import org.apache.cloudstack.api.command.user.UserCmd; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ResourceIconResponse; +import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.server.ResourceIcon; +import com.cloud.server.ResourceTag; import com.cloud.user.Account; @APICommand(name = "listAccounts", description = "Lists accounts and provides detailed account information for listed accounts", responseObject = AccountResponse.class, responseView = ResponseView.Restricted, entityType = {Account.class}, @@ -151,4 +151,9 @@ private void updateAccountResponse(List response) { accountResponse.setResourceIconResponse(iconResponse); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index bc10e4b6e4f3..bcfedd2262d7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.user.account; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -100,4 +101,9 @@ public void execute() { this.setResponseObject(response); } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 5beba26d0f53..75b83b40f3eb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -366,8 +366,8 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index c2e173c0fa5c..17b17632ca5f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -141,12 +141,12 @@ private IpAddress getIpAddress(long id) { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getIpAddressId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index a9b3bf89afcf..e456074145d9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -206,7 +206,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java index 8cc3d69bb6b3..052b98719d7d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -169,8 +169,8 @@ public String getCreateEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AffinityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AffinityGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java index e8884b4f65c9..589e4fe165c0 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -135,7 +135,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AffinityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AffinityGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java index fa7935b0b665..de70361c3311 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -90,7 +90,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AffinityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AffinityGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java index c798b1820d02..c70e4fbda669 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.ApiErrorCode; @@ -169,8 +169,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AffinityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AffinityGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index 6a2b491f2f45..7ab9f276b8dd 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -156,8 +156,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScalePolicy; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScalePolicy; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 0308c1710c33..45881f2bc7ee 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -180,8 +180,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmGroup; } @Deprecated diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 447085e79b5a..d62b93676766 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -245,8 +245,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmProfile; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmProfile; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index 847866ef3ae5..655fcfceb362 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -122,8 +122,8 @@ public Long getThreshold() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Condition; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Condition; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index c0a3a00f7d43..a33a6200906e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -105,7 +105,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScalePolicy; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScalePolicy; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index a9d2f4e23299..0cc9571a685f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -105,7 +105,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index 779315a96dd7..5f9fd8a5f745 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -104,7 +104,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmProfile; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmProfile; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 24f4cc687847..8c3e56d43ba7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -81,8 +81,8 @@ public Long getId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Condition; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Condition; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index 8eb1809f887b..b0daf2ec6648 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -102,8 +102,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index 59c9f7a9aa33..b6f2a82ac49f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -102,8 +102,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 24858f4656b9..b1089a5ee0ba 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -132,7 +132,7 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScalePolicy; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScalePolicy; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index 76fa3d75d18a..c086c3290e22 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; @@ -163,8 +163,8 @@ public long getEntityOwnerId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmGroup; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index deebe2ecc9a4..2f4445a20d2a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; @@ -155,8 +155,8 @@ public long getEntityOwnerId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.AutoScaleVmProfile; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.AutoScaleVmProfile; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/backup/CreateBackupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/backup/CreateBackupCmd.java index db7a2763ef2f..189ebe2f69d2 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/backup/CreateBackupCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/backup/CreateBackupCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -96,8 +96,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Backup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Backup; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java index dab7d10ddd31..65539346a13b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -366,8 +366,8 @@ public FirewallRuleType getType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index ca66ee762b1d..878561d5e361 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -330,8 +330,8 @@ public FirewallRuleType getType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 6a4e802e93ab..a90367c8ac4b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -419,8 +419,8 @@ public FirewallRuleType getType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java index 59a0519df4da..bcb258901352 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -122,7 +122,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index ba8b18eacf02..7bd5836f99eb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -120,7 +120,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 1c45280a8372..505777b64f9b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -124,7 +124,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index b38a24f8ad7f..8e6750cc3e3b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -103,12 +103,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Iso; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index a400a014b6b4..9e63ce00910a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -117,12 +117,12 @@ public static String getStaticName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Iso; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java index 44bbb7168c1b..90ecaa47de04 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -167,8 +167,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Iso; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java index 4e31c6abf341..0f1ed40788ab 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java @@ -18,7 +18,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -164,8 +164,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.LoadBalancerRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.LoadBalancerRule; } public String getSourceIp() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 6c1e133d57c6..76061525458e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -412,8 +412,8 @@ public void setSourceIpAddressId(Long ipId) { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java index a723279890a1..e583c83b8652 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -110,7 +110,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index 112f6cf7fc8b..2c6ba178b383 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -116,7 +116,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index de7f68de004d..70b721b96ee2 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -309,8 +309,8 @@ public FirewallRuleType getType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index 9059d5073198..d40a63fc67df 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -117,8 +117,8 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.FirewallRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.FirewallRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index 72a953857afd..51e40c3bbd63 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.network; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -106,13 +106,13 @@ public String getEventDescription() { } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Network; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Network; } @Override public long getEntityOwnerId() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java index 18f5b7683cfa..6f3a8a6a704d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java @@ -20,7 +20,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -182,8 +182,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GlobalLoadBalancerRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GlobalLoadBalancerRule; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java index dfb093d5b16e..ec84e668db1c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -119,7 +119,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.GlobalLoadBalancerRule; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.GlobalLoadBalancerRule; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index 9d9553a28d54..0e1c172bd5b7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -229,12 +229,12 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SecurityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SecurityGroup; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getSecurityGroupId(); } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index 41abc461738b..503b64397b7f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -228,12 +228,12 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SecurityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SecurityGroup; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getSecurityGroupId(); } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index 4a8081a35074..2895593595d4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -84,7 +84,7 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SecurityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SecurityGroup; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index a28a220b534e..e10c7c75a7c0 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -105,12 +105,12 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SecurityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SecurityGroup; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 9e81d0bc4ee6..1b4a13f87778 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -106,12 +106,12 @@ public void execute() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.SecurityGroup; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.SecurityGroup; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index cf4c1d43deaf..c9215703880a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -21,7 +21,7 @@ import java.util.Map; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -196,8 +196,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Snapshot; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Snapshot; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java index 556b041631ba..3e6e37fdd2aa 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.api.command.user.snapshot; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -155,8 +155,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Snapshot; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Snapshot; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 452135fc1f45..dada167ede54 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -88,12 +88,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Snapshot; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Snapshot; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index bdb23e4ad5b0..c6a15605ed16 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -104,8 +104,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Snapshot; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Snapshot; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java index 20a638c36f48..824c2b4abee9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -86,12 +86,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Snapshot; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Snapshot; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java index 7181fd50d080..8b62230e174d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java @@ -79,7 +79,7 @@ public String getCommandName() { } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index 54900974c2eb..f672d4c8890e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -19,11 +19,8 @@ import java.util.ArrayList; import java.util.List; -import com.cloud.dc.DataCenter; -import org.apache.log4j.Logger; - import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -34,7 +31,9 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; +import com.cloud.dc.DataCenter; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; @@ -155,12 +154,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Template; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index d5985318ee89..55b43d22cd21 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -32,7 +32,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -276,8 +276,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Template; } protected boolean isBareMetal() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index 3cee148f759b..07b0f81bf82a 100755 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -104,12 +104,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Template; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index f0e7b0803e95..13076287a328 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -16,11 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.user.template; -import com.cloud.dc.DataCenter; -import org.apache.log4j.Logger; - import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -30,7 +27,9 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; +import com.cloud.dc.DataCenter; import com.cloud.event.EventTypes; import com.cloud.exception.InternalErrorException; import com.cloud.template.VirtualMachineTemplate; @@ -118,12 +117,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Template; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index bf3b2fbf5a40..a64ce195c0fb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -27,7 +27,7 @@ import java.util.EnumSet; import java.util.List; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; @@ -181,8 +181,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Template; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index bb7f7a441b68..255b11aaa248 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -24,7 +24,7 @@ import java.util.Map; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -293,8 +293,8 @@ public String getCommandName() { return s_name; } - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Template; + public ApiCommandResourceType getInstanceType() { + return ApiCommandResourceType.Template; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java index ba465ad42598..fc009c7e5db1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -136,8 +136,8 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 90b999d269d0..0b8eb9753024 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCustomIdCmd; @@ -689,8 +689,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index 30ab5b562ff1..07fd55276f84 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -122,12 +122,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java index 30a3b8cce907..0614e641f30d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.response.NicSecondaryIpResponse; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseListCmd; @@ -169,8 +169,8 @@ public void execute() throws ResourceUnavailableException, ResourceAllocationExc } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index dcbf9627813f..2228f3082be6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -20,23 +20,16 @@ import java.util.EnumSet; import java.util.List; -import com.cloud.server.ResourceIcon; -import com.cloud.server.ResourceTag; -import org.apache.cloudstack.api.command.user.UserCmd; -import org.apache.cloudstack.api.response.ResourceIconResponse; -import org.apache.cloudstack.api.response.SecurityGroupResponse; -import org.apache.cloudstack.api.response.UserResponse; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.command.user.UserCmd; import org.apache.cloudstack.api.response.BackupOfferingResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; @@ -44,14 +37,20 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ResourceIconResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.server.ResourceIcon; +import com.cloud.server.ResourceTag; import com.cloud.vm.VirtualMachine; @@ -281,8 +280,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index d827a6b894ac..9bdcc1aed56c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -105,12 +105,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java index db84dc9fc8b8..50e2e560d310 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -180,8 +180,8 @@ public String getSyncObjType() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index e9a2503ce46d..e275a988cd15 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -107,12 +107,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java index ce481d8814c9..c611f54264ce 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -113,8 +113,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override @@ -133,7 +133,7 @@ public long getEntityOwnerId() { } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index ffbce175b5d5..2e7f5a6f0d54 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -151,12 +151,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 8e1c3cbbaa8d..529e09a0753a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -101,12 +101,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java index a9ea7bd2427c..aee5307a233c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -179,8 +179,8 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.IpAddress; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.IpAddress; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index 18770b210b76..05c84172520c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.Parameter; @@ -87,12 +87,12 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index a54bda19206f..3426a95686d7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCustomIdCmd; @@ -183,8 +183,8 @@ public static String getResultObjectName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DestroyVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DestroyVolumeCmd.java index ed8457893901..f4007ce9f40b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DestroyVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DestroyVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -106,12 +106,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index 1e38ca24ed05..e92f6a3cb0d8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.Parameter; @@ -93,12 +93,12 @@ public static String getResultObjectName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index f48236680e14..8534012c6bd4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -101,12 +101,12 @@ public static String getStaticName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index 0b3e6dd5ce16..b1d0d3d5b4fd 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -20,11 +20,10 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.command.user.UserCmd; import org.apache.cloudstack.api.response.ClusterResponse; @@ -157,8 +156,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java index 703fe8a1bdab..c2daa4ff3178 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.Parameter; @@ -77,8 +77,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java index 1f1bc6a8fc11..2afc0cca1333 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.Parameter; @@ -133,8 +133,8 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } public static String getResultObjectName() { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java index 345221e1de45..e7782674828f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; @@ -121,12 +121,12 @@ public String getCommandName() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.Volume; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 849d1ecbc0b2..40e1932393cc 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -19,7 +19,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -144,7 +144,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StaticRoute; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StaticRoute; } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index 9449e6d534af..8065c2fbc330 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -121,7 +121,7 @@ public Long getSyncObjId() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.StaticRoute; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.StaticRoute; } } diff --git a/api/src/main/java/org/apache/cloudstack/context/CallContext.java b/api/src/main/java/org/apache/cloudstack/context/CallContext.java index e1a4508a590a..d63ccefd4d32 100644 --- a/api/src/main/java/org/apache/cloudstack/context/CallContext.java +++ b/api/src/main/java/org/apache/cloudstack/context/CallContext.java @@ -21,7 +21,7 @@ import java.util.Stack; import java.util.UUID; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.managed.threadlocal.ManagedThreadLocal; import org.apache.log4j.Logger; import org.apache.log4j.NDC; @@ -58,7 +58,7 @@ protected Stack initialValue() { private String eventType; private boolean isEventDisplayEnabled = true; // default to true unless specifically set private Long eventResourceId; - private ApiCommandJobType eventResourceType; + private ApiCommandResourceType eventResourceType; private User user; private long userId; private final Map context = new HashMap(); @@ -338,20 +338,14 @@ public void setEventResourceId(Long eventResourceId) { this.eventResourceId = eventResourceId; } - public ApiCommandJobType getEventResourceType() { + public ApiCommandResourceType getEventResourceType() { return eventResourceType; } - public void setEventResourceType(ApiCommandJobType eventResourceType) { + public void setEventResourceType(ApiCommandResourceType eventResourceType) { this.eventResourceType = eventResourceType; } - public void setEventResourceAndDetails(ApiCommandJobType eventResourceType, Long eventResourceId, String eventDetails) { - setEventResourceType(eventResourceType); - setEventResourceId(eventResourceId); - setEventDetails(eventDetails); - } - public Project getProject() { return this.project; } diff --git a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java index 34f58933cd41..a963357122e5 100644 --- a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java +++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java @@ -34,7 +34,7 @@ import javax.naming.ConfigurationException; import com.cloud.storage.dao.VolumeDetailsDao; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.log4j.NDC; import org.apache.cloudstack.api.ApiErrorCode; @@ -1084,7 +1084,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) { s_logger.debug("Purge queue item for cancelled job-" + job.getId()); } _queueMgr.purgeAsyncJobQueueItemId(job.getId()); - if (ApiCommandJobType.Volume.toString().equals(job.getInstanceType())) { + if (ApiCommandResourceType.Volume.toString().equals(job.getInstanceType())) { try { _volumeDetailsDao.removeDetail(job.getInstanceId(), "SNAPSHOT_ID"); diff --git a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/cluster/CreateKubernetesClusterCmd.java b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/cluster/CreateKubernetesClusterCmd.java index d767c2b52bf0..b634e73d490c 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/cluster/CreateKubernetesClusterCmd.java +++ b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/cluster/CreateKubernetesClusterCmd.java @@ -16,15 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.user.kubernetes.cluster; -import com.cloud.kubernetes.cluster.KubernetesCluster; -import com.cloud.kubernetes.cluster.KubernetesClusterEventTypes; -import com.cloud.kubernetes.cluster.KubernetesClusterService; -import com.cloud.utils.exception.CloudRuntimeException; +import java.security.InvalidParameterException; + +import javax.inject.Inject; + import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -41,8 +41,10 @@ import org.apache.cloudstack.context.CallContext; import org.apache.log4j.Logger; -import javax.inject.Inject; -import java.security.InvalidParameterException; +import com.cloud.kubernetes.cluster.KubernetesCluster; +import com.cloud.kubernetes.cluster.KubernetesClusterEventTypes; +import com.cloud.kubernetes.cluster.KubernetesClusterService; +import com.cloud.utils.exception.CloudRuntimeException; @APICommand(name = CreateKubernetesClusterCmd.APINAME, description = "Creates a Kubernetes cluster", @@ -275,8 +277,8 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.VirtualMachine; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; } @Override diff --git a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java index 59c4e6102ade..ff1e8b049cd8 100644 --- a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java +++ b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -199,4 +200,8 @@ public long getEntityOwnerId() { return accountId; } + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.ServiceOffering; + } } diff --git a/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java index af95255da906..5d754168e492 100644 --- a/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java +++ b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -97,12 +97,12 @@ public String getEventDescription() { } @Override - public ApiCommandJobType getInstanceType() { - return ApiCommandJobType.DomainRouter; + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DomainRouter; } @Override - public Long getInstanceId() { + public Long getApiResourceId() { return getId(); } diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java index 52adc664ff81..72df525882a5 100644 --- a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java +++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java @@ -18,12 +18,13 @@ */ package org.apache.cloudstack.api.command; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.cloud.user.UserAccount; +import java.util.UUID; + +import javax.inject.Inject; + import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -37,8 +38,10 @@ import org.apache.cloudstack.ldap.NoLdapUserMatchingQueryException; import org.apache.log4j.Logger; -import javax.inject.Inject; -import java.util.UUID; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserAccount; @APICommand(name = LinkAccountToLdapCmd.APINAME, description = "link a cloudstack account to a group or OU in ldap", responseObject = LinkDomainToLdapResponse.class, since = "4.11.0", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, authorized = {RoleType.Admin,RoleType.DomainAdmin}) @@ -139,4 +142,15 @@ public String getAdmin() { public short getAccountType() { return accountType; } + + @Override + public Long getApiResourceId() { + Account account = _accountService.getActiveAccountByName(accountName, domainId); + return account != null ? account.getAccountId() : null; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java index 895d12f83597..311bf4a3e1ad 100644 --- a/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java +++ b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java @@ -16,18 +16,19 @@ // under the License. package org.apache.cloudstack.api.command; -import com.cloud.api.response.ApiResponseSerializer; -import com.cloud.domain.Domain; -import com.cloud.domain.dao.DomainDao; -import com.cloud.exception.CloudAuthenticationException; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.cloud.user.UserAccount; -import com.cloud.user.UserAccountVO; -import com.cloud.user.dao.UserAccountDao; -import com.cloud.user.dao.UserDao; -import com.cloud.utils.HttpUtils; +import java.io.IOException; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ApiServerService; @@ -47,15 +48,17 @@ import org.apache.cloudstack.saml.SAMLUtils; import org.apache.log4j.Logger; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import java.io.IOException; -import java.net.InetAddress; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.domain.Domain; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.CloudAuthenticationException; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserAccount; +import com.cloud.user.UserAccountVO; +import com.cloud.user.dao.UserAccountDao; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.HttpUtils; @APICommand(name = "listAndSwitchSamlAccount", description = "Lists and switches to other SAML accounts owned by the SAML user", responseObject = SuccessResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) public class ListAndSwitchSAMLAccountCmd extends BaseCmd implements APIAuthenticator { @@ -204,4 +207,9 @@ public void setAuthenticators(List authenticators) { s_logger.error("No suitable Pluggable Authentication Manager found for SAML2 listAndSwitchSamlAccount Cmd"); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } \ No newline at end of file diff --git a/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java index adcc7b39e53a..3c03d7dc683a 100644 --- a/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java +++ b/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java @@ -21,6 +21,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -100,11 +101,12 @@ public void runJob(final AsyncJob job) { Type objectMapType = new TypeToken>() {}.getType(); ctx.putContextParameters((Map) gson.fromJson(contextDetails, objectMapType)); } - if (cmdObj.getInstanceId() != null) { - ctx.setEventResourceId(cmdObj.getInstanceId()); + if (cmdObj.getApiResourceId() != null) { + ctx.setEventResourceId(cmdObj.getApiResourceId()); } - if (cmdObj.getInstanceType() != null) { - ctx.setEventResourceType(cmdObj.getInstanceType()); + final ApiCommandResourceType resourceType = cmdObj.getApiResourceType(); + if (resourceType != null && !ApiCommandResourceType.None.equals(resourceType)) { + ctx.setEventResourceType(resourceType); } try { diff --git a/server/src/main/java/com/cloud/api/ApiDBUtils.java b/server/src/main/java/com/cloud/api/ApiDBUtils.java index e6413a61ba4b..a25c7acb95a1 100644 --- a/server/src/main/java/com/cloud/api/ApiDBUtils.java +++ b/server/src/main/java/com/cloud/api/ApiDBUtils.java @@ -277,7 +277,7 @@ import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.affinity.dao.AffinityGroupDao; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants.DomainDetails; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; @@ -1651,7 +1651,7 @@ public static String findJobInstanceUuid(AsyncJob job) { return null; } String jobInstanceId = null; - ApiCommandJobType jobInstanceType = EnumUtils.fromString(ApiCommandJobType.class, job.getInstanceType(), ApiCommandJobType.None); + ApiCommandResourceType jobInstanceType = EnumUtils.fromString(ApiCommandResourceType.class, job.getInstanceType(), ApiCommandResourceType.None); if (job.getInstanceId() == null) { // when assert is hit, implement 'getInstanceId' of BaseAsyncCmd and return appropriate instance id @@ -1659,118 +1659,118 @@ public static String findJobInstanceUuid(AsyncJob job) { return null; } - if (jobInstanceType == ApiCommandJobType.Volume) { + if (jobInstanceType == ApiCommandResourceType.Volume) { VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); if (volume != null) { jobInstanceId = volume.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Template || jobInstanceType == ApiCommandJobType.Iso) { + } else if (jobInstanceType == ApiCommandResourceType.Template || jobInstanceType == ApiCommandResourceType.Iso) { VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId()); if (template != null) { jobInstanceId = template.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.VirtualMachine || jobInstanceType == ApiCommandJobType.ConsoleProxy || - jobInstanceType == ApiCommandJobType.SystemVm || jobInstanceType == ApiCommandJobType.DomainRouter) { + } else if (jobInstanceType == ApiCommandResourceType.VirtualMachine || jobInstanceType == ApiCommandResourceType.ConsoleProxy || + jobInstanceType == ApiCommandResourceType.SystemVm || jobInstanceType == ApiCommandResourceType.DomainRouter) { VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId()); if (vm != null) { jobInstanceId = vm.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Snapshot) { + } else if (jobInstanceType == ApiCommandResourceType.Snapshot) { Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId()); if (snapshot != null) { jobInstanceId = snapshot.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Host) { + } else if (jobInstanceType == ApiCommandResourceType.Host) { Host host = ApiDBUtils.findHostById(job.getInstanceId()); if (host != null) { jobInstanceId = host.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.StoragePool) { + } else if (jobInstanceType == ApiCommandResourceType.StoragePool) { StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId()); if (spool != null) { jobInstanceId = spool.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.IpAddress) { + } else if (jobInstanceType == ApiCommandResourceType.IpAddress) { IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId()); if (ip != null) { jobInstanceId = ip.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.SecurityGroup) { + } else if (jobInstanceType == ApiCommandResourceType.SecurityGroup) { SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId()); if (sg != null) { jobInstanceId = sg.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.PhysicalNetwork) { + } else if (jobInstanceType == ApiCommandResourceType.PhysicalNetwork) { PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId()); if (pnet != null) { jobInstanceId = pnet.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.TrafficType) { + } else if (jobInstanceType == ApiCommandResourceType.TrafficType) { PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId()); if (trafficType != null) { jobInstanceId = trafficType.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.PhysicalNetworkServiceProvider) { + } else if (jobInstanceType == ApiCommandResourceType.PhysicalNetworkServiceProvider) { PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId()); if (sp != null) { jobInstanceId = sp.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.FirewallRule) { + } else if (jobInstanceType == ApiCommandResourceType.FirewallRule) { FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId()); if (fw != null) { jobInstanceId = fw.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Account) { + } else if (jobInstanceType == ApiCommandResourceType.Account) { Account acct = ApiDBUtils.findAccountById(job.getInstanceId()); if (acct != null) { jobInstanceId = acct.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.User) { + } else if (jobInstanceType == ApiCommandResourceType.User) { User usr = ApiDBUtils.findUserById(job.getInstanceId()); if (usr != null) { jobInstanceId = usr.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.StaticRoute) { + } else if (jobInstanceType == ApiCommandResourceType.StaticRoute) { StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId()); if (route != null) { jobInstanceId = route.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.PrivateGateway) { + } else if (jobInstanceType == ApiCommandResourceType.PrivateGateway) { VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId()); if (gateway != null) { jobInstanceId = gateway.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Counter) { + } else if (jobInstanceType == ApiCommandResourceType.Counter) { CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId()); if (counter != null) { jobInstanceId = counter.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Condition) { + } else if (jobInstanceType == ApiCommandResourceType.Condition) { ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId()); if (condition != null) { jobInstanceId = condition.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.AutoScalePolicy) { + } else if (jobInstanceType == ApiCommandResourceType.AutoScalePolicy) { AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId()); if (policy != null) { jobInstanceId = policy.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.AutoScaleVmProfile) { + } else if (jobInstanceType == ApiCommandResourceType.AutoScaleVmProfile) { AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId()); if (profile != null) { jobInstanceId = profile.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.AutoScaleVmGroup) { + } else if (jobInstanceType == ApiCommandResourceType.AutoScaleVmGroup) { AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId()); if (group != null) { jobInstanceId = group.getUuid(); } - } else if (jobInstanceType == ApiCommandJobType.Network) { + } else if (jobInstanceType == ApiCommandResourceType.Network) { NetworkVO networkVO = ApiDBUtils.findNetworkById(job.getInstanceId()); if(networkVO != null) { jobInstanceId = networkVO.getUuid(); } - } else if (jobInstanceType != ApiCommandJobType.None) { + } else if (jobInstanceType != ApiCommandResourceType.None) { // TODO : when we hit here, we need to add instanceType -> UUID // entity table mapping assert (false); diff --git a/server/src/main/java/com/cloud/api/ApiDispatcher.java b/server/src/main/java/com/cloud/api/ApiDispatcher.java index f973fd5a4ec4..3880f2aa9d1b 100644 --- a/server/src/main/java/com/cloud/api/ApiDispatcher.java +++ b/server/src/main/java/com/cloud/api/ApiDispatcher.java @@ -25,6 +25,7 @@ import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -114,6 +115,13 @@ public void dispatch(final BaseCmd cmd, final Map params, final Project project = _entityMgr.findByUuidIncludingRemoved(Project.class, params.get(ApiConstants.PROJECT_ID)); ctx.setProject(project); } + if (cmd.getApiResourceId() != null) { + ctx.setEventResourceId(cmd.getApiResourceId()); + } + final ApiCommandResourceType resourceType = cmd.getApiResourceType(); + if (resourceType != null && !ApiCommandResourceType.None.equals(resourceType)) { + ctx.setEventResourceType(resourceType); + } // TODO This if shouldn't be here. Use polymorphism and move it to validateSpecificParameters if (cmd instanceof BaseAsyncCmd) { @@ -121,12 +129,6 @@ public void dispatch(final BaseCmd cmd, final Map params, final final BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd; final String startEventId = params.get(ApiConstants.CTX_START_EVENT_ID); ctx.setStartEventId(Long.parseLong(startEventId)); - if (asyncCmd.getInstanceId() != null) { - ctx.setEventResourceId(asyncCmd.getInstanceId()); - } - if (asyncCmd.getInstanceType() != null) { - ctx.setEventResourceType(asyncCmd.getInstanceType()); - } // Synchronise job on the object if needed if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) { diff --git a/server/src/main/java/com/cloud/api/ApiServer.java b/server/src/main/java/com/cloud/api/ApiServer.java index e37fd3a4c02c..b85cc2beab94 100644 --- a/server/src/main/java/com/cloud/api/ApiServer.java +++ b/server/src/main/java/com/cloud/api/ApiServer.java @@ -57,6 +57,7 @@ import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ApiServerService; @@ -684,6 +685,14 @@ private String queueCommand(final BaseCmd cmdObj, final Map para final Long callerUserId = ctx.getCallingUserId(); final Account caller = ctx.getCallingAccount(); + if (cmdObj.getApiResourceId() != null) { + ctx.setEventResourceId(cmdObj.getApiResourceId()); + } + final ApiCommandResourceType resourceType = cmdObj.getApiResourceType(); + if (resourceType != null && !ApiCommandResourceType.None.equals(resourceType)) { + ctx.setEventResourceType(resourceType); + } + // Queue command based on Cmd super class: // BaseCmd: cmd is dispatched to ApiDispatcher, executed, serialized and returned. // BaseAsyncCreateCmd: cmd params are processed and create() is called, then same workflow as BaseAsyncCmd. @@ -707,12 +716,6 @@ private String queueCommand(final BaseCmd cmdObj, final Map para } final BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmdObj; - if (asyncCmd.getInstanceId() != null) { - ctx.setEventResourceId(asyncCmd.getInstanceId()); - } - if (asyncCmd.getInstanceType() != null) { - ctx.setEventResourceType(asyncCmd.getInstanceType()); - } if (callerUserId != null) { params.put("ctxUserId", callerUserId.toString()); @@ -730,7 +733,7 @@ private String queueCommand(final BaseCmd cmdObj, final Map para // save the scheduled event final Long eventId = ActionEventUtils.onScheduledActionEvent((callerUserId == null) ? (Long)User.UID_SYSTEM : callerUserId, asyncCmd.getEntityOwnerId(), asyncCmd.getEventType(), - asyncCmd.getEventDescription(), asyncCmd.getInstanceId(), asyncCmd.getInstanceType().toString(), asyncCmd.isDisplay(), startEventId); + asyncCmd.getEventDescription(), asyncCmd.getApiResourceId(), asyncCmd.getApiResourceType().toString(), asyncCmd.isDisplay(), startEventId); if (startEventId == 0) { // There was no create event before, set current event id as start eventId startEventId = eventId; @@ -740,7 +743,7 @@ private String queueCommand(final BaseCmd cmdObj, final Map para params.put("cmdEventType", asyncCmd.getEventType().toString()); params.put("ctxDetails", ApiGsonHelper.getBuilder().create().toJson(ctx.getContextParameters())); - Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId; + Long instanceId = (objectId == null) ? asyncCmd.getApiResourceId() : objectId; // users can provide the job id they want to use, so log as it is a uuid and is unique String injectedJobId = asyncCmd.getInjectedJobId(); @@ -748,7 +751,7 @@ private String queueCommand(final BaseCmd cmdObj, final Map para AsyncJobVO job = new AsyncJobVO("", callerUserId, caller.getId(), cmdObj.getClass().getName(), ApiGsonHelper.getBuilder().create().toJson(params), instanceId, - asyncCmd.getInstanceType() != null ? asyncCmd.getInstanceType().toString() : null, + asyncCmd.getApiResourceType() != null ? asyncCmd.getApiResourceType().toString() : null, injectedJobId); job.setDispatcher(asyncDispatcher.getName()); @@ -803,9 +806,9 @@ private void buildAsyncListResponse(final BaseListCmd command, final Account acc // list all jobs for ROOT admin if (accountMgr.isRootAdmin(account.getId())) { - jobs = asyncMgr.findInstancePendingAsyncJobs(command.getInstanceType().toString(), null); + jobs = asyncMgr.findInstancePendingAsyncJobs(command.getApiResourceType().toString(), null); } else { - jobs = asyncMgr.findInstancePendingAsyncJobs(command.getInstanceType().toString(), account.getId()); + jobs = asyncMgr.findInstancePendingAsyncJobs(command.getApiResourceType().toString(), account.getId()); } if (jobs.size() == 0) { diff --git a/server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java index d88cbe0af01e..6dc8720dcbb6 100644 --- a/server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java @@ -25,7 +25,7 @@ import javax.persistence.Id; import javax.persistence.Table; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.framework.jobs.AsyncJob; import com.cloud.utils.db.GenericDao; @@ -93,7 +93,7 @@ public class AsyncJobJoinVO extends BaseViewVO implements ControlledViewEntity { @Enumerated(value = EnumType.STRING) @Column(name = "instance_type", length = 64) - private ApiCommandJobType instanceType; + private ApiCommandResourceType instanceType; @Column(name = "instance_id", length = 64) private Long instanceId; @@ -190,7 +190,7 @@ public Date getRemoved() { return removed; } - public ApiCommandJobType getInstanceType() { + public ApiCommandResourceType getInstanceType() { return instanceType; } diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index 2a5197c7b47b..3d040d71e0ca 100755 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -116,6 +116,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -268,7 +269,6 @@ import com.google.common.base.Enums; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Sets; import com.googlecode.ipv6.IPv6Address; @@ -3016,6 +3016,7 @@ protected ServiceOfferingVO createServiceOffering(final long userId, final boole } CallContext.current().setEventDetails("Service offering id=" + serviceOffering.getId()); + CallContext.current().putContextParameter(ServiceOffering.class, serviceOffering.getId()); return serviceOffering; } else { return null; @@ -3439,6 +3440,7 @@ protected DiskOfferingVO createDiskOffering(final Long userId, final List diskOfferingDetailsDao.saveDetails(detailsVO); } CallContext.current().setEventDetails("Disk offering id=" + newDiskOffering.getId()); + CallContext.current().putContextParameter(DiskOffering.class, newDiskOffering.getId()); return offering; } return null; @@ -5874,6 +5876,7 @@ public NetworkOffering createNetworkOffering(final CreateNetworkOfferingCmd cmd) final NetworkOfferingVO offering = createNetworkOffering(name, displayText, trafficType, tags, specifyVlan, availability, networkRate, serviceProviderMap, false, guestType, false, serviceOfferingId, conserveMode, serviceCapabilityMap, specifyIpRanges, isPersistent, details, egressDefaultPolicy, maxconn, enableKeepAlive, forVpc, domainIds, zoneIds, enable); CallContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name); + CallContext.current().putContextParameter(NetworkOffering.class, offering.getId()); return offering; } diff --git a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java index 8b8c227d5cb2..30ff61b3e7fa 100644 --- a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java +++ b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java @@ -22,7 +22,7 @@ import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.commons.lang3.StringUtils; @@ -205,7 +205,7 @@ protected Long getEventResourceId(ActionEvent actionEvent, CallContext ctx) { } protected String getEventResourceType(ActionEvent actionEvent, CallContext ctx) { - ApiCommandJobType resourceType = ctx.getEventResourceType(); + ApiCommandResourceType resourceType = ctx.getEventResourceType(); if (resourceType != null) { return resourceType.toString(); } diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index 5fb8fa600a58..9755eef7a1c5 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -25,11 +25,15 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.events.EventBus; import org.apache.cloudstack.framework.events.EventBusException; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -44,6 +48,7 @@ import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.ReflectUtil; +import com.cloud.utils.Ternary; import com.cloud.utils.component.ComponentContext; import com.cloud.utils.db.EntityManager; @@ -91,11 +96,9 @@ void init() { } public static Long onActionEvent(Long userId, Long accountId, Long domainId, String type, String description, Long resourceId, String resourceType) { - - publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description); - - Event event = persistActionEvent(userId, accountId, domainId, null, type, Event.State.Completed, true, description, resourceId, resourceType, null); - + Ternary resourceDetails = getResourceDetails(resourceId, resourceType, type); + publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description, resourceDetails.second(), resourceDetails.third()); + Event event = persistActionEvent(userId, accountId, domainId, null, type, Event.State.Completed, true, description, resourceDetails.first(), resourceDetails.third(), null); return event.getId(); } @@ -103,11 +106,9 @@ public static Long onActionEvent(Long userId, Long accountId, Long domainId, Str * Save event after scheduling an async job */ public static Long onScheduledActionEvent(Long userId, Long accountId, String type, String description, Long resourceId, String resourceType, boolean eventDisplayEnabled, long startEventId) { - - publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Scheduled, description); - - Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Scheduled, eventDisplayEnabled, description, resourceId, resourceType, startEventId); - + Ternary resourceDetails = getResourceDetails(resourceId, resourceType, type); + publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Scheduled, description, resourceDetails.second(), resourceDetails.third()); + Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Scheduled, eventDisplayEnabled, description, resourceDetails.first(), resourceDetails.third(), startEventId); return event.getId(); } @@ -130,11 +131,9 @@ public static void onStartedActionEventFromContext(String eventType, String even * Save event after starting execution of an async job */ public static Long onStartedActionEvent(Long userId, Long accountId, String type, String description, Long resourceId, String resourceType, boolean eventDisplayEnabled, long startEventId) { - - publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Started, description); - - Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Started, eventDisplayEnabled, description, resourceId, resourceType, startEventId); - + Ternary resourceDetails = getResourceDetails(resourceId, resourceType, type); + publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Started, description, resourceDetails.second(), resourceDetails.third()); + Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Started, eventDisplayEnabled, description, resourceDetails.first(), resourceDetails.third(), startEventId); return event.getId(); } @@ -144,20 +143,17 @@ public static Long onCompletedActionEvent(Long userId, Long accountId, String le } public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType, long startEventId) { - publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description); - - Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Completed, eventDisplayEnabled, description, resourceId, resourceType, startEventId); - + Ternary resourceDetails = getResourceDetails(resourceId, resourceType, type); + publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Completed, description, resourceDetails.second(), resourceDetails.third()); + Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Completed, eventDisplayEnabled, description, resourceDetails.first(), resourceDetails.third(), startEventId); return event.getId(); } public static Long onCreatedActionEvent(Long userId, Long accountId, String level, String type, boolean eventDisplayEnabled, String description, Long resourceId, String resourceType) { - - publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Created, description); - - Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Created, eventDisplayEnabled, description, resourceId, resourceType, null); - + Ternary resourceDetails = getResourceDetails(resourceId, resourceType, type); + publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type, com.cloud.event.Event.State.Created, description, resourceDetails.second(), resourceDetails.third()); + Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Created, eventDisplayEnabled, description, resourceDetails.first(), resourceDetails.third(), null); return event.getId(); } @@ -193,7 +189,7 @@ private static Event persistActionEvent(Long userId, Long accountId, Long domain return event; } - private static void publishOnEventBus(long userId, long accountId, String eventCategory, String eventType, Event.State state, String description) { + private static void publishOnEventBus(long userId, long accountId, String eventCategory, String eventType, Event.State state, String description, String resourceUuid, String resourceType) { String configKey = Config.PublishActionEvent.key(); String value = s_configDao.getValue(configKey); boolean configValue = Boolean.parseBoolean(value); @@ -205,27 +201,8 @@ private static void publishOnEventBus(long userId, long accountId, String eventC return; // no provider is configured to provide events bus, so just return } - // get the entity details for which ActionEvent is generated - String entityType = null; - String entityUuid = null; - CallContext context = CallContext.current(); - //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 - Object param = context.getContextParameter(entityClass); - if(param != null){ - try { - entityUuid = getEntityUuid(entityClass, param); - entityType = entityClass.getName(); - } catch (Exception e){ - s_logger.debug("Caught exception while finding entityUUID, moving on"); - } - } - } - org.apache.cloudstack.framework.events.Event event = - new org.apache.cloudstack.framework.events.Event(ManagementService.Name, eventCategory, eventType, EventTypes.getEntityForEvent(eventType), entityUuid); + new org.apache.cloudstack.framework.events.Event(ManagementService.Name, eventCategory, eventType, resourceType, resourceUuid); Map eventDescription = new HashMap(); Project project = s_projectDao.findByProjectAccountId(accountId); @@ -242,8 +219,8 @@ private static void publishOnEventBus(long userId, long accountId, String eventC eventDescription.put("account", account.getUuid()); eventDescription.put("event", eventType); eventDescription.put("status", state.toString()); - eventDescription.put("entity", entityType); - eventDescription.put("entityuuid", entityUuid); + eventDescription.put("entity", resourceType); + eventDescription.put("entityuuid", resourceUuid); //Put all the first class entities that are touched during the action. For now atleast put in the vmid. populateFirstClassEntities(eventDescription); eventDescription.put("description", description); @@ -260,21 +237,56 @@ private static void publishOnEventBus(long userId, long accountId, String eventC } } + private static Ternary getResourceDetailsUsingEventTypeAndContext(ApiCommandResourceType resourceType, String eventType) { + CallContext context = CallContext.current(); + Class entityClass = EventTypes.getEntityClassForEvent(eventType); + Long entityId = null; + String entityType = null; + String entityUuid = null; + if (entityClass != null){ + if (resourceType == null) { + resourceType = ApiCommandResourceType.valueFromAssociatedClass(entityClass); + } + entityType = resourceType == null ? entityClass.getSimpleName() : resourceType.toString(); + Object param = context.getContextParameter(entityClass); + if(param != null){ + try { + entityUuid = getEntityUuid(entityClass, param); + } catch (Exception e){ + s_logger.debug("Caught exception while finding entityUUID, moving on"); + } + } + if (param instanceof Long) { + entityId = (Long)param; + } else if (entityUuid != null) { + Object obj = s_entityMgr.findByUuid(entityClass, entityUuid); + if (obj instanceof InternalIdentity) { + entityId = ((InternalIdentity)obj).getId(); + } + } + } + return new Ternary<>(entityId, entityUuid, entityType); + } + private static String getEntityUuid(Class entityType, Object entityId){ - // entityId can be internal db id or UUID so accordingly call findbyId or return uuid directly + // entityId can be internal db id or UUID so accordingly call findById or return uuid directly if (entityId instanceof Long){ // Its internal db id - use findById - final Object objVO = s_entityMgr.findById(entityType, (Long)entityId); - return ((Identity)objVO).getUuid(); - } else if(entityId instanceof String){ + final Object objVO = s_entityMgr.findByIdIncludingRemoved(entityType, (Long)entityId); + if (objVO != null) { + return ((Identity) objVO).getUuid(); + } + } else if(entityId instanceof String) { try{ // In case its an async job the internal db id would be a string because of json deserialization Long internalId = Long.valueOf((String) entityId); - final Object objVO = s_entityMgr.findById(entityType, internalId); - return ((Identity)objVO).getUuid(); - } catch (NumberFormatException e){ + final Object objVO = s_entityMgr.findByIdIncludingRemoved(entityType, internalId); + if (objVO != null) { + return ((Identity) objVO).getUuid(); + } + } catch (NumberFormatException e) { // It is uuid - so return it return (String)entityId; } @@ -283,6 +295,22 @@ private static String getEntityUuid(Class entityType, Object entityId){ return null; } + private static Ternary getResourceDetails(Long resourceId, String resourceType, String eventType) { + Class clazz = null; + ApiCommandResourceType type = null; + if (StringUtils.isNotEmpty(resourceType)) { + type = ApiCommandResourceType.fromString(resourceType); + if (type != null) { + clazz = type.getAssociatedClass(); + } + } + if (ObjectUtils.allNotNull(resourceId, clazz)) { + String uuid = getEntityUuid(clazz, resourceId); + return new Ternary<>(resourceId, uuid, resourceType); + } + return getResourceDetailsUsingEventTypeAndContext(type, eventType); + } + private static long getDomainId(long accountId) { AccountVO account = s_accountDao.findByIdIncludingRemoved(accountId); if (account == null) { diff --git a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java index 81088dfa8ba5..4c43fa0ead83 100644 --- a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java @@ -20,7 +20,7 @@ import javax.inject.Inject; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.response.EventResponse; import org.apache.commons.lang3.ObjectUtils; @@ -94,7 +94,8 @@ public EventResponse newEventResponse(EventJoinVO event) { responseEvent.setUsername(event.getUserName()); Long resourceId = event.getResourceId(); responseEvent.setResourceType(event.getResourceType()); - Class clazz = ApiCommandJobType.getTypeClass(event.getResourceType()); + ApiCommandResourceType resourceType = ApiCommandResourceType.fromString(event.getResourceType()); + Class clazz = resourceType != null ? resourceType.getAssociatedClass() : null; if (ObjectUtils.allNotNull(resourceId, clazz)) { final Object objVO = entityMgr.findByIdIncludingRemoved(clazz, resourceId); if (objVO instanceof Identity) { diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 88547634b2a7..b16ad9bf6134 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse; import org.apache.cloudstack.context.CallContext; @@ -1713,7 +1713,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) { // trigger an action event for the transfer of portable IP across the networks, so that external entities // monitoring for this event can initiate the route advertisement for the availability of IP from the zoe ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_PORTABLE_IP_TRANSFER, - "Portable IP associated is transferred from network " + currentNetworkId + " to " + newNetworkId, newNetworkId, ApiCommandJobType.Network.toString()); + "Portable IP associated is transferred from network " + currentNetworkId + " to " + newNetworkId, newNetworkId, ApiCommandResourceType.Network.toString()); } protected List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { diff --git a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java index 56814daeef25..7badc8b8d88a 100644 --- a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java @@ -256,6 +256,7 @@ public FirewallRuleVO doInTransaction(TransactionStatus status) throws NetworkRu throw new CloudRuntimeException("Unable to update the state to add for " + newRule); } CallContext.current().setEventDetails("Rule Id: " + newRule.getId()); + CallContext.current().putContextParameter(FirewallRule.class, newRule.getId()); return newRule; } diff --git a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 29b8a9f7d056..a398a4316f5d 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -49,7 +49,7 @@ import org.apache.cloudstack.alert.AlertService; import org.apache.cloudstack.alert.AlertService.AlertType; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; @@ -1243,7 +1243,7 @@ private void handleFailingChecks(DomainRouterVO router, List failingChec } ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, - Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, failingChecksEvent.toString(), router.getId(), ApiCommandJobType.DomainRouter.toString()); + Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, failingChecksEvent.toString(), router.getId(), ApiCommandResourceType.DomainRouter.toString()); if (recreateRouter) { s_logger.warn("Health Check Alert: Found failing checks in " + @@ -1267,7 +1267,7 @@ private boolean restartVpcInDomainRouter(DomainRouterJoinVO router, User user) { s_logger.debug("Attempting restart VPC " + router.getVpcName() + " for router recreation " + router.getUuid()); ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, - "Recreating router " + router.getUuid() + " by restarting VPC " + router.getVpcUuid(), router.getId(), ApiCommandJobType.DomainRouter.toString()); + "Recreating router " + router.getUuid() + " by restarting VPC " + router.getVpcUuid(), router.getId(), ApiCommandResourceType.DomainRouter.toString()); return vpcService.restartVpc(router.getVpcId(), true, false, user); } catch (Exception e) { s_logger.error("Failed to restart VPC for router recreation " + @@ -1291,7 +1291,7 @@ private boolean restartGuestNetworkInDomainRouter(DomainRouterJoinVO router, Use s_logger.info("Attempting restart network " + router.getNetworkName() + " for router recreation " + router.getUuid()); ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_ROUTER_HEALTH_CHECKS, - "Recreating router " + router.getUuid() + " by restarting network " + router.getNetworkUuid(), router.getId(), ApiCommandJobType.DomainRouter.toString()); + "Recreating router " + router.getUuid() + " by restarting network " + router.getNetworkUuid(), router.getId(), ApiCommandResourceType.DomainRouter.toString()); return networkService.restartNetwork(router.getNetworkId(), true, false, user); } catch (Exception e) { s_logger.error("Failed to restart network " + router.getNetworkName() + @@ -3219,7 +3219,7 @@ private List rebootRouters(final List routers) { params.put("id", "" + router.getId()); params.put("ctxStartEventId", "1"); final AsyncJobVO job = new AsyncJobVO("", User.UID_SYSTEM, router.getAccountId(), RebootRouterCmd.class.getName(), ApiGsonHelper.getBuilder().create().toJson(params), - router.getId(), cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null, null); + router.getId(), cmd.getApiResourceType() != null ? cmd.getApiResourceType().toString() : null, null); job.setDispatcher(_asyncDispatcher.getName()); final long jobId = _asyncMgr.submitAsyncJob(job); jobIds.add(jobId); diff --git a/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java b/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java index 255d08a31f18..8183eb794677 100644 --- a/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/RollingMaintenanceManagerImpl.java @@ -30,7 +30,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.affinity.AffinityGroupProcessor; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd; import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; import org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd; @@ -139,7 +139,7 @@ private void generateReportAndFinishingEvent(StartRollingMaintenanceCmd cmd, boo generateReportHostsUpdated(hostsUpdated), generateReportHostsSkipped(hostsSkipped)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_INFO, cmd.getEventType(), - "Completed rolling maintenance for entity " + entity + " with IDs: " + ids + " - " + description, null, ApiCommandJobType.Host.toString(), 0); + "Completed rolling maintenance for entity " + entity + " with IDs: " + ids + " - " + description, null, ApiCommandResourceType.Host.toString(), 0); } private String generateReportHostsUpdated(List hostsUpdated) { diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index b573af7dba1b..b37fd0a01789 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -33,13 +33,6 @@ import javax.inject.Inject; -import com.cloud.api.query.dao.ServiceOfferingJoinDao; -import com.cloud.api.query.vo.ServiceOfferingJoinVO; -import com.cloud.server.ManagementService; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.service.dao.ServiceOfferingDao; -import com.cloud.vm.DiskProfile; -import com.cloud.vm.UserVmDetailVO; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; @@ -99,6 +92,7 @@ import org.apache.cloudstack.utils.volume.VirtualMachineDiskInfo; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -109,6 +103,8 @@ import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.DiskTO; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.dao.ServiceOfferingJoinDao; +import com.cloud.api.query.vo.ServiceOfferingJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; @@ -137,8 +133,11 @@ import com.cloud.org.Grouping; import com.cloud.resource.ResourceState; import com.cloud.serializer.GsonHelper; +import com.cloud.server.ManagementService; import com.cloud.server.ResourceTag; import com.cloud.server.TaggedResourceService; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.service.dao.ServiceOfferingDetailsDao; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.dao.DiskOfferingDao; @@ -178,6 +177,8 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.fsm.StateMachine2; +import com.cloud.vm.DiskProfile; +import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.UserVmManager; import com.cloud.vm.UserVmService; import com.cloud.vm.UserVmVO; @@ -202,7 +203,6 @@ import com.cloud.vm.dao.VMInstanceDao; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; -import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; @@ -889,7 +889,7 @@ public VolumeVO doInTransaction(TransactionStatus status) { } CallContext.current().setEventDetails("Volume Id: " + volume.getUuid()); - + CallContext.current().putContextParameter(Volume.class, volume.getId()); // Increment resource count during allocation; if actual creation fails, // decrement it _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.volume, displayVolume); diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index fabe1aa8151f..734dff003589 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd; import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd; import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd; @@ -556,7 +556,7 @@ private void postCreateRecurringSnapshotForPolicy(long userId, long volumeId, lo if (deleteSnapshot(oldSnapId)) { //log Snapshot delete event ActionEventUtils.onCompletedActionEvent(User.UID_SYSTEM, oldestSnapshot.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_SNAPSHOT_DELETE, - "Successfully deleted oldest snapshot: " + oldSnapId, oldSnapId, ApiCommandJobType.Snapshot.toString(), 0); + "Successfully deleted oldest snapshot: " + oldSnapId, oldSnapId, ApiCommandResourceType.Snapshot.toString(), 0); } snaps.remove(oldestSnapshot); } diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index fcddf09f3665..4aa1449fc74f 100644 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -27,7 +27,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -301,7 +301,7 @@ protected void scheduleSnapshots() { tmpSnapshotScheduleVO = _snapshotScheduleDao.acquireInLockTable(snapshotScheId); final Long eventId = ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, volume.getAccountId(), EventTypes.EVENT_SNAPSHOT_CREATE, "creating snapshot for volume Id:" + - volume.getUuid(), volumeId, ApiCommandJobType.Volume.toString(), true, 0); + volume.getUuid(), volumeId, ApiCommandResourceType.Volume.toString(), true, 0); final Map params = new HashMap(); params.put(ApiConstants.VOLUME_ID, "" + volumeId); @@ -327,7 +327,7 @@ protected void scheduleSnapshots() { AsyncJobVO job = new AsyncJobVO("", User.UID_SYSTEM, volume.getAccountId(), CreateSnapshotCmd.class.getName(), ApiGsonHelper.getBuilder().create().toJson(params), cmd.getEntityId(), - cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null, null); + cmd.getApiResourceType() != null ? cmd.getApiResourceType().toString() : null, null); job.setDispatcher(_asyncDispatcher.getName()); final long jobId = _asyncMgr.submitAsyncJob(job); diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index 0bbf2a1835ac..0a460b1a7bf9 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -50,7 +50,7 @@ import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.dao.AffinityGroupDao; import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; @@ -1179,6 +1179,7 @@ public Pair doInTransaction(TransactionStatus status) { } CallContext.current().putContextParameter(Account.class, account.getUuid()); + CallContext.current().putContextParameter(User.class, userId); // check success return _userAccountDao.findById(userId); @@ -2338,7 +2339,7 @@ protected UserVO createUser(long accountId, String userName, String password, St public void logoutUser(long userId) { UserAccount userAcct = _userAccountDao.findById(userId); if (userAcct != null) { - ActionEventUtils.onActionEvent(userId, userAcct.getAccountId(), userAcct.getDomainId(), EventTypes.EVENT_USER_LOGOUT, "user has logged out", userId, ApiCommandJobType.User.toString()); + ActionEventUtils.onActionEvent(userId, userAcct.getAccountId(), userAcct.getDomainId(), EventTypes.EVENT_USER_LOGOUT, "user has logged out", userId, ApiCommandResourceType.User.toString()); } // else log some kind of error event? This likely means the user doesn't exist, or has been deleted... } @@ -2477,7 +2478,7 @@ public UserAccount authenticateUser(final String username, final String password s_logger.debug("User: " + username + " in domain " + domainId + " has successfully logged in"); } - ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in from IP Address " + loginIpAddress, user.getId(), ApiCommandJobType.User.toString()); + ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in from IP Address " + loginIpAddress, user.getId(), ApiCommandResourceType.User.toString()); return user; } else { diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 8dfaa1e6ca6a..5156b2f2c81f 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -62,7 +62,7 @@ import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.HTTPMethod; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; @@ -734,7 +734,7 @@ protected void runInContext() { decrementCount = false; ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_NETWORK_EXTERNAL_DHCP_VM_IPFETCH, - "VM " + vmId + " nic id " + nicId + " ip address " + vmIp + " got fetched successfully", vmId, ApiCommandJobType.VirtualMachine.toString()); + "VM " + vmId + " nic id " + nicId + " ip address " + vmIp + " got fetched successfully", vmId, ApiCommandResourceType.VirtualMachine.toString()); } } } else { @@ -2542,7 +2542,7 @@ protected void runInContext() { ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, Domain.ROOT_DOMAIN, EventTypes.EVENT_NETWORK_EXTERNAL_DHCP_VM_IPFETCH, - "VM " + vmId + " nic id "+ nicId + " ip addr fetch failed ", vmId, ApiCommandJobType.VirtualMachine.toString()); + "VM " + vmId + " nic id "+ nicId + " ip addr fetch failed ", vmId, ApiCommandResourceType.VirtualMachine.toString()); continue; } diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index c26abdb77676..9165c913c0aa 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -31,7 +31,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.backup.DeleteBackupOfferingCmd; import org.apache.cloudstack.api.command.admin.backup.ImportBackupOfferingCmd; @@ -946,7 +946,7 @@ public void scheduleBackups() { final Long eventId = ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, vm.getAccountId(), EventTypes.EVENT_VM_BACKUP_CREATE, "creating backup for VM ID:" + vm.getUuid(), - vmId, ApiCommandJobType.VirtualMachine.toString(), + vmId, ApiCommandResourceType.VirtualMachine.toString(), true, 0); final Map params = new HashMap(); params.put(ApiConstants.VIRTUAL_MACHINE_ID, "" + vmId); @@ -962,7 +962,7 @@ public void scheduleBackups() { AsyncJobVO job = new AsyncJobVO("", User.UID_SYSTEM, vm.getAccountId(), CreateBackupCmd.class.getName(), ApiGsonHelper.getBuilder().create().toJson(params), vmId, - cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null, null); + cmd.getApiResourceType() != null ? cmd.getApiResourceType().toString() : null, null); job.setDispatcher(asyncJobDispatcher.getName()); final long jobId = asyncJobManager.submitAsyncJob(job); diff --git a/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java index 03f06e48b028..87cf96eeb7d8 100644 --- a/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java @@ -48,7 +48,7 @@ import org.apache.cloudstack.agent.directdownload.NfsDirectDownloadCommand; import org.apache.cloudstack.agent.directdownload.RevokeDirectDownloadCertificateCommand; import org.apache.cloudstack.agent.directdownload.SetupDirectDownloadCertificateCommand; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -372,7 +372,7 @@ private void logUsageEvent(VMTemplateVO template, long poolId) { } String description = "Direct Download for template Id: " + template.getId() + " on pool Id: " + poolId + " failed"; s_logger.error(description); - ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), template.getAccountId(), EventVO.LEVEL_INFO, event, description, template.getId(), ApiCommandJobType.Template.toString(), 0); + ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), template.getAccountId(), EventVO.LEVEL_INFO, event, description, template.getId(), ApiCommandResourceType.Template.toString(), 0); } /** diff --git a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java index 9c68d6e3d142..5d045609f887 100644 --- a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java @@ -31,7 +31,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.admin.ha.ConfigureHAForHostCmd; @@ -161,7 +161,7 @@ public boolean transitionHAState(final HAConfig.Event event, final HAConfig haCo if (nextState == HAConfig.HAState.Recovering || nextState == HAConfig.HAState.Fencing || nextState == HAConfig.HAState.Fenced) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), - Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message, haConfig.getResourceId(), ApiCommandJobType.Host.toString()); + Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message, haConfig.getResourceId(), ApiCommandResourceType.Host.toString()); } } return result; diff --git a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java index 317219ac3331..39cea17d9f05 100644 --- a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java @@ -29,7 +29,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.response.OutOfBandManagementResponse; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.ConfigKey; @@ -216,7 +216,7 @@ private boolean transitionPowerState(OutOfBandManagement.PowerState.Event event, LOG.debug(message); if (newPowerState == OutOfBandManagement.PowerState.Unknown) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), Domain.ROOT_DOMAIN, - EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_POWERSTATE_TRANSITION, message, host.getId(), ApiCommandJobType.Host.toString()); + EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_POWERSTATE_TRANSITION, message, host.getId(), ApiCommandResourceType.Host.toString()); } } return result; diff --git a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java index b5ac11d675af..8d037f2fc993 100644 --- a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java +++ b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java @@ -17,7 +17,7 @@ package org.apache.cloudstack.outofbandmanagement; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.log4j.Logger; @@ -56,7 +56,7 @@ public void run() { .format("Error while issuing out-of-band management action %s for host: %s", powerOperation.name(), host.getName()); ActionEventUtils.onCreatedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_WARN, - EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_ACTION, true, eventMessage, host.getId(), ApiCommandJobType.Host.toString()); + EventTypes.EVENT_HOST_OUTOFBAND_MANAGEMENT_ACTION, true, eventMessage, host.getId(), ApiCommandResourceType.Host.toString()); } } } diff --git a/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java b/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java index ed936985a21e..3fb95d170344 100644 --- a/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java +++ b/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java @@ -20,7 +20,7 @@ import com.cloud.api.query.dao.AsyncJobJoinDaoImpl; import com.cloud.api.query.vo.AsyncJobJoinVO; -import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.junit.Assert; import org.junit.Test; @@ -50,7 +50,7 @@ public void testNewAsyncJobResponseValidValues() { ReflectionTestUtils.setField(job,"result",null); ReflectionTestUtils.setField(job,"created",new Date()); ReflectionTestUtils.setField(job,"removed",new Date()); - ReflectionTestUtils.setField(job,"instanceType",ApiCommandJobType.VirtualMachine); + ReflectionTestUtils.setField(job,"instanceType", ApiCommandResourceType.VirtualMachine); ReflectionTestUtils.setField(job,"instanceId",3L); final AsyncJobResponse response = dao.newAsyncJobResponse(job); Assert.assertEquals(job.getUuid(),response.getJobId()); From c7af47f2003c85a0570aec67fbf0195d57cb677e Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 25 Feb 2022 17:51:43 +0530 Subject: [PATCH 04/40] add resource anme to the response Signed-off-by: Abhishek Kumar --- .../java/org/apache/cloudstack/api/ApiConstants.java | 1 + .../cloudstack/api/response/EventResponse.java | 12 ++++++++++-- .../java/com/cloud/event/dao/EventJoinDaoImpl.java | 8 ++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 49444d554dc7..019091cae832 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -317,6 +317,7 @@ public class ApiConstants { public static final String RECONNECT = "reconnect"; public static final String RECOVER = "recover"; public static final String REQUIRES_HVM = "requireshvm"; + public static final String RESOURCE_NAME = "resourcename"; public static final String RESOURCE_TYPE = "resourcetype"; public static final String RESOURCE_TYPE_NAME = "resourcetypename"; public static final String RESPONSE = "response"; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java index 559781855329..1b29c798c735 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java @@ -70,13 +70,17 @@ public class EventResponse extends BaseResponse implements ControlledViewEntityR private String domainName; @SerializedName(ApiConstants.RESOURCE_ID) - @Param(description = "the id of the resource") + @Param(description = "the id of the resource", since = "4.17.0") private String resourceId; @SerializedName(ApiConstants.RESOURCE_TYPE) - @Param(description = "the type of the resource") + @Param(description = "the type of the resource", since = "4.17.0") private String resourceType; + @SerializedName(ApiConstants.RESOURCE_NAME) + @Param(description = "the name of the resource", since = "4.17.0") + private String resourceName; + @SerializedName(ApiConstants.CREATED) @Param(description = "the date the event was created") private Date created; @@ -132,6 +136,10 @@ public void setResourceType(String resourceType) { this.resourceType = resourceType; } + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + public void setCreated(Date created) { this.created = created; } diff --git a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java index 4c43fa0ead83..676ddae0a630 100644 --- a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.event.dao; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.List; import javax.inject.Inject; @@ -101,6 +103,12 @@ public EventResponse newEventResponse(EventJoinVO event) { if (objVO instanceof Identity) { responseEvent.setResourceId(((Identity)objVO).getUuid()); } + if (objVO != null) { + try { + Method m = objVO.getClass().getMethod("getName"); + responseEvent.setResourceName((String)m.invoke(objVO)); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) {} + } } ApiResponseHelper.populateOwner(responseEvent, event); responseEvent.setObjectName("event"); From 868dcc3ca5b407b5c00adc1ad4a297afe6d2951c Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 3 Mar 2022 11:40:07 +0530 Subject: [PATCH 05/40] changes Signed-off-by: Abhishek Kumar --- .../cloudstack/api/response/EventResponse.java | 12 ++++++++++++ .../java/com/cloud/event/ActionEventUtils.java | 2 +- .../com/cloud/server/ManagementServerImpl.java | 17 +++++++++-------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java index 1b29c798c735..a3ca777be5a3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java @@ -132,14 +132,26 @@ public void setResourceId(String resourceId) { this.resourceId = resourceId; } + public String getResourceId() { + return resourceId; + } + public void setResourceType(String resourceType) { this.resourceType = resourceType; } + public String getResourceType() { + return resourceType; + } + public void setResourceName(String resourceName) { this.resourceName = resourceName; } + public String getResourceName() { + return resourceName; + } + public void setCreated(Date created) { this.created = created; } diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index 9755eef7a1c5..e7a5f1853fa1 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -259,7 +259,7 @@ private static Ternary getResourceDetailsUsingEventTypeAnd if (param instanceof Long) { entityId = (Long)param; } else if (entityUuid != null) { - Object obj = s_entityMgr.findByUuid(entityClass, entityUuid); + Object obj = s_entityMgr.findByUuidIncludingRemoved(entityClass, entityUuid); if (obj instanceof InternalIdentity) { entityId = ((InternalIdentity)obj).getId(); } diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 3bfc7bae61e2..20c70479171e 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -48,6 +48,7 @@ import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd; import org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd; @@ -3789,10 +3790,10 @@ public VirtualMachine startSystemVM(final long vmId) { } if (systemVm.getType() == VirtualMachine.Type.ConsoleProxy) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_START, "starting console proxy Vm", vmId, null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_START, "starting console proxy Vm", vmId, ApiCommandResourceType.ConsoleProxy.toString()); return startConsoleProxy(vmId); } else if (systemVm.getType() == VirtualMachine.Type.SecondaryStorageVm) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_START, "starting secondary storage Vm", vmId, null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_START, "starting secondary storage Vm", vmId, ApiCommandResourceType.SystemVm.toString()); return startSecondaryStorageVm(vmId); } else { final InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm with specified vmId"); @@ -3816,10 +3817,10 @@ public VMInstanceVO stopSystemVM(final StopSystemVmCmd cmd) throws ResourceUnava try { if (systemVm.getType() == VirtualMachine.Type.ConsoleProxy) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_STOP, "stopping console proxy Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_STOP, "stopping console proxy Vm", systemVm.getId(), ApiCommandResourceType.ConsoleProxy.toString()); return stopConsoleProxy(systemVm, cmd.isForced()); } else if (systemVm.getType() == VirtualMachine.Type.SecondaryStorageVm) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_STOP, "stopping secondary storage Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_STOP, "stopping secondary storage Vm", systemVm.getId(), ApiCommandResourceType.SystemVm.toString()); return stopSecondaryStorageVm(systemVm, cmd.isForced()); } return null; @@ -3840,13 +3841,13 @@ public VMInstanceVO rebootSystemVM(final RebootSystemVmCmd cmd) { try { if (systemVm.getType().equals(VirtualMachine.Type.ConsoleProxy)) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_REBOOT, "rebooting console proxy Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_REBOOT, "rebooting console proxy Vm", systemVm.getId(), ApiCommandResourceType.ConsoleProxy.toString()); if (cmd.isForced()) { return forceRebootConsoleProxy(systemVm); } return rebootConsoleProxy(cmd.getId()); } else { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_REBOOT, "rebooting secondary storage Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_REBOOT, "rebooting secondary storage Vm", systemVm.getId(), ApiCommandResourceType.SystemVm.toString()); if (cmd.isForced()) { return forceRebootSecondaryStorageVm(systemVm); } @@ -3871,10 +3872,10 @@ public VMInstanceVO destroySystemVM(final DestroySystemVmCmd cmd) { } if (systemVm.getType().equals(VirtualMachine.Type.ConsoleProxy)) { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_DESTROY, "destroying console proxy Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_PROXY_DESTROY, "destroying console proxy Vm", systemVm.getId(), ApiCommandResourceType.ConsoleProxy.toString()); return destroyConsoleProxy(cmd.getId()); } else { - ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_DESTROY, "destroying secondary storage Vm", systemVm.getId(), null); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_SSVM_DESTROY, "destroying secondary storage Vm", systemVm.getId(), ApiCommandResourceType.SystemVm.toString()); return destroySecondaryStorageVm(cmd.getId()); } } From 3a16daf249095ea6910264235d9d4f63b0e802a7 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 3 Mar 2022 12:09:05 +0530 Subject: [PATCH 06/40] test Signed-off-by: Abhishek Kumar --- .../api/ApiCommandResourceTypeTest.java | 54 +++++++++++++ .../java/com/cloud/api/ApiDispatcherTest.java | 77 +++++++++++++++++++ .../com/cloud/event/ActionEventUtilsTest.java | 72 +++++++++++++++-- .../cloud/event/dao/EventJoinDaoImplTest.java | 50 ++++++++++++ 4 files changed, 245 insertions(+), 8 deletions(-) create mode 100644 api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java create mode 100644 server/src/test/java/com/cloud/api/ApiDispatcherTest.java create mode 100644 server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java diff --git a/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java b/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java new file mode 100644 index 000000000000..f0756facc925 --- /dev/null +++ b/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java @@ -0,0 +1,54 @@ +package org.apache.cloudstack.api; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import com.cloud.domain.Domain; +import com.cloud.network.Network; +import com.cloud.storage.Volume; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; +import com.cloud.vm.VirtualMachine; + +public class ApiCommandResourceTypeTest { + + @Test + public void testGetAssociatedClass() { + Assert.assertNull(ApiCommandResourceType.None.getAssociatedClass()); + Assert.assertEquals(Account.class, ApiCommandResourceType.Account.getAssociatedClass()); + Assert.assertEquals(Domain.class, ApiCommandResourceType.Domain.getAssociatedClass()); + Assert.assertEquals(VirtualMachineTemplate.class, ApiCommandResourceType.Template.getAssociatedClass()); + Assert.assertEquals(VirtualMachine.class, ApiCommandResourceType.VirtualMachine.getAssociatedClass()); + Assert.assertEquals(Network.class, ApiCommandResourceType.Network.getAssociatedClass()); + Assert.assertEquals(Volume.class, ApiCommandResourceType.Volume.getAssociatedClass()); + } + + @Test + public void testValuesFromAssociatedClass() { + List types = ApiCommandResourceType.valuesFromAssociatedClass(Account.class); + Assert.assertNotNull(types); + Assert.assertTrue(types.size() > 0); + Assert.assertEquals(types.get(0), ApiCommandResourceType.Account); + + types = ApiCommandResourceType.valuesFromAssociatedClass(ApiCommandResourceTypeTest.class); + Assert.assertNotNull(types); + Assert.assertEquals(0, types.size()); + } + + @Test + public void testValueFromAssociatedClass() { + Assert.assertEquals(ApiCommandResourceType.valueFromAssociatedClass(VirtualMachine.class), ApiCommandResourceType.VirtualMachine); + Assert.assertNull(ApiCommandResourceType.valueFromAssociatedClass(ApiCommandResourceTypeTest.class)); + } + + @Test + public void testFromString() { + Assert.assertNull(ApiCommandResourceType.fromString(null)); + Assert.assertNull(ApiCommandResourceType.fromString("")); + Assert.assertNull(ApiCommandResourceType.fromString("Something")); + Assert.assertEquals(ApiCommandResourceType.Account, ApiCommandResourceType.fromString("Account")); + Assert.assertEquals(ApiCommandResourceType.Domain, ApiCommandResourceType.fromString("Domain")); + } +} \ No newline at end of file diff --git a/server/src/test/java/com/cloud/api/ApiDispatcherTest.java b/server/src/test/java/com/cloud/api/ApiDispatcherTest.java new file mode 100644 index 000000000000..5101b5f791a9 --- /dev/null +++ b/server/src/test/java/com/cloud/api/ApiDispatcherTest.java @@ -0,0 +1,77 @@ +package com.cloud.api; + +import java.util.HashMap; + +import org.apache.cloudstack.api.ApiCommandResourceType; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.context.CallContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.springframework.test.util.ReflectionTestUtils; + +import com.cloud.api.dispatch.DispatchChain; +import com.cloud.api.dispatch.DispatchTask; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; + +public class ApiDispatcherTest { + protected static final Long resourceId = 1L; + protected static final ApiCommandResourceType resourceType = ApiCommandResourceType.Account; + + ApiDispatcher apiDispatcher; + + @Before + public void injectMocks() throws SecurityException, NoSuchFieldException, + IllegalArgumentException, IllegalAccessException { + apiDispatcher = new ApiDispatcher(); + DispatchChain dispatchChain = Mockito.mock(DispatchChain.class); + Mockito.doNothing().when(dispatchChain).dispatch(Mockito.any(DispatchTask.class)); + ReflectionTestUtils.setField(apiDispatcher, "standardDispatchChain", dispatchChain); + } + + @Test + public void testBaseCmdDispatchCallContext() { + TesBaseCmd cmd = new TesBaseCmd(); + try { + apiDispatcher.dispatch(cmd, new HashMap(), false); + } catch (Exception e) { + e.printStackTrace(); + } + Assert.assertEquals(CallContext.current().getEventResourceId(), resourceId); + Assert.assertEquals(CallContext.current().getEventResourceType(), resourceType); + } + + protected class TesBaseCmd extends BaseCmd { + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { + + } + + @Override + public String getCommandName() { + return "testCommand"; + } + + @Override + public long getEntityOwnerId() { + return 1L; + } + + @Override + public Long getApiResourceId() { + return resourceId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return resourceType; + } + } +} \ No newline at end of file diff --git a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java index 52d815aca938..86d652847926 100644 --- a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java +++ b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java @@ -25,6 +25,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.framework.events.Event; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -71,6 +72,7 @@ public class ActionEventUtilsTest { //static/inject pattern found in ActionEventUtils. protected Map staticFieldValues = new HashMap<>(); + protected List persistedEvents = new ArrayList<>(); //List of events published on the event bus. Handled via a mocked method. //Cleared on every run. protected List publishedEvents = new ArrayList<>(); @@ -97,6 +99,9 @@ public class ActionEventUtilsTest { @Mock protected EventBus eventBus; + private AccountVO account; + private UserVO user; + /** * This setup method injects the mocked beans into the ActionEventUtils class. * Because ActionEventUtils has static methods, we must also remember these fields @@ -153,6 +158,7 @@ public EventVO answer(InvocationOnMock invocation) throws Throwable { Field id = event.getClass().getDeclaredField("id"); id.setAccessible(true); id.set(event, EVENT_ID); + persistedEvents.add(event); return event; } }); @@ -166,6 +172,14 @@ public EventVO answer(InvocationOnMock invocation) throws Throwable { } }).when(eventBus).publish(Mockito.any(Event.class)); + + account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid"); + account.setId(ACCOUNT_ID); + user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", + UUID.randomUUID().toString(), User.Source.UNKNOWN); + + Mockito.when(accountDao.findById(ACCOUNT_ID)).thenReturn(account); + Mockito.when(userDao.findById(USER_ID)).thenReturn(user); } /** @@ -192,14 +206,6 @@ public void teardown() { @Test public void testPopulateFirstClassEntities() { - AccountVO account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid"); - account.setId(ACCOUNT_ID); - UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", - UUID.randomUUID().toString(), User.Source.UNKNOWN); - - Mockito.when(accountDao.findById(ACCOUNT_ID)).thenReturn(account); - Mockito.when(userDao.findById(USER_ID)).thenReturn(user); - CallContext.register(user, account); //Inject some entity UUIDs into the call context @@ -226,4 +232,54 @@ public void testPopulateFirstClassEntities() { CallContext.unregister(); } + + private void checkEventResourceAdUnregisterContext(Long resourceId, String resourceUuid, String resourceType) { + Assert.assertNotEquals(publishedEvents.size(), 0); + Assert.assertEquals(publishedEvents.size(), 1); + Event event = publishedEvents.get(0); + JsonObject json = new JsonParser().parse(event.getDescription()).getAsJsonObject(); + Assert.assertTrue(json.has("entity")); + Assert.assertTrue(json.has("entityuuid")); + Assert.assertEquals(json.get("entity").getAsString(), resourceType); + Assert.assertEquals(json.get("entityuuid").getAsString(), resourceUuid); + + Assert.assertNotEquals(persistedEvents.size(), 0); + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getResourceType(), resourceType); + Assert.assertEquals(eventVO.getResourceId(), resourceId); + + CallContext.unregister(); + } + + @Test + public void testPublishedEventResource() { + CallContext.register(user, account); + + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getUuid()).thenReturn(resourceUuid); + Mockito.when(entityMgr.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); + ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", resourceId, resourceType); + + checkEventResourceAdUnregisterContext(resourceId, resourceUuid, resourceType); + } + + @Test + public void testPublishedEventResourceWithCallContext() { + CallContext.register(user, account); + + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getId()).thenReturn(resourceId); + Mockito.when(entityMgr.findByUuidIncludingRemoved(VirtualMachine.class, resourceUuid)).thenReturn(vm); + CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); + ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", null, null); + + checkEventResourceAdUnregisterContext(resourceId, resourceUuid, resourceType); + } } diff --git a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java new file mode 100644 index 000000000000..ffc69165a423 --- /dev/null +++ b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java @@ -0,0 +1,50 @@ +package com.cloud.event.dao; + +import java.util.UUID; + +import org.apache.cloudstack.api.ApiCommandResourceType; +import org.apache.cloudstack.api.response.EventResponse; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.db.EntityManager; +import com.cloud.vm.VirtualMachine; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(ComponentContext.class) +public class EventJoinDaoImplTest { + + @Mock + protected EntityManager entityManager; + + @InjectMocks + private EventJoinDaoImpl dao = new EventJoinDaoImpl(); + + @Test + public void testNewEventViewResource() { + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + final String resourceName = "TestVM"; + EventJoinVO event = Mockito.mock(EventJoinVO.class); + Mockito.when(event.getResourceId()).thenReturn(resourceId); + Mockito.when(event.getResourceType()).thenReturn(resourceType); + Mockito.when(event.getResourceType()).thenReturn(resourceType); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getUuid()).thenReturn(resourceUuid); + Mockito.when(vm.getName()).thenReturn(resourceName); + Mockito.when(entityManager.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); + EventResponse response = dao.newEventResponse(event); + Assert.assertEquals(response.getResourceId(), resourceUuid); + Assert.assertEquals(response.getResourceType(), resourceType); + Assert.assertEquals(response.getResourceName(), resourceName); + } +} \ No newline at end of file From 4fa055b06c78f861ec04ede4c87b8ef29e91d98e Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 3 Mar 2022 14:52:29 +0530 Subject: [PATCH 07/40] more tests Signed-off-by: Abhishek Kumar --- .../event/ActionEventInterceptorTest.java | 278 ++++++++++++++++++ .../com/cloud/event/ActionEventUtilsTest.java | 80 ++++- 2 files changed, 353 insertions(+), 5 deletions(-) create mode 100644 server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java diff --git a/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java b/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java new file mode 100644 index 000000000000..bf58d301459f --- /dev/null +++ b/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java @@ -0,0 +1,278 @@ +package com.cloud.event; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.inject.Inject; + +import org.aopalliance.intercept.MethodInvocation; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.events.Event; +import org.apache.cloudstack.framework.events.EventBus; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import com.cloud.configuration.Config; +import com.cloud.event.dao.EventDao; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.user.AccountVO; +import com.cloud.user.User; +import com.cloud.user.UserVO; +import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.db.EntityManager; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(ComponentContext.class) +public class ActionEventInterceptorTest { + //Predictable constants used throughout this test. + public static final long EVENT_ID = 1; + public static final long USER_ID = 1; + public static final long ACCOUNT_ID = 1; + + //Keep track of the static field values between tests. + //A horrid abuse of reflection required due to the strange + //static/inject pattern found in ActionEventUtils. + protected Map staticFieldValues = new HashMap<>(); + + protected List persistedEvents = new ArrayList<>(); + //List of events published on the event bus. Handled via a mocked method. + //Cleared on every run. + protected List publishedEvents = new ArrayList<>(); + + //Mock fields. These are injected into ActionEventUtils by the setup() method. + @Mock + protected EventDao eventDao; + + @Mock + protected AccountDao accountDao; + + @Mock + protected UserDao userDao; + + @Mock + protected ProjectDao projectDao; + + @Mock + protected EntityManager entityMgr; + + @Mock + protected ConfigurationDao configDao; + + @Mock + protected EventBus eventBus; + + private AccountVO account; + private UserVO user; + + @InjectMocks + private ActionEventInterceptor actionEventInterceptor = new ActionEventInterceptor(); + + protected static final String eventType = EventTypes.EVENT_VM_START; + protected static final String eventDescription = "Starting VM"; + + /** + * This setup method injects the mocked beans into the ActionEventUtils class. + * Because ActionEventUtils has static methods, we must also remember these fields + * and restore them later, as otherwise strange behavior can result in other unit + * tests due to the way the JVM handles static fields. + * @throws Exception + */ + @Before + public void setup() throws Exception { + publishedEvents = new ArrayList<>(); + staticFieldValues = new HashMap<>(); + setupCommonMocks(); + + ActionEventUtils utils = new ActionEventUtils(); + + for (Field field : ActionEventUtils.class.getDeclaredFields()) { + if (field.getAnnotation(Inject.class) != null) { + field.setAccessible(true); + + try { + //Inject the mocked field from this class into the ActionEventUtils + //and keep track of its original value. + Field mockField = this.getClass().getDeclaredField(field.getName()); + field.set(utils, mockField.get(this)); + Field staticField = ActionEventUtils.class.getDeclaredField("s_" + field.getName()); + staticFieldValues.put(field.getName(), staticField.get(null)); + } + catch (Exception e) { + // ignore missing fields + } + } + } + + utils.init(); + } + + /** + * Set up the common specialized mocks that are needed to make the ActionEventUtils class behave in a + * predictable way. This method only mocks things that are common to all the tests. Each individual test + * also mocks some other methods (e.g. find user/account) by itself. + */ + public void setupCommonMocks() throws Exception { + //Some basic mocks. + Mockito.when(configDao.getValue(Config.PublishActionEvent.key())).thenReturn("true"); + PowerMockito.mockStatic(ComponentContext.class); + Mockito.when(ComponentContext.getComponent(EventBus.class)).thenReturn(eventBus); + + //Needed for persist to actually set an ID that can be returned from the ActionEventUtils + //methods. + Mockito.when(eventDao.persist(Mockito.any(EventVO.class))).thenAnswer(new Answer() { + @Override + public EventVO answer(InvocationOnMock invocation) throws Throwable { + EventVO event = (EventVO)invocation.getArguments()[0]; + Field id = event.getClass().getDeclaredField("id"); + id.setAccessible(true); + id.set(event, EVENT_ID); + persistedEvents.add(event); + return event; + } + }); + + //Needed to record events published on the bus. + Mockito.doAnswer(new Answer() { + @Override public Void answer(InvocationOnMock invocation) throws Throwable { + Event event = (Event)invocation.getArguments()[0]; + publishedEvents.add(event); + return null; + } + + }).when(eventBus).publish(Mockito.any(Event.class)); + + account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid"); + account.setId(ACCOUNT_ID); + user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", + UUID.randomUUID().toString(), User.Source.UNKNOWN); + + Mockito.when(accountDao.findById(ACCOUNT_ID)).thenReturn(account); + Mockito.when(userDao.findById(USER_ID)).thenReturn(user); + } + + /** + * This teardown method restores the ActionEventUtils static field values to their original values, + * keeping the mocked mess inside this class. + */ + @After + public void teardown() { + ActionEventUtils utils = new ActionEventUtils(); + + for (String fieldName : staticFieldValues.keySet()) { + try { + Field field = ActionEventUtils.class.getDeclaredField(fieldName); + field.setAccessible(true); + field.set(utils, staticFieldValues.get(fieldName)); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + utils.init(); + } + + @Test + public void testInvokeSuccess() throws Throwable { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + MethodInvocation invocation = Mockito.mock(MethodInvocation.class); + Method m = tester.getClass().getMethod("testMethod"); + Mockito.when(invocation.getMethod()).thenReturn(m); + Mockito.when(invocation.getThis()).thenReturn(tester); + Boolean o = tester.testMethod(); + Mockito.when(invocation.proceed()).thenReturn(o); + Object result = actionEventInterceptor.invoke(invocation); + Assert.assertEquals(result, o); + } + + @Test + public void testInterceptStartNonAsync() throws NoSuchMethodException { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod1"); + Object event = actionEventInterceptor.interceptStart(m, tester); + Assert.assertNull(event); + } + + @Test + public void testInterceptStartAsync() throws NoSuchMethodException { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod"); + Object event = actionEventInterceptor.interceptStart(m, tester); + Assert.assertNull(event); + + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getType(), EventTypes.EVENT_VM_START); + Assert.assertEquals(eventVO.getDescription(), "Starting VM"); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Started); + } + + @Test + public void testInterceptComplete() throws NoSuchMethodException { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod"); + actionEventInterceptor.interceptComplete(m, tester, null); + + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getType(), eventType); + Assert.assertTrue(eventVO.getDescription().endsWith(eventDescription)); + Assert.assertEquals(eventVO.getLevel(), EventVO.LEVEL_INFO); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Completed); + } + + @Test + public void testInterceptException() throws NoSuchMethodException { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod"); + actionEventInterceptor.interceptException(m, tester, null); + + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getType(), eventType); + Assert.assertTrue(eventVO.getDescription().endsWith(eventDescription)); + Assert.assertEquals(eventVO.getLevel(), EventVO.LEVEL_ERROR); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Completed); + } + + @Test + public void testNeedToIntercept() throws NoSuchMethodException { + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod"); + Assert.assertTrue(actionEventInterceptor.needToIntercept(m)); + m = tester.getClass().getMethod("noEventMethod"); + Assert.assertFalse(actionEventInterceptor.needToIntercept(m)); + } + + protected class TestActionEventManagerImpl { + @ActionEvent(eventType = ActionEventInterceptorTest.eventType, eventDescription = ActionEventInterceptorTest.eventDescription, async = true) + public Boolean testMethod() { + return true; + } + @ActionEvent(eventType = ActionEventInterceptorTest.eventType, eventDescription = ActionEventInterceptorTest.eventDescription) + public Boolean testMethod1() { + return false; + } + public Boolean noEventMethod() { + return false; + } + } +} \ No newline at end of file diff --git a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java index 86d652847926..239e3bd886ae 100644 --- a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java +++ b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java @@ -233,8 +233,7 @@ public void testPopulateFirstClassEntities() { CallContext.unregister(); } - private void checkEventResourceAdUnregisterContext(Long resourceId, String resourceUuid, String resourceType) { - Assert.assertNotEquals(publishedEvents.size(), 0); + private void checkEventResourceAndUnregisterContext(Long resourceId, String resourceUuid, String resourceType) { Assert.assertEquals(publishedEvents.size(), 1); Event event = publishedEvents.get(0); JsonObject json = new JsonParser().parse(event.getDescription()).getAsJsonObject(); @@ -243,7 +242,6 @@ private void checkEventResourceAdUnregisterContext(Long resourceId, String resou Assert.assertEquals(json.get("entity").getAsString(), resourceType); Assert.assertEquals(json.get("entityuuid").getAsString(), resourceUuid); - Assert.assertNotEquals(persistedEvents.size(), 0); Assert.assertEquals(persistedEvents.size(), 1); EventVO eventVO = persistedEvents.get(0); Assert.assertEquals(eventVO.getResourceType(), resourceType); @@ -264,7 +262,7 @@ public void testPublishedEventResource() { Mockito.when(entityMgr.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", resourceId, resourceType); - checkEventResourceAdUnregisterContext(resourceId, resourceUuid, resourceType); + checkEventResourceAndUnregisterContext(resourceId, resourceUuid, resourceType); } @Test @@ -280,6 +278,78 @@ public void testPublishedEventResourceWithCallContext() { CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", null, null); - checkEventResourceAdUnregisterContext(resourceId, resourceUuid, resourceType); + checkEventResourceAndUnregisterContext(resourceId, resourceUuid, resourceType); + } + + @Test + public void testScheduledEvent() { + CallContext.register(user, account); + + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getId()).thenReturn(resourceId); + Mockito.when(entityMgr.findByUuidIncludingRemoved(VirtualMachine.class, resourceUuid)).thenReturn(vm); + CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); + ActionEventUtils.onScheduledActionEvent(USER_ID, ACCOUNT_ID, EventTypes.EVENT_VM_START, "Test event", resourceId, resourceType, true, 0L); + + + Assert.assertEquals(publishedEvents.size(), 1); + Event event = publishedEvents.get(0); + JsonObject json = new JsonParser().parse(event.getDescription()).getAsJsonObject(); + Assert.assertTrue(json.has("status")); + Assert.assertEquals(json.get("status").getAsString(), com.cloud.event.Event.State.Scheduled.toString()); + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Scheduled); + + CallContext.unregister(); + } + + @Test + public void testCreatedEvent() { + CallContext.register(user, account); + + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getId()).thenReturn(resourceId); + Mockito.when(entityMgr.findByUuidIncludingRemoved(VirtualMachine.class, resourceUuid)).thenReturn(vm); + CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); + ActionEventUtils.onCreatedActionEvent(USER_ID, ACCOUNT_ID, EventVO.LEVEL_INFO, EventTypes.EVENT_VM_START, true, "Test event", resourceId, resourceType); + + + Assert.assertEquals(publishedEvents.size(), 1); + Event event = publishedEvents.get(0); + JsonObject json = new JsonParser().parse(event.getDescription()).getAsJsonObject(); + Assert.assertTrue(json.has("status")); + Assert.assertEquals(json.get("status").getAsString(), com.cloud.event.Event.State.Created.toString()); + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Created); + + CallContext.unregister(); + } + + @Test + public void testNestedEvent() { + CallContext.register(user, account); + + final Long resourceId = 1L; + final String resourceType = ApiCommandResourceType.VirtualMachine.toString(); + final String resourceUuid = UUID.randomUUID().toString(); + VirtualMachine vm = Mockito.mock(VirtualMachine.class); + Mockito.when(vm.getId()).thenReturn(resourceId); + Mockito.when(entityMgr.findByUuidIncludingRemoved(VirtualMachine.class, resourceUuid)).thenReturn(vm); + CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); + ActionEventUtils.startNestedActionEvent(EventTypes.EVENT_VM_START, "Test event", resourceId, resourceType); + + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Started); + + CallContext.unregister(); } } From be0e9f110098b394ffe8b5c4114942ecca6ff797 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 3 Mar 2022 14:57:39 +0530 Subject: [PATCH 08/40] new line Signed-off-by: Abhishek Kumar --- .../org/apache/cloudstack/api/ApiCommandResourceTypeTest.java | 2 +- .../src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java b/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java index f0756facc925..949ae1bd6dfc 100644 --- a/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java +++ b/api/src/test/java/org/apache/cloudstack/api/ApiCommandResourceTypeTest.java @@ -51,4 +51,4 @@ public void testFromString() { Assert.assertEquals(ApiCommandResourceType.Account, ApiCommandResourceType.fromString("Account")); Assert.assertEquals(ApiCommandResourceType.Domain, ApiCommandResourceType.fromString("Domain")); } -} \ No newline at end of file +} diff --git a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java index ffc69165a423..6deeafbc3410 100644 --- a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java +++ b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java @@ -47,4 +47,4 @@ public void testNewEventViewResource() { Assert.assertEquals(response.getResourceType(), resourceType); Assert.assertEquals(response.getResourceName(), resourceName); } -} \ No newline at end of file +} From 4c154f2e17dfc63d5f96a1555a3ac73aaa721745 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 4 Mar 2022 10:28:53 +0530 Subject: [PATCH 09/40] add resource test Signed-off-by: Abhishek Kumar --- .../event/ActionEventInterceptorTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java b/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java index bf58d301459f..3612eb3561e1 100644 --- a/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java +++ b/server/src/test/java/com/cloud/event/ActionEventInterceptorTest.java @@ -11,6 +11,8 @@ import javax.inject.Inject; import org.aopalliance.intercept.MethodInvocation; +import org.apache.cloudstack.api.ApiCommandResourceType; +import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.events.Event; import org.apache.cloudstack.framework.events.EventBus; @@ -253,6 +255,28 @@ public void testInterceptException() throws NoSuchMethodException { Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Completed); } + @Test + public void testInterceptExceptionResource() throws NoSuchMethodException { + CallContext.register(user, account); + Long resourceId = 1L; + ApiCommandResourceType resourceType = ApiCommandResourceType.VirtualMachine; + CallContext.current().setEventResourceId(resourceId); + CallContext.current().setEventResourceType(resourceType); + TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); + Method m = tester.getClass().getMethod("testMethod"); + actionEventInterceptor.interceptException(m, tester, null); + + Assert.assertEquals(persistedEvents.size(), 1); + EventVO eventVO = persistedEvents.get(0); + Assert.assertEquals(eventVO.getType(), eventType); + Assert.assertTrue(eventVO.getDescription().endsWith(eventDescription)); + Assert.assertEquals(eventVO.getLevel(), EventVO.LEVEL_ERROR); + Assert.assertEquals(eventVO.getState(), com.cloud.event.Event.State.Completed); + Assert.assertEquals(eventVO.getResourceId(), resourceId); + Assert.assertEquals(eventVO.getResourceType(), resourceType.toString()); + CallContext.unregister(); + } + @Test public void testNeedToIntercept() throws NoSuchMethodException { TestActionEventManagerImpl tester = new TestActionEventManagerImpl(); From 4d5d1f1c05b50f69b1c5e8fc57629aff9f1f2124 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 7 Mar 2022 15:16:55 +0530 Subject: [PATCH 10/40] changes Signed-off-by: Abhishek Kumar --- .../admin/backup/UpdateBackupOfferingCmd.java | 11 +++++ .../network/UpdateNetworkOfferingCmd.java | 11 +++++ .../admin/offering/UpdateDiskOfferingCmd.java | 11 +++++ .../offering/UpdateServiceOfferingCmd.java | 11 +++++ .../admin/vpc/UpdateVPCOfferingCmd.java | 11 +++++ .../api/command/user/iso/AttachIsoCmd.java | 11 +++++ .../api/command/user/iso/DetachIsoCmd.java | 11 +++++ .../api/command/user/iso/RegisterIsoCmd.java | 6 +++ .../api/command/user/iso/UpdateIsoCmd.java | 11 +++++ .../user/template/UpdateTemplateCmd.java | 11 +++++ .../cloud/template/TemplateManagerImpl.java | 2 + ui/src/components/view/ListView.vue | 9 ++++ ui/src/config/section/event.js | 2 +- ui/src/utils/plugins.js | 44 +++++++++++++++++++ 14 files changed, 161 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/UpdateBackupOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/UpdateBackupOfferingCmd.java index 6e4baaedd3d5..76669ef5662d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/UpdateBackupOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/UpdateBackupOfferingCmd.java @@ -19,6 +19,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -104,4 +105,14 @@ public String getCommandName() { public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.BackupOffering; + } } \ No newline at end of file diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index 3e4b528acf46..61a2d8a8fdc9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -20,6 +20,7 @@ import java.util.List; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -203,6 +204,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkOffering; + } + @Override public void execute() { NetworkOffering result = _configService.updateNetworkOffering(this); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index b0e2262aff9d..f05c74eef7c6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -279,6 +280,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.DiskOffering; + } + @Override public void execute() { DiskOffering result = _configService.updateDiskOffering(this); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 487cb534d509..42532932dca6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -189,6 +190,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.ServiceOffering; + } + @Override public void execute() { //Note diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 23279e652c03..0d1a57a6612a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -20,6 +20,7 @@ import java.util.List; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -191,4 +192,14 @@ public String getEventType() { public String getEventDescription() { return "Updating VPC offering id=" + getId(); } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VpcOffering; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index 74a98beef9d6..e37820482c0d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -103,6 +104,16 @@ public String getEventDescription() { return "attaching ISO: " + getId() + " to VM: " + getVirtualMachineId(); } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; + } + @Override public void execute() { CallContext.current().setEventDetails("Vm Id: " + getVirtualMachineId() + " ISO ID: " + getId()); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index 4f4a0197ac75..e3b22c4a49f7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -93,6 +94,16 @@ public String getEventDescription() { return "detaching ISO from VM: " + getVirtualMachineId(); } + @Override + public Long getApiResourceId() { + return virtualMachineId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } + @Override public void execute() { boolean result = _templateService.detachIso(virtualMachineId, isForced()); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index 1c1a767aa3bc..47018b3b38d0 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -19,6 +19,7 @@ import java.util.List; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -242,6 +243,11 @@ public long getEntityOwnerId() { return accountId; } + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; + } + @Override public void execute() throws ResourceAllocationException { VirtualMachineTemplate template = _templateService.registerIso(this); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index 36e9b5329e17..58c475c661e3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -68,6 +69,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return getId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; + } + @Override public void execute() { VirtualMachineTemplate result = _templateService.updateTemplate(this); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index 8396b078c157..edb886624ce7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.template; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -79,6 +80,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return getId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Iso; + } + @Override public void execute() { VirtualMachineTemplate result = _templateService.updateTemplate(this); diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java index bf486d1d3757..fc36aa34f8c9 100755 --- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java @@ -324,6 +324,7 @@ public VirtualMachineTemplate registerIso(RegisterIsoCmd cmd) throws ResourceAll VMTemplateVO template = adapter.create(profile); if (template != null) { + CallContext.current().putContextParameter(VirtualMachineTemplate.class, template.getUuid()); return template; } else { throw new CloudRuntimeException("Failed to create ISO"); @@ -350,6 +351,7 @@ public VirtualMachineTemplate registerTemplate(RegisterTemplateCmd cmd) throws U VMTemplateVO template = adapter.create(profile); if (template != null) { + CallContext.current().putContextParameter(VirtualMachineTemplate.class, template.getUuid()); return template; } else { throw new CloudRuntimeException("Failed to create a template"); diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index 36f4b2f997cf..6fe1c99ba414 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -249,6 +249,15 @@ {{ text }} + + + + + {{ record.resourcename || record.resourceid }} + + + {{ text }} + {{ text }} {{ text }} diff --git a/ui/src/config/section/event.js b/ui/src/config/section/event.js index ebdbba3c4497..d34e037c3a51 100644 --- a/ui/src/config/section/event.js +++ b/ui/src/config/section/event.js @@ -21,7 +21,7 @@ export default { icon: 'schedule', docHelp: 'adminguide/events.html', permission: ['listEvents'], - columns: ['level', 'type', 'state', 'description', 'resourcetype', 'resourceid', 'username', 'account', 'domain', 'created'], + columns: ['level', 'type', 'state', 'description', 'resource', 'username', 'account', 'domain', 'created'], details: ['username', 'id', 'description', 'state', 'level', 'type', 'account', 'domain', 'created'], searchFilters: ['level', 'domainid', 'account', 'keyword'], related: [{ diff --git a/ui/src/utils/plugins.js b/ui/src/utils/plugins.js index f570eb0b1899..c085b35d28ea 100644 --- a/ui/src/utils/plugins.js +++ b/ui/src/utils/plugins.js @@ -353,6 +353,50 @@ export const resourceTypePlugin = { return type } } + + Vue.prototype.$getRouteFromResourceType = function (resourceType) { + switch (resourceType) { + case 'VirtualMachine': + return 'vm' + case 'DomainRouter': + return 'router' + case 'ConsoleProxy': + return 'systemvm' + case 'User': + return 'accountuser' + case 'Network': + return 'guestnetwork' + case 'ServiceOffering': + return 'computeoffering' + case 'SystemVm': + case 'PhysicalNetwork': + case 'Backup': + case 'SecurityGroup': + case 'StoragePool': + case 'ImageStore': + case 'Template': + case 'Iso': + case 'Host': + case 'Volume': + case 'Account': + case 'Snapshot': + case 'Project': + case 'Domain': + case 'DiskOffering': + case 'NetworkOffering': + case 'VpcOffering': + case 'BackupOffering': + return resourceType.toLowerCase() + } + return '' + } + + Vue.prototype.$getIconFromResourceType = function (resourceType) { + var routePath = this.$getRouteFromResourceType(resourceType) + if (!routePath) return '' + var route = this.$router.resolve('/' + routePath) + return route?.route?.meta?.icon || '' + } } } From 7f6aa2ae439d950ed1d17051205fce9f07c2c659 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 7 Mar 2022 17:59:17 +0530 Subject: [PATCH 11/40] fix Signed-off-by: Abhishek Kumar --- .../java/org/apache/cloudstack/api/ApiCommandResourceType.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java index 354772b057b3..90efc0da32c3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java @@ -25,7 +25,6 @@ import org.apache.commons.lang3.StringUtils; import com.cloud.network.GuestVlan; -import com.cloud.network.Networks; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.router.VirtualRouter; import com.cloud.storage.GuestOS; @@ -51,7 +50,7 @@ public enum ApiCommandResourceType { PortableIpAddress(PortableIp.class), SecurityGroup(com.cloud.network.security.SecurityGroup.class), PhysicalNetwork(com.cloud.network.PhysicalNetwork.class), - TrafficType(Networks.TrafficType.class), + TrafficType(com.cloud.network.PhysicalNetworkTrafficType.class), PhysicalNetworkServiceProvider(com.cloud.network.PhysicalNetworkServiceProvider.class), FirewallRule(com.cloud.network.rules.FirewallRule.class), Account(com.cloud.user.Account.class), From cbdefc79a36260a90d7d707f293f78ef32e9bcdb Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 8 Mar 2022 12:28:04 +0530 Subject: [PATCH 12/40] smoke test for events resource Signed-off-by: Abhishek Kumar --- .../integration/smoke/test_events_resource.py | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 test/integration/smoke/test_events_resource.py diff --git a/test/integration/smoke/test_events_resource.py b/test/integration/smoke/test_events_resource.py new file mode 100644 index 000000000000..bd149580b412 --- /dev/null +++ b/test/integration/smoke/test_events_resource.py @@ -0,0 +1,190 @@ +# 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. +""" BVT tests for Events Resource +""" +import os +import tempfile +import time +import unittest +import urllib.error +import urllib.parse +import urllib.request + +from datetime import datetime + +from marvin.cloudstackAPI import (listEvents) + +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.codes import SUCCESS, FAILED +from marvin.lib.base import (ServiceOffering, + VirtualMachine, + NetworkOffering, + Network, + Domain, + Account, + Volume, + Host, + DiskOffering) +from marvin.lib.common import (get_domain, + get_suitable_test_template, + get_zone) + +from nose.plugins.attrib import attr + +_multiprocess_shared_ = True + + +class TestEventsResource(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestEventsResource, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.services = testClient.getParsedTestDataConfig() + # Get Zone, Domain and templates + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + cls._cleanup = [] + cls.hypervisor = testClient.getHypervisorInfo() + cls.services['mode'] = cls.zone.networktype + + def setUp(self): + + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + self.cleanup = [] + + @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="true") + def test_01_events_resource(self): + """Test Events resources while doing some operation on VM, volume, template, account, etc + + # Validate the following + # 1. Note start time + # 2. Deploy VM for a new account + # 3. Check resource id and resource type of all concerned events during the period + """ + now = datetime.now() # current date and time + start_time = now.strftime("%Y-%m-%d %H:%M:%S") + + template = get_suitable_test_template( + self.apiclient, + self.zone.id, + self.services["ostype"], + self.hypervisor + ) + if template == FAILED: + self.fail("get_suitable_test_template() failed to return template with description %s" % + self.services["ostype"]) + + self.disk_offering = DiskOffering.create( + self.apiclient, + self.services["disk_offering"] + ) + self.cleanup.append(self.disk_offering) + self.service_offering = ServiceOffering.create( + self.apiclient, + self.services["service_offerings"]["tiny"] + ) + self.cleanup.append(self.service_offering) + self.network_offering = NetworkOffering.create( + self.apiclient, + self.services["network_offering"], + ) + self.network_offering.update(self.apiclient, state='Enabled') + self.services["network"]["networkoffering"] = self.network_offering.id + self.cleanup.append(self.network_offering) + self.services["zoneid"] = self.zone.id + self.services["template"] = template.id + self.services["network"]["zoneid"] = self.zone.id + + domain1 = Domain.create(self.apiclient, + self.services["domain"], + parentdomainid=self.domain.id + ) + self.services["domainid"] = domain1.id + + account = Account.create( + self.apiclient, + self.services["account"], + domainid=domain1.id + ) + + account_network = Network.create( + self.apiclient, + self.services["network"], + account.name, + account.domainid + ) + virtual_machine = VirtualMachine.create( + self.apiclient, + self.services, + accountid=account.name, + domainid=account.domainid, + networkids=account_network.id, + serviceofferingid=self.service_offering.id + ) + volume = Volume.create( + self.apiclient, + self.services, + zoneid=self.zone.id, + account=account.name, + domainid=account.domainid, + diskofferingid=self.disk_offering.id + ) + virtual_machine.attach_volume( + self.apiclient, + volume + ) + virtual_machine.stop(self.apiclient) + time.sleep(self.services["sleep"]) + virtual_machine.detach_volume(self.apiclient, volume) + volume.delete(self.apiclient) + virtual_machine.delete(self.apiclient) + account_network.delete(self.apiclient) + account.disable(self.apiclient) + account.delete(self.apiclient) + domain1.delete(self.apiclient) + + cmd = listEvents.listEventsCmd() + cmd.startdate = start_time + cmd.listall = True + events = self.apiclient.listEvents(cmd) + self.assertEqual( + isinstance(events, list), + True, + "List Events response was not a valid list" + ) + self.assertNotEqual( + len(events), + 0, + "List Events returned an empty list" + ) + + for event in events: + if event.type.startswith("VM.") or (event.type.startswith("NETWORK.") and not event.type.startswith("NETWORK.ELEMENT")) or event.type.startswith("VOLUME.") or event.type.startswith("ACCOUNT.") or event.type.startswith("DOMAIN.") or event.type.startswith("TEMPLATE."): + if event.resourceid is None or event.resourcetype is None: + self.debug("Failed event:: %" % event) + self.fail("resourceid or resourcetype for the event not found!") + else: + self.debug("Event %s at %s:: Resource Type: %s, Resource ID: %s" % (event.type, event.created, event.resourcetype, event.resourceid)) + + def tearDown(self): + super(TestEventsResource, self).tearDown() + + @classmethod + def tearDownClass(cls): + super(TestEventsResource, cls).tearDownClass() \ No newline at end of file From f4ca131fc6a6a39c5b6ba89243a232d24016622f Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 9 Mar 2022 13:38:11 +0530 Subject: [PATCH 13/40] fix Signed-off-by: Abhishek Kumar --- .../api/ApiCommandResourceType.java | 4 +- .../java/com/cloud/dao/EntityManagerImpl.java | 9 ++- .../com/cloud/event/ActionEventUtils.java | 58 +++++++++++-------- .../com/cloud/event/dao/EventJoinDaoImpl.java | 2 +- .../com/cloud/utils/db/EntityManager.java | 2 + 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java index 90efc0da32c3..64ba30896cfb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java @@ -37,12 +37,12 @@ public enum ApiCommandResourceType { VirtualMachine(VirtualMachine.class), DomainRouter(VirtualRouter.class), Volume(com.cloud.storage.Volume.class), - ConsoleProxy(com.cloud.vm.ConsoleProxy.class), + ConsoleProxy(VirtualMachine.class), Snapshot(com.cloud.storage.Snapshot.class), Backup(org.apache.cloudstack.backup.Backup.class), Template(VirtualMachineTemplate.class), Iso(VirtualMachineTemplate.class), - SystemVm(com.cloud.vm.SystemVm.class), + SystemVm(VirtualMachine.class), Host(com.cloud.host.Host.class), StoragePool(com.cloud.storage.StoragePool.class), ImageStore(com.cloud.storage.ImageStore.class), diff --git a/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java b/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java index 40bc5ebd6fe8..e738f1e99efb 100644 --- a/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java +++ b/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java @@ -22,8 +22,6 @@ import javax.naming.ConfigurationException; -import net.sf.ehcache.Cache; - import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.EntityManager; import com.cloud.utils.db.GenericDao; @@ -32,6 +30,8 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import net.sf.ehcache.Cache; + @SuppressWarnings("unchecked") public class EntityManagerImpl extends ManagerBase implements EntityManager { String _name; @@ -122,4 +122,9 @@ public void remove(Class entityType, K id) { dao.remove(id); } + @Override + public boolean validEntityType(Class entityType) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao != null; + } } diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index e7a5f1853fa1..25795ac33383 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -237,43 +237,52 @@ private static void publishOnEventBus(long userId, long accountId, String eventC } } - private static Ternary getResourceDetailsUsingEventTypeAndContext(ApiCommandResourceType resourceType, String eventType) { + private static Ternary getResourceDetailsUsingEntityClassAndContext(Class entityClass, ApiCommandResourceType resourceType) { CallContext context = CallContext.current(); - Class entityClass = EventTypes.getEntityClassForEvent(eventType); - Long entityId = null; - String entityType = null; + if (resourceType == null) { + resourceType = ApiCommandResourceType.valueFromAssociatedClass(entityClass); + } + String entityType = resourceType == null ? entityClass.getSimpleName() : resourceType.toString(); String entityUuid = null; - if (entityClass != null){ - if (resourceType == null) { - resourceType = ApiCommandResourceType.valueFromAssociatedClass(entityClass); - } - entityType = resourceType == null ? entityClass.getSimpleName() : resourceType.toString(); - Object param = context.getContextParameter(entityClass); - if(param != null){ - try { - entityUuid = getEntityUuid(entityClass, param); - } catch (Exception e){ - s_logger.debug("Caught exception while finding entityUUID, moving on"); - } + Long entityId = null; + Object param = context.getContextParameter(entityClass); + if(param != null){ + try { + entityUuid = getEntityUuid(entityClass, param); + } catch (Exception e){ + s_logger.debug("Caught exception while finding entityUUID, moving on"); } - if (param instanceof Long) { - entityId = (Long)param; - } else if (entityUuid != null) { - Object obj = s_entityMgr.findByUuidIncludingRemoved(entityClass, entityUuid); - if (obj instanceof InternalIdentity) { - entityId = ((InternalIdentity)obj).getId(); - } + } + if (param instanceof Long) { + entityId = (Long)param; + } else if (entityUuid != null) { + Object obj = s_entityMgr.findByUuidIncludingRemoved(entityClass, entityUuid); + if (obj instanceof InternalIdentity) { + entityId = ((InternalIdentity)obj).getId(); } } return new Ternary<>(entityId, entityUuid, entityType); } + private static Ternary getResourceDetailsUsingEventTypeAndContext(ApiCommandResourceType resourceType, String eventType) { + Class entityClass = EventTypes.getEntityClassForEvent(eventType); + if (entityClass != null && s_entityMgr.validEntityType(entityClass)) { + return getResourceDetailsUsingEntityClassAndContext(entityClass, resourceType); + } else if (resourceType != null && resourceType.getAssociatedClass() != null && s_entityMgr.validEntityType(resourceType.getAssociatedClass())) { + return getResourceDetailsUsingEntityClassAndContext(resourceType.getAssociatedClass(), resourceType); + } + return new Ternary(null, null, null); + } + private static String getEntityUuid(Class entityType, Object entityId){ // entityId can be internal db id or UUID so accordingly call findById or return uuid directly if (entityId instanceof Long){ // Its internal db id - use findById + if (!s_entityMgr.validEntityType(entityType)) { + return null; + } final Object objVO = s_entityMgr.findByIdIncludingRemoved(entityType, (Long)entityId); if (objVO != null) { return ((Identity) objVO).getUuid(); @@ -282,6 +291,9 @@ private static String getEntityUuid(Class entityType, Object entityId){ try{ // In case its an async job the internal db id would be a string because of json deserialization Long internalId = Long.valueOf((String) entityId); + if (!s_entityMgr.validEntityType(entityType)) { + return null; + } final Object objVO = s_entityMgr.findByIdIncludingRemoved(entityType, internalId); if (objVO != null) { return ((Identity) objVO).getUuid(); diff --git a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java index 676ddae0a630..5e6ea82f701b 100644 --- a/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java @@ -98,7 +98,7 @@ public EventResponse newEventResponse(EventJoinVO event) { responseEvent.setResourceType(event.getResourceType()); ApiCommandResourceType resourceType = ApiCommandResourceType.fromString(event.getResourceType()); Class clazz = resourceType != null ? resourceType.getAssociatedClass() : null; - if (ObjectUtils.allNotNull(resourceId, clazz)) { + if (ObjectUtils.allNotNull(resourceId, clazz) && entityMgr.validEntityType(clazz)) { final Object objVO = entityMgr.findByIdIncludingRemoved(clazz, resourceId); if (objVO instanceof Identity) { responseEvent.setResourceId(((Identity)objVO).getUuid()); diff --git a/utils/src/main/java/com/cloud/utils/db/EntityManager.java b/utils/src/main/java/com/cloud/utils/db/EntityManager.java index 8f4e385b798c..d025e9727cc3 100644 --- a/utils/src/main/java/com/cloud/utils/db/EntityManager.java +++ b/utils/src/main/java/com/cloud/utils/db/EntityManager.java @@ -76,6 +76,8 @@ public interface EntityManager { public T findByIdIncludingRemoved(Class entityType, K id); + public boolean validEntityType(Class entityType); + public static final String MESSAGE_REMOVE_ENTITY_EVENT = "Message.RemoveEntity.Event"; public static final String MESSAGE_GRANT_ENTITY_EVENT = "Message.GrantEntity.Event"; From 069dcd71bc90d15f51cc6835eeabc5a78ed9a069 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 9 Mar 2022 16:01:01 +0530 Subject: [PATCH 14/40] changes Signed-off-by: Abhishek Kumar --- .../api/ApiCommandResourceType.java | 8 +++++++- .../admin/account/CreateAccountCmd.java | 6 ++++++ .../network/DeletePhysicalNetworkCmd.java | 5 +++++ .../api/command/admin/user/CreateUserCmd.java | 6 ++++++ .../api/command/admin/user/DeleteUserCmd.java | 11 ++++++++++ .../api/command/admin/user/MoveUserCmd.java | 20 +++++++++++++++---- .../api/command/admin/user/RegisterCmd.java | 11 ++++++++++ .../api/command/admin/user/UpdateUserCmd.java | 11 ++++++++++ .../api/command/admin/vm/AssignVMCmd.java | 10 ++++++++++ .../api/command/admin/vm/MigrateVMCmd.java | 11 ++++++++++ .../MigrateVirtualMachineWithVolumeCmd.java | 11 ++++++++++ .../user/account/AddUserToProjectCmd.java | 13 +++++++++++- .../account/DeleteUserFromProjectCmd.java | 11 ++++++++++ .../user/network/CreateNetworkACLCmd.java | 6 ++++++ .../user/network/CreateNetworkACLListCmd.java | 11 ++++++++++ .../user/network/DeleteNetworkACLCmd.java | 11 ++++++++++ .../user/network/DeleteNetworkACLListCmd.java | 11 ++++++++++ .../user/network/MoveNetworkAclItemCmd.java | 6 ++++++ .../user/network/RestartNetworkCmd.java | 11 ++++++++++ .../user/network/UpdateNetworkACLItemCmd.java | 11 ++++++++++ .../user/network/UpdateNetworkACLListCmd.java | 11 ++++++++++ .../user/network/UpdateNetworkCmd.java | 11 ++++++++++ .../user/template/UpdateTemplateCmd.java | 2 +- .../api/command/user/vm/AddNicToVMCmd.java | 16 ++++++++++++--- .../api/command/user/vm/RestoreVMCmd.java | 11 ++++++++++ .../api/command/user/vm/ScaleVMCmd.java | 16 ++++++++++++--- .../api/command/user/vm/UpdateVMCmd.java | 16 ++++++++++++--- .../command/user/volume/DeleteVolumeCmd.java | 11 ++++++++++ .../command/user/volume/MigrateVolumeCmd.java | 13 +++++++++++- .../command/user/volume/RecoverVolumeCmd.java | 11 ++++++++++ .../command/user/volume/ResizeVolumeCmd.java | 5 +++++ .../command/user/volume/UploadVolumeCmd.java | 10 +++++++--- .../network/guru/VxlanGuestNetworkGuru.java | 3 ++- .../com/cloud/network/NetworkServiceImpl.java | 2 ++ .../guru/ExternalGuestNetworkGuru.java | 3 ++- .../cloud/network/guru/GuestNetworkGuru.java | 6 ++++-- .../network/vpc/NetworkACLManagerImpl.java | 2 +- .../cloud/storage/VolumeApiServiceImpl.java | 1 + .../cloud/template/TemplateManagerImpl.java | 1 + .../com/cloud/event/ActionEventUtilsTest.java | 2 ++ .../cloud/event/dao/EventJoinDaoImplTest.java | 1 + .../integration/smoke/test_events_resource.py | 5 +++++ ui/src/utils/plugins.js | 1 + 43 files changed, 336 insertions(+), 25 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java index 64ba30896cfb..b073a40d340a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandResourceType.java @@ -24,9 +24,12 @@ import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.StringUtils; +import com.cloud.dc.DataCenter; import com.cloud.network.GuestVlan; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.router.VirtualRouter; +import com.cloud.network.vpc.NetworkACL; +import com.cloud.network.vpc.NetworkACLItem; import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOSHypervisor; import com.cloud.template.VirtualMachineTemplate; @@ -70,13 +73,16 @@ public enum ApiCommandResourceType { GuestOs(GuestOS.class), GuestOsMapping(GuestOSHypervisor.class), Network(com.cloud.network.Network.class), + NetworkAcl(NetworkACL.class), + NetworkAclItem(NetworkACLItem.class), Project(com.cloud.projects.Project.class), Domain(com.cloud.domain.Domain.class), DiskOffering(com.cloud.offering.DiskOffering.class), ServiceOffering(com.cloud.offering.ServiceOffering.class), NetworkOffering(com.cloud.offering.NetworkOffering.class), VpcOffering(com.cloud.network.vpc.VpcOffering.class), - BackupOffering(org.apache.cloudstack.backup.BackupOffering.class); + BackupOffering(org.apache.cloudstack.backup.BackupOffering.class), + Zone(DataCenter.class); private final Class clazz; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index c67022c5fdf3..f9f44c3461d2 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Map; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -207,4 +208,9 @@ private void validateParams() { throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Neither account type and role ID are not provided"); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Account; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 41911e157fd5..06619aecc366 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -93,6 +93,11 @@ public String getEventType() { return EventTypes.EVENT_PHYSICAL_NETWORK_DELETE; } + @Override + public Long getApiResourceId() { + return id; + } + @Override public ApiCommandResourceType getApiResourceType() { return ApiCommandResourceType.PhysicalNetwork; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index 884c982dc02c..63d532bd275c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -172,4 +173,9 @@ private void validateParams() { throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Empty passwords are not allowed"); } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index 08ba521ed62c..e8ac7fd3720d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -18,6 +18,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -77,6 +78,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; + } + @Override public void execute() { CallContext.current().setEventDetails("UserId: " + getId()); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java index e34def3b5d3f..1d4096f37e3f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.user; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.google.common.base.Preconditions; +import javax.inject.Inject; + import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -34,7 +34,9 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.log4j.Logger; -import javax.inject.Inject; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.google.common.base.Preconditions; @APICommand(name = "moveUser", description = "Moves a user to another account", @@ -107,6 +109,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; + } + @Override public void execute() { Preconditions.checkNotNull(getId(),"I have to have an user to move!"); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index 2732bb90589d..f0d92322f39a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.user; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -75,6 +76,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; + } + @Override public void execute() { String[] keys = _accountService.createApiKeyAndSecretKey(this); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 24624e2c2715..5035b32d14db 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -19,6 +19,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -174,4 +175,14 @@ public void setLastname(String lastname) { public void setEmail(String email) { this.email = email; } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.User; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 7b577963f1b5..290349070d5c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -18,6 +18,7 @@ import java.util.List; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -160,4 +161,13 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return getVmId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 2c68d86f4450..2962dd4a68fa 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.vm; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -214,4 +215,14 @@ public Long getSyncObjId() { } return null; } + + @Override + public Long getApiResourceId() { + return virtualMachineId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java index 195e1316fd5e..db513ff4dc0f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -138,6 +139,16 @@ public String getEventDescription() { return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId()); } + @Override + public Long getApiResourceId() { + return virtualMachineId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } + @Override public void execute() { if (hostId == null && MapUtils.isEmpty(migrateVolumeTo)) { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java index 5ebb3bebd70a..2418ceb23e92 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiArgValidator; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -31,11 +32,11 @@ import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.cloudstack.context.CallContext; import org.apache.commons.lang3.EnumUtils; +import org.apache.commons.lang3.StringUtils; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.ProjectAccount; -import org.apache.commons.lang3.StringUtils; @APICommand(name = AddUserToProjectCmd.APINAME, description = "Adds user to a project", responseObject = SuccessResponse.class, since = "4.14", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, authorized = {RoleType.Admin, RoleType.DomainAdmin, RoleType.ResourceAdmin, RoleType.User}) @@ -147,4 +148,14 @@ public String getCommandName() { public long getEntityOwnerId() { return CallContext.current().getCallingAccountId(); } + + @Override + public Long getApiResourceId() { + return projectId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Project; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java index 83b01eac4e7a..7cd901250412 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -103,6 +104,16 @@ public List getEntityOwnerIds() { return _projectService.getProjectOwners(projectId); } + @Override + public Long getApiResourceId() { + return projectId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Project; + } + @Override public void execute() { CallContext.current().setEventDetails("Project ID: " + projectId + "; user ID: " + userId); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index ca6c8018512d..7fd75719b936 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -247,4 +248,9 @@ public void execute() throws ResourceUnavailableException { } } } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAclItem; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java index 530dc4e7030a..884ca53f05f5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java @@ -18,6 +18,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; @@ -134,4 +135,14 @@ public String getEventType() { public String getEventDescription() { return "Creating Network ACL with ID: " + getEntityUuid(); } + + @Override + public Long getApiResourceId() { + return getEntityId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAcl; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index ab6df801fe94..6243826c745f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.network; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -77,6 +78,16 @@ public long getEntityOwnerId() { return caller.getAccountId(); } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAclItem; + } + @Override public void execute() throws ResourceUnavailableException { CallContext.current().setEventDetails("Network ACL item ID: " + id); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java index 19cf601d63aa..e6868dbbbdfb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.network; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -77,6 +78,16 @@ public long getEntityOwnerId() { return caller.getAccountId(); } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAcl; + } + @Override public void execute() throws ResourceUnavailableException { CallContext.current().setEventDetails("Network ACL ID: " + id); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java index acc7fdff90f2..1fba93c415e6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; import org.apache.cloudstack.api.Parameter; @@ -100,4 +101,9 @@ public long getEntityOwnerId() { public String getAclConsistencyHash() { return aclConsistencyHash; } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAclItem; + } } \ No newline at end of file diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index dbcdb8f88846..72b83e567e54 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.network; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -133,4 +134,14 @@ public long getEntityOwnerId() { return _networkService.getNetwork(id).getAccountId(); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Network; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java index 189ed1ccc688..f675fa23e343 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; import org.apache.cloudstack.api.Parameter; @@ -194,4 +195,14 @@ public void checkUuid() { public boolean isPartialUpgrade() { return partialUpgrade; } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAclItem; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java index 22eaf2180ca9..04617086a3f5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java @@ -18,6 +18,7 @@ import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCustomIdCmd; import org.apache.cloudstack.api.Parameter; @@ -111,4 +112,14 @@ public String getDescription() { public String getName() { return name; } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.NetworkAcl; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 2ffa52bcfd2e..cac3c1cb0740 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -214,4 +215,14 @@ public void checkUuid() { _uuidMgr.checkUuid(getCustomId(), Network.class); } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Network; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index edb886624ce7..28ecd453d266 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -87,7 +87,7 @@ public Long getApiResourceId() { @Override public ApiCommandResourceType getApiResourceType() { - return ApiCommandResourceType.Iso; + return ApiCommandResourceType.Template; } @Override diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java index 454ca6db80f6..1e395831a6ff 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java @@ -22,12 +22,10 @@ import java.util.HashMap; import java.util.Map; -import com.cloud.network.Network; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.ApiErrorCode; @@ -39,9 +37,11 @@ import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.Network; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.net.Dhcp; @@ -157,6 +157,16 @@ public Map getDhcpOptionsMap() { return dhcpOptionsMap; } + @Override + public Long getApiResourceId() { + return getVmId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } + @Override public void execute() { CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Network Id: " + this._uuidMgr.getUuid(Network.class, getNetworkId())); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 2439a26c5388..ab1bd0b79ee6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.vm; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -110,4 +111,14 @@ public Long getTemplateId() { public Long getId() { return getVmId(); } + + @Override + public Long getApiResourceId() { + return getId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java index 8243e1cda7d8..193a3b1c059e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java @@ -22,12 +22,10 @@ import java.util.List; import java.util.Map; -import com.cloud.offering.ServiceOffering; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -38,12 +36,14 @@ import org.apache.cloudstack.api.command.user.UserCmd; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.log4j.Logger; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ManagementServerException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.VirtualMachineMigrationException; +import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.vm.VirtualMachine; @@ -166,6 +166,16 @@ public String getEventDescription() { return "upgrading vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()) + " to service offering: " + this._uuidMgr.getUuid(ServiceOffering.class, getServiceOfferingId()); } + @Override + public Long getApiResourceId() { + return getId(); + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } + @Override public void execute() { UserVm result; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 6cc9f16d8c1f..cc0d7afacdda 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -21,13 +21,11 @@ import java.util.List; import java.util.Map; -import com.cloud.utils.exception.CloudRuntimeException; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCustomIdCmd; @@ -39,11 +37,13 @@ import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Dhcp; import com.cloud.vm.VirtualMachine; @@ -286,4 +286,14 @@ public void checkUuid() { } } + + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.VirtualMachine; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 678299c8b5a1..020d7ca8452f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -15,6 +15,7 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.SecurityChecker.AccessType; @@ -79,6 +80,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; + } + @Override public void execute() throws ConcurrentOperationException { CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getId())); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index d3183dbf3182..a0a50c5b9fc5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -16,8 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; -import com.cloud.storage.StoragePool; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -30,6 +30,7 @@ import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.event.EventTypes; +import com.cloud.storage.StoragePool; import com.cloud.storage.Volume; import com.cloud.user.Account; @@ -142,4 +143,14 @@ public Long getSyncObjId() { } return null; } + + @Override + public Long getApiResourceId() { + return volumeId; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RecoverVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RecoverVolumeCmd.java index f5bb1ddd676f..2589f816bc63 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RecoverVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RecoverVolumeCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.RoleType; @@ -76,6 +77,16 @@ public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } + @Override + public Long getApiResourceId() { + return id; + } + + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; + } + @Override public void execute() { CallContext.current().setEventDetails("Volume Id: " + getId()); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java index 2afc0cca1333..316378097fb7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -137,6 +137,11 @@ public ApiCommandResourceType getApiResourceType() { return ApiCommandResourceType.Volume; } + @Override + public Long getApiResourceId() { + return id; + } + public static String getResultObjectName() { return "volume"; } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 236a4c8c7a68..b40761d123a8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -16,10 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; -import com.cloud.dc.DataCenter; -import org.apache.log4j.Logger; - import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -33,7 +31,9 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; +import com.cloud.dc.DataCenter; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -179,4 +179,8 @@ public String getEventType() { return EventTypes.EVENT_VOLUME_UPLOAD; } + @Override + public ApiCommandResourceType getApiResourceType() { + return ApiCommandResourceType.Volume; + } } diff --git a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java index d2713200ec30..ce6a6641f586 100644 --- a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java +++ b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java @@ -17,6 +17,7 @@ package com.cloud.network.guru; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -103,7 +104,7 @@ protected void allocateVnet(Network network, NetworkVO implemented, long dcId, l protected void allocateVnetComplete(Network network, NetworkVO implemented, long dcId, long physicalNetworkId, String reservationId, String vnet) { //TODO(VXLAN): Add new event type for vxlan? ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, - "Assigned Zone vNet: " + vnet + " Network Id: " + network.getId(), null, null, 0); + "Assigned Zone vNet: " + vnet + " Network Id: " + network.getId(), dcId, ApiCommandResourceType.Zone.toString(), 0); } @Override diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index ce2aaf4830d6..237b11241214 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -3147,6 +3147,8 @@ public PhysicalNetworkVO doInTransaction(TransactionStatus status) { // Add the config drive provider addConfigDriveToPhysicalNetwork(pNetwork.getId()); + CallContext.current().putContextParameter(PhysicalNetwork.class, pNetwork.getUuid()); + return pNetwork; } }); diff --git a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java index c553a9cc3d87..03912b7dda98 100644 --- a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java +++ b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java @@ -21,6 +21,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.log4j.Logger; @@ -160,7 +161,7 @@ public Network implement(Network config, NetworkOffering offering, DeployDestina implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlanTag)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), config.getAccountId(), EventVO.LEVEL_INFO, - EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), null, null, 0); + EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), zone.getId(), ApiCommandResourceType.Zone.toString(), 0); } else { vlanTag = Integer.parseInt(BroadcastDomainType.getValue(config.getBroadcastUri())); implemented.setBroadcastUri(config.getBroadcastUri()); diff --git a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java index eebe041f7724..7209745d8843 100644 --- a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java @@ -22,6 +22,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.ConfigKey; @@ -299,7 +300,7 @@ protected void allocateVnet(final Network network, final NetworkVO implemented, } implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vnet)); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, - EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), null, null, 0); + EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), dcId, ApiCommandResourceType.Zone.toString(), 0); } else { implemented.setBroadcastUri(network.getBroadcastUri()); } @@ -455,7 +456,8 @@ public void shutdown(final NetworkProfile profile, final NetworkOffering offerin _dcDao.releaseVnet(BroadcastDomainType.getValue(profile.getBroadcastUri()), profile.getDataCenterId(), profile.getPhysicalNetworkId(), profile.getAccountId(), profile.getReservationId()); ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), profile.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_RELEASE, - "Released Zone Vnet: " + BroadcastDomainType.getValue(profile.getBroadcastUri()) + " for Network: " + profile.getId(), null, null, 0); + "Released Zone Vnet: " + BroadcastDomainType.getValue(profile.getBroadcastUri()) + " for Network: " + profile.getId(), + profile.getDataCenterId(), ApiCommandResourceType.Zone.toString(), 0); } profile.setBroadcastUri(null); diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java index d5f31d62753c..55e65689de46 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -227,7 +227,7 @@ public NetworkACLItemVO doInTransaction(final TransactionStatus status) { throw new CloudRuntimeException("Unable to update the state to add for " + networkACLItemVOFromDatabase); } CallContext.current().setEventDetails("ACL Item Id: " + networkACLItemVOFromDatabase.getId()); - + CallContext.current().putContextParameter(NetworkACLItem.class, networkACLItemVOFromDatabase.getAclId()); return networkACLItemVOFromDatabase; } }); diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index b37fd0a01789..71f2f3c9f373 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -574,6 +574,7 @@ public VolumeVO doInTransaction(TransactionStatus status) { volume.setFormat(ImageFormat.valueOf(format)); volume = _volsDao.persist(volume); CallContext.current().setEventDetails("Volume Id: " + volume.getUuid()); + CallContext.current().putContextParameter(Volume.class, volume.getUuid()); // Increment resource count during allocation; if actual creation fails, // decrement it diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java index fc36aa34f8c9..f2a3d64d48e8 100755 --- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java @@ -1942,6 +1942,7 @@ public VMTemplateVO createPrivateTemplateRecord(CreateTemplateCmd cmd, Account t } if (template != null) { + CallContext.current().putContextParameter(VirtualMachineTemplate.class, template.getUuid()); return template; } else { throw new CloudRuntimeException("Failed to create a template"); diff --git a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java index 239e3bd886ae..4a2a4b6eed85 100644 --- a/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java +++ b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java @@ -259,6 +259,7 @@ public void testPublishedEventResource() { final String resourceUuid = UUID.randomUUID().toString(); VirtualMachine vm = Mockito.mock(VirtualMachine.class); Mockito.when(vm.getUuid()).thenReturn(resourceUuid); + Mockito.when(entityMgr.validEntityType(VirtualMachine.class)).thenReturn(true); Mockito.when(entityMgr.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", resourceId, resourceType); @@ -274,6 +275,7 @@ public void testPublishedEventResourceWithCallContext() { final String resourceUuid = UUID.randomUUID().toString(); VirtualMachine vm = Mockito.mock(VirtualMachine.class); Mockito.when(vm.getId()).thenReturn(resourceId); + Mockito.when(entityMgr.validEntityType(VirtualMachine.class)).thenReturn(true); Mockito.when(entityMgr.findByUuidIncludingRemoved(VirtualMachine.class, resourceUuid)).thenReturn(vm); CallContext.current().putContextParameter(VirtualMachine.class, resourceUuid); ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), EventTypes.EVENT_VM_START, "Test event", null, null); diff --git a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java index 6deeafbc3410..5a3ef02cebe8 100644 --- a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java +++ b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java @@ -41,6 +41,7 @@ public void testNewEventViewResource() { VirtualMachine vm = Mockito.mock(VirtualMachine.class); Mockito.when(vm.getUuid()).thenReturn(resourceUuid); Mockito.when(vm.getName()).thenReturn(resourceName); + Mockito.when(entityManager.validEntityType(VirtualMachine.class)).thenReturn(true); Mockito.when(entityManager.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); EventResponse response = dao.newEventResponse(event); Assert.assertEquals(response.getResourceId(), resourceUuid); diff --git a/test/integration/smoke/test_events_resource.py b/test/integration/smoke/test_events_resource.py index bd149580b412..55e6dbc9d0cb 100644 --- a/test/integration/smoke/test_events_resource.py +++ b/test/integration/smoke/test_events_resource.py @@ -153,8 +153,13 @@ def test_01_events_resource(self): time.sleep(self.services["sleep"]) virtual_machine.detach_volume(self.apiclient, volume) volume.delete(self.apiclient) + ts = str(time.time()) + virtual_machine.update(self.apiclient, displayname=ts) + account_network.restart(self.apiclient, cleanup=False) virtual_machine.delete(self.apiclient) + account_network.update(self.apiclient, name=account_network.name + ts) account_network.delete(self.apiclient) + account.update(self.apiclient, newname=account.name + ts) account.disable(self.apiclient) account.delete(self.apiclient) domain1.delete(self.apiclient) diff --git a/ui/src/utils/plugins.js b/ui/src/utils/plugins.js index c085b35d28ea..c2c94997bc8a 100644 --- a/ui/src/utils/plugins.js +++ b/ui/src/utils/plugins.js @@ -386,6 +386,7 @@ export const resourceTypePlugin = { case 'NetworkOffering': case 'VpcOffering': case 'BackupOffering': + case 'Zone': return resourceType.toLowerCase() } return '' From f23247b47928a395a2d02a010b495db635034707 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 10 Mar 2022 12:12:12 +0530 Subject: [PATCH 15/40] fix Signed-off-by: Abhishek Kumar --- test/integration/smoke/test_events_resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/smoke/test_events_resource.py b/test/integration/smoke/test_events_resource.py index 55e6dbc9d0cb..03cf1244e604 100644 --- a/test/integration/smoke/test_events_resource.py +++ b/test/integration/smoke/test_events_resource.py @@ -150,12 +150,12 @@ def test_01_events_resource(self): volume ) virtual_machine.stop(self.apiclient) + account_network.restart(self.apiclient, cleanup=False) time.sleep(self.services["sleep"]) virtual_machine.detach_volume(self.apiclient, volume) volume.delete(self.apiclient) ts = str(time.time()) virtual_machine.update(self.apiclient, displayname=ts) - account_network.restart(self.apiclient, cleanup=False) virtual_machine.delete(self.apiclient) account_network.update(self.apiclient, name=account_network.name + ts) account_network.delete(self.apiclient) From 68e798fb94e235ad5871e87b16975253f7549892 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 15 Mar 2022 14:57:22 +0530 Subject: [PATCH 16/40] ui improvements Signed-off-by: Abhishek Kumar --- ui/src/components/view/InfoCard.vue | 13 +++++++++++++ ui/src/config/section/event.js | 2 +- ui/src/views/dashboard/CapacityDashboard.vue | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ui/src/components/view/InfoCard.vue b/ui/src/components/view/InfoCard.vue index 6429d600d118..8f7bd05af867 100644 --- a/ui/src/components/view/InfoCard.vue +++ b/ui/src/components/view/InfoCard.vue @@ -366,6 +366,16 @@ +
+
{{ $t('label.resource') }}
+
+ + + {{ resource.resourcename || resource.resourceid }} + {{ resource.resourcename || resource.resourceid }} + +
+
{{ $t('label.vmname') }}
@@ -835,6 +845,9 @@ export default { return this.resource.icon.base64image } return null + }, + routeFromResourceType () { + return this.$getRouteFromResourceType(this.resource.resourcetype) } }, methods: { diff --git a/ui/src/config/section/event.js b/ui/src/config/section/event.js index 6f8556c3be93..e3d4772d1686 100644 --- a/ui/src/config/section/event.js +++ b/ui/src/config/section/event.js @@ -22,7 +22,7 @@ export default { docHelp: 'adminguide/events.html', permission: ['listEvents'], columns: ['level', 'type', 'state', 'description', 'resource', 'username', 'account', 'domain', 'created'], - details: ['username', 'id', 'description', 'state', 'level', 'type', 'account', 'domain', 'created'], + details: ['username', 'id', 'description', 'resourcetype', 'resourceid', 'state', 'level', 'type', 'account', 'domain', 'created'], searchFilters: ['level', 'domainid', 'account', 'keyword'], related: [{ name: 'event', diff --git a/ui/src/views/dashboard/CapacityDashboard.vue b/ui/src/views/dashboard/CapacityDashboard.vue index b614ad91459f..abe5148bb575 100644 --- a/ui/src/views/dashboard/CapacityDashboard.vue +++ b/ui/src/views/dashboard/CapacityDashboard.vue @@ -119,6 +119,13 @@ :color="getEventColour(event)"> {{ $toLocaleDate(event.created) }}
{{ event.type }}
+ + + + {{ event.resourcename || event.resourceid }} + {{ event.resourcename || event.resourceid }} + +
({{ event.username }}) {{ event.description }} @@ -132,12 +139,14 @@ diff --git a/ui/src/components/view/ResourceView.vue b/ui/src/components/view/ResourceView.vue index 7ee1e8c614b7..ae53ab2eee78 100644 --- a/ui/src/components/view/ResourceView.vue +++ b/ui/src/components/view/ResourceView.vue @@ -46,7 +46,16 @@ :key="tab.name" :tab="$t('label.' + tab.name)" v-if="showTab(tab)"> - + + + + diff --git a/ui/src/config/section/account.js b/ui/src/config/section/account.js index f1d67cfc3f72..587af6dffb94 100644 --- a/ui/src/config/section/account.js +++ b/ui/src/config/section/account.js @@ -53,6 +53,11 @@ export default { name: 'settings', component: shallowRef(defineAsyncComponent(() => import('@/components/view/SettingsTab.vue'))), show: () => { return 'listConfigurations' in store.getters.apis } + }, + { + name: 'events', + resourceType: 'Account', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) } ], actions: [ diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js index 7a4feaa7271a..c6140c43e774 100644 --- a/ui/src/config/section/image.js +++ b/ui/src/config/section/image.js @@ -69,6 +69,11 @@ export default { name: 'settings', component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailSettings'))) }, + { + name: 'events', + resourceType: 'Template', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + }, { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) @@ -203,6 +208,11 @@ export default { name: 'zones', component: shallowRef(defineAsyncComponent(() => import('@/views/image/IsoZones.vue'))) }, + { + name: 'events', + resourceType: 'Iso', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + }, { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) diff --git a/ui/src/config/section/storage.js b/ui/src/config/section/storage.js index c5990dae98f6..6b3db2e44434 100644 --- a/ui/src/config/section/storage.js +++ b/ui/src/config/section/storage.js @@ -68,6 +68,11 @@ export default { name: 'details', component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) }, + { + name: 'events', + resourceType: 'Volume', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + }, { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) @@ -303,6 +308,11 @@ export default { name: 'details', component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) }, + { + name: 'events', + resourceType: 'Snapshot', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + }, { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) diff --git a/ui/src/config/section/user.js b/ui/src/config/section/user.js index cbd0a55f6adb..ac6aa4226174 100644 --- a/ui/src/config/section/user.js +++ b/ui/src/config/section/user.js @@ -26,6 +26,17 @@ export default { permission: ['listUsers'], columns: ['username', 'state', 'firstname', 'lastname', 'email', 'account'], details: ['username', 'id', 'firstname', 'lastname', 'email', 'usersource', 'timezone', 'rolename', 'roletype', 'account', 'domain', 'created'], + tabs: [ + { + name: 'details', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) + }, + { + name: 'events', + resourceType: 'User', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + } + ], actions: [ { api: 'createUser', diff --git a/ui/src/views/compute/InstanceTab.vue b/ui/src/views/compute/InstanceTab.vue index 90639ceb846f..287d08dbb0f7 100644 --- a/ui/src/views/compute/InstanceTab.vue +++ b/ui/src/views/compute/InstanceTab.vue @@ -139,6 +139,9 @@ + + + Date: Wed, 16 Mar 2022 11:59:49 +0530 Subject: [PATCH 19/40] since key Signed-off-by: Abhishek Kumar --- .../cloudstack/api/command/user/event/ListEventsCmd.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index ed3b188ac764..66aff30e52db 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -67,10 +67,10 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @Parameter(name = ApiConstants.START_ID, type = CommandType.UUID, entityType = EventResponse.class, description = "the parent/start ID of the event, when provided this will list all the events with the start/parent ID including the parent event") private Long startId; - @Parameter(name = ApiConstants.RESOURCE_ID, type = CommandType.STRING, description = "the ID of the resource associated with the event") + @Parameter(name = ApiConstants.RESOURCE_ID, type = CommandType.STRING, description = "the ID of the resource associated with the event", since="4.17.0") private String resourceId; - @Parameter(name = ApiConstants.RESOURCE_TYPE, type = CommandType.STRING, description = "the type of the resource associated with the event") + @Parameter(name = ApiConstants.RESOURCE_TYPE, type = CommandType.STRING, description = "the type of the resource associated with the event", since="4.17.0") private String resourceType; ///////////////////////////////////////////////////// From 1736caa1282fd20df2e7edf19376b0f09e5f0c2f Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 16 Mar 2022 14:13:33 +0530 Subject: [PATCH 20/40] tests and permission changes Signed-off-by: Abhishek Kumar --- api/src/main/java/org/apache/cloudstack/api/BaseCmd.java | 6 ++++-- .../main/java/com/cloud/api/query/QueryManagerImpl.java | 7 +++++++ .../java/com/cloud/event/dao/EventJoinDaoImplTest.java | 1 + ui/src/config/section/account.js | 3 ++- ui/src/config/section/domain.js | 9 ++++++++- ui/src/config/section/image.js | 6 ++++-- ui/src/config/section/network.js | 6 ++++++ ui/src/config/section/storage.js | 6 ++++-- ui/src/config/section/user.js | 4 +++- ui/src/views/compute/InstanceTab.vue | 2 +- 10 files changed, 40 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java index 3c2ea3add72d..da381b05e737 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java @@ -431,8 +431,10 @@ private Object getEntityVO(Class entityType, Object entityId){ } /** - * Async commands that want to be tracked as part of the listXXX commands need to - * provide implementations of the two following methods, getApiResourceId() and getApiResourceType() + * Commands that generate action events associated to a resource and + * async commands that want to be tracked as part of the listXXX commands + * need to provide implementations of the two following methods, + * getApiResourceId() and getApiResourceType() * * getApiResourceId() should return the id of the object the async command is executing on * getApiResourceType() should return a type from the ApiCommandResourceType enumeration diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 451dfb1e0699..dfc748560d1f 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -32,7 +32,9 @@ import javax.inject.Inject; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.affinity.AffinityGroupDomainMapVO; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.affinity.AffinityGroupVMMapVO; @@ -674,6 +676,7 @@ public ListResponse searchForEvents(ListEventsCmd cmd) { private Pair, Integer> searchForEventsInternal(ListEventsCmd cmd) { Account caller = CallContext.current().getCallingAccount(); + boolean isRootAdmin = _accountMgr.isRootAdmin(caller.getId()); List permittedAccounts = new ArrayList(); Long id = cmd.getId(); @@ -711,6 +714,10 @@ private Pair, Integer> searchForEventsInternal(ListEventsCmd c if (resourceId == null) { throw new InvalidParameterValueException(String.format("Invalid %s", ApiConstants.RESOURCE_ID)); } + if (!isRootAdmin && object instanceof ControlledEntity) { + ControlledEntity entity = (ControlledEntity)object; + _accountMgr.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.ListEntry, entity.getAccountId() == caller.getId(), entity); + } } Pair domainIdRecursiveListProject = new Pair(cmd.getDomainId(), null); diff --git a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java index 5a3ef02cebe8..5744b6a9f82e 100644 --- a/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java +++ b/server/src/test/java/com/cloud/event/dao/EventJoinDaoImplTest.java @@ -40,6 +40,7 @@ public void testNewEventViewResource() { Mockito.when(event.getResourceType()).thenReturn(resourceType); VirtualMachine vm = Mockito.mock(VirtualMachine.class); Mockito.when(vm.getUuid()).thenReturn(resourceUuid); + Mockito.when(vm.getHostName()).thenReturn(null); Mockito.when(vm.getName()).thenReturn(resourceName); Mockito.when(entityManager.validEntityType(VirtualMachine.class)).thenReturn(true); Mockito.when(entityManager.findByIdIncludingRemoved(VirtualMachine.class, resourceId)).thenReturn(vm); diff --git a/ui/src/config/section/account.js b/ui/src/config/section/account.js index 587af6dffb94..4de0cc6f5a40 100644 --- a/ui/src/config/section/account.js +++ b/ui/src/config/section/account.js @@ -57,7 +57,8 @@ export default { { name: 'events', resourceType: 'Account', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } } ], actions: [ diff --git a/ui/src/config/section/domain.js b/ui/src/config/section/domain.js index 96766333bf49..b11a2b3818ca 100644 --- a/ui/src/config/section/domain.js +++ b/ui/src/config/section/domain.js @@ -57,7 +57,14 @@ export default { name: 'settings', component: shallowRef(defineAsyncComponent(() => import('@/components/view/SettingsTab.vue'))), show: () => { return 'listConfigurations' in store.getters.apis } - }, { + }, + { + name: 'events', + resourceType: 'Domain', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } + }, + { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) } diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js index c6140c43e774..bf56bcea0235 100644 --- a/ui/src/config/section/image.js +++ b/ui/src/config/section/image.js @@ -72,7 +72,8 @@ export default { { name: 'events', resourceType: 'Template', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } }, { name: 'comments', @@ -211,7 +212,8 @@ export default { { name: 'events', resourceType: 'Iso', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } }, { name: 'comments', diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js index 6539e8753712..f71570d62e34 100644 --- a/ui/src/config/section/network.js +++ b/ui/src/config/section/network.js @@ -72,6 +72,12 @@ export default { component: shallowRef(defineAsyncComponent(() => import('@/views/network/GuestIpRanges.vue'))), show: (record) => { return 'listVlanIpRanges' in store.getters.apis && (record.type === 'Shared' || (record.service && record.service.filter(x => x.name === 'SourceNat').count === 0)) } }, + { + name: 'events', + resourceType: 'Network', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } + }, { name: 'comments', component: shallowRef(defineAsyncComponent(() => import('@/components/view/AnnotationsTab.vue'))) diff --git a/ui/src/config/section/storage.js b/ui/src/config/section/storage.js index 6b3db2e44434..be8e1b131deb 100644 --- a/ui/src/config/section/storage.js +++ b/ui/src/config/section/storage.js @@ -71,7 +71,8 @@ export default { { name: 'events', resourceType: 'Volume', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } }, { name: 'comments', @@ -311,7 +312,8 @@ export default { { name: 'events', resourceType: 'Snapshot', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } }, { name: 'comments', diff --git a/ui/src/config/section/user.js b/ui/src/config/section/user.js index ac6aa4226174..e17e998179e8 100644 --- a/ui/src/config/section/user.js +++ b/ui/src/config/section/user.js @@ -16,6 +16,7 @@ // under the License. import { shallowRef, defineAsyncComponent } from 'vue' +import store from '@/store' export default { name: 'accountuser', @@ -34,7 +35,8 @@ export default { { name: 'events', resourceType: 'User', - component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))) + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } } ], actions: [ diff --git a/ui/src/views/compute/InstanceTab.vue b/ui/src/views/compute/InstanceTab.vue index 287d08dbb0f7..a7d32a806b96 100644 --- a/ui/src/views/compute/InstanceTab.vue +++ b/ui/src/views/compute/InstanceTab.vue @@ -139,7 +139,7 @@ - + From b6bd32ad46692babe687c161f1f81866f847d010 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 16 Mar 2022 14:17:53 +0530 Subject: [PATCH 21/40] missing test Signed-off-by: Abhishek Kumar --- .../cloud/api/query/QueryManagerImplTest.java | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 server/src/test/java/com/cloud/api/query/QueryManagerImplTest.java diff --git a/server/src/test/java/com/cloud/api/query/QueryManagerImplTest.java b/server/src/test/java/com/cloud/api/query/QueryManagerImplTest.java new file mode 100644 index 000000000000..beaaedfa5851 --- /dev/null +++ b/server/src/test/java/com/cloud/api/query/QueryManagerImplTest.java @@ -0,0 +1,173 @@ +package com.cloud.api.query; + +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.apache.cloudstack.acl.SecurityChecker; +import org.apache.cloudstack.api.ApiCommandResourceType; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.context.CallContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.event.dao.EventJoinDao; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.network.Network; +import com.cloud.network.dao.NetworkVO; +import com.cloud.projects.Project; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; +import com.cloud.user.User; +import com.cloud.user.UserVO; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.VirtualMachine; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({ComponentContext.class, ViewResponseHelper.class}) +public class QueryManagerImplTest { + public static final long USER_ID = 1; + public static final long ACCOUNT_ID = 1; + + @Mock + EntityManager entityManager; + @Mock + AccountManager accountManager; + @Mock + EventJoinDao eventJoinDao; + + private AccountVO account; + private UserVO user; + + @Before + public void setUp() throws Exception { + setupCommonMocks(); + } + + @InjectMocks + private QueryManagerImpl queryManager = new QueryManagerImpl(); + + private void setupCommonMocks() { + account = new AccountVO("testaccount", 1L, "networkdomain", Account.Type.NORMAL, "uuid"); + account.setId(ACCOUNT_ID); + user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", + UUID.randomUUID().toString(), User.Source.UNKNOWN); + CallContext.register(user, account); + Mockito.when(accountManager.isRootAdmin(account.getId())).thenReturn(false); + Mockito.doNothing().when(accountManager).buildACLSearchParameters(Mockito.any(Account.class), Mockito.anyLong(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyList(), + Mockito.any(), Mockito.anyBoolean(), Mockito.anyBoolean()); + Mockito.doNothing().when(accountManager).buildACLSearchBuilder(Mockito.any(SearchBuilder.class), Mockito.anyLong(), Mockito.anyBoolean(), Mockito.anyList(), + Mockito.any(Project.ListProjectResourcesCriteria.class)); + Mockito.doNothing().when(accountManager).buildACLViewSearchCriteria(Mockito.any(), Mockito.anyLong(), Mockito.anyBoolean(), Mockito.anyList(), + Mockito.any(Project.ListProjectResourcesCriteria.class)); + final SearchBuilder searchBuilder = Mockito.mock(SearchBuilder.class); + final SearchCriteria searchCriteria = Mockito.mock(SearchCriteria.class); + final EventJoinVO eventJoinVO = Mockito.mock(EventJoinVO.class); + when(searchBuilder.entity()).thenReturn(eventJoinVO); + when(searchBuilder.create()).thenReturn(searchCriteria); + Mockito.when(eventJoinDao.createSearchBuilder()).thenReturn(searchBuilder); + Mockito.when(eventJoinDao.createSearchCriteria()).thenReturn(searchCriteria); + } + + private ListEventsCmd setupMockListEventsCmd() { + ListEventsCmd cmd = Mockito.mock(ListEventsCmd.class); + Mockito.when(cmd.getEntryTime()).thenReturn(null); + Mockito.when(cmd.listAll()).thenReturn(true); + return cmd; + } + + @Test + public void searchForEventsSuccess() { + ListEventsCmd cmd = setupMockListEventsCmd(); + String uuid = UUID.randomUUID().toString(); + Mockito.when(cmd.getResourceId()).thenReturn(uuid); + Mockito.when(cmd.getResourceType()).thenReturn(ApiCommandResourceType.Network.toString()); + List events = new ArrayList<>(); + events.add(Mockito.mock(EventJoinVO.class)); + events.add(Mockito.mock(EventJoinVO.class)); + events.add(Mockito.mock(EventJoinVO.class)); + Pair, Integer> pair = new Pair<>(events, events.size()); + NetworkVO network = Mockito.mock(NetworkVO.class); + Mockito.when(network.getId()).thenReturn(1L); + Mockito.when(network.getAccountId()).thenReturn(account.getId()); + Mockito.when(entityManager.findByUuidIncludingRemoved(Network.class, uuid)).thenReturn(network); + Mockito.doNothing().when(accountManager).checkAccess(account, SecurityChecker.AccessType.ListEntry, true, network); + Mockito.when(eventJoinDao.searchAndCount(Mockito.any(), Mockito.any(Filter.class))).thenReturn(pair); + List respList = new ArrayList(); + for (EventJoinVO vt : events) { + respList.add(eventJoinDao.newEventResponse(vt)); + } + PowerMockito.mockStatic(ViewResponseHelper.class); + Mockito.when(ViewResponseHelper.createEventResponse(Mockito.any())).thenReturn(respList); + ListResponse result = queryManager.searchForEvents(cmd); + Assert.assertEquals((int) result.getCount(), events.size()); + } + + @Test(expected = InvalidParameterValueException.class) + public void searchForEventsFailResourceTypeNull() { + ListEventsCmd cmd = setupMockListEventsCmd(); + String uuid = UUID.randomUUID().toString(); + Mockito.when(cmd.getResourceId()).thenReturn(uuid); + Mockito.when(cmd.getResourceType()).thenReturn(null); + queryManager.searchForEvents(cmd); + } + + @Test(expected = InvalidParameterValueException.class) + public void searchForEventsFailResourceTypeInvalid() { + ListEventsCmd cmd = setupMockListEventsCmd(); + Mockito.when(cmd.getResourceType()).thenReturn("Some"); + queryManager.searchForEvents(cmd); + } + + @Test(expected = InvalidParameterValueException.class) + public void searchForEventsFailResourceIdInvalid() { + ListEventsCmd cmd = setupMockListEventsCmd(); + Mockito.when(cmd.getResourceId()).thenReturn("random"); + Mockito.when(cmd.getResourceType()).thenReturn(ApiCommandResourceType.VirtualMachine.toString()); + queryManager.searchForEvents(cmd); + } + + @Test(expected = InvalidParameterValueException.class) + public void searchForEventsFailResourceNotFound() { + ListEventsCmd cmd = setupMockListEventsCmd(); + String uuid = UUID.randomUUID().toString(); + Mockito.when(cmd.getResourceId()).thenReturn(uuid); + Mockito.when(cmd.getResourceType()).thenReturn(ApiCommandResourceType.VirtualMachine.toString()); + Mockito.when(entityManager.findByUuidIncludingRemoved(VirtualMachine.class, uuid)).thenReturn(null); + queryManager.searchForEvents(cmd); + } + + @Test(expected = PermissionDeniedException.class) + public void searchForEventsFailPermissionDenied() { + ListEventsCmd cmd = setupMockListEventsCmd(); + String uuid = UUID.randomUUID().toString(); + Mockito.when(cmd.getResourceId()).thenReturn(uuid); + Mockito.when(cmd.getResourceType()).thenReturn(ApiCommandResourceType.Network.toString()); + NetworkVO network = Mockito.mock(NetworkVO.class); + Mockito.when(network.getId()).thenReturn(1L); + Mockito.when(network.getAccountId()).thenReturn(2L); + Mockito.when(entityManager.findByUuidIncludingRemoved(Network.class, uuid)).thenReturn(network); + Mockito.doThrow(new PermissionDeniedException("Denied")).when(accountManager).checkAccess(account, SecurityChecker.AccessType.ListEntry, false, network); + queryManager.searchForEvents(cmd); + } +} \ No newline at end of file From cd5f01c7825c000b0f94a9b73781375092a49a33 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 16 Mar 2022 14:35:54 +0530 Subject: [PATCH 22/40] events for domain Signed-off-by: Abhishek Kumar --- ui/src/components/view/TreeView.vue | 9 +++++++++ ui/src/config/section/project.js | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/ui/src/components/view/TreeView.vue b/ui/src/components/view/TreeView.vue index 283e216cb2ff..7d538045af87 100644 --- a/ui/src/components/view/TreeView.vue +++ b/ui/src/components/view/TreeView.vue @@ -64,6 +64,15 @@ + { return ['Admin', 'DomainAdmin'].includes(user.roletype) }, component: shallowRef(defineAsyncComponent(() => import('@/components/view/ResourceLimitTab.vue'))) + }, + { + name: 'events', + resourceType: 'Project', + component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), + show: () => { return 'listEvents' in store.getters.apis } } ], actions: [ From 7bacc435d0afc0b202eab3a312d6442095a06951 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 17 Mar 2022 12:59:07 +0530 Subject: [PATCH 23/40] improvements Signed-off-by: Abhishek Kumar --- .../com/cloud/event/ActionEventUtils.java | 7 +- ui/public/locales/en.json | 2 + ui/src/components/view/EventsTab.vue | 44 +++++++++--- ui/src/components/view/InfoCard.vue | 10 ++- ui/src/components/view/ListView.vue | 15 ++-- ui/src/components/view/SearchView.vue | 27 +++++++ ui/src/components/widgets/ResourceLabel.vue | 72 +++++++++++++++++++ ui/src/config/section/event.js | 2 +- ui/src/views/dashboard/CapacityDashboard.vue | 25 ++----- 9 files changed, 153 insertions(+), 51 deletions(-) create mode 100644 ui/src/components/widgets/ResourceLabel.vue diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java index 25795ac33383..4e5ad420b36e 100644 --- a/server/src/main/java/com/cloud/event/ActionEventUtils.java +++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java @@ -239,8 +239,11 @@ private static void publishOnEventBus(long userId, long accountId, String eventC private static Ternary getResourceDetailsUsingEntityClassAndContext(Class entityClass, ApiCommandResourceType resourceType) { CallContext context = CallContext.current(); - if (resourceType == null) { - resourceType = ApiCommandResourceType.valueFromAssociatedClass(entityClass); + ApiCommandResourceType alternateResourceType = ApiCommandResourceType.valueFromAssociatedClass(entityClass); + if (resourceType == null || + (ObjectUtils.allNotNull(resourceType, alternateResourceType) && + resourceType.getAssociatedClass() != alternateResourceType.getAssociatedClass())) { + resourceType = alternateResourceType; } String entityType = resourceType == null ? entityClass.getSimpleName() : resourceType.toString(); String entityUuid = null; diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index b0925ed22d0e..65c3add70456 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -851,6 +851,7 @@ "label.domainid": "Domain", "label.domainname": "Domain", "label.domainpath": "Domain", +"label.domainrouter": "Virtual Router", "label.domains": "Domains", "label.done": "Done", "label.double.quotes.are.not.allowed": "Double quotes are not allowed", @@ -2358,6 +2359,7 @@ "label.virtual.appliance": "Virtual Appliance", "label.virtual.appliance.details": "Virtual applicance details", "label.virtual.appliances": "Virtual Appliances", +"label.virtualmachine": "Instance", "label.virtual.machine": "Virtual Machine", "label.virtual.machines": "Virtual Machines", "label.virtual.network": "Virtual Network", diff --git a/ui/src/components/view/EventsTab.vue b/ui/src/components/view/EventsTab.vue index 7a615cabc7c3..66f8ae7fcd28 100644 --- a/ui/src/components/view/EventsTab.vue +++ b/ui/src/components/view/EventsTab.vue @@ -23,9 +23,9 @@ :items="events" :actions="actions" :columnKeys="columnKeys" - :selectedColumns="columnKeys" + :selectedColumns="selectedColumnKeys" ref="listview" - @selection-change="onRowSelectionChange" + @update-selected-columns="updateSelectedColumns" @refresh="this.fetchData"/> x !== key) + } else { + this.selectedColumnKeys.push(key) + } + this.updateColumns() + }, + updateColumns () { + this.columns = [] + for (var columnKey of this.columnKeys) { + if (!this.selectedColumnKeys.includes(columnKey)) continue + this.columns.push({ + title: this.$t('label.' + String(columnKey).toLowerCase()), + dataIndex: columnKey, + slots: { customRender: columnKey }, + sorter: function (a, b) { return genericCompare(a[this.dataIndex] || '', b[this.dataIndex] || '') } + }) + } + this.columns.push({ + dataIndex: 'dropdownFilter', + slots: { + filterDropdown: 'filterDropdown', + filterIcon: 'filterIcon' + } + }) } } } diff --git a/ui/src/components/view/InfoCard.vue b/ui/src/components/view/InfoCard.vue index 8f7bd05af867..3d932e706b0f 100644 --- a/ui/src/components/view/InfoCard.vue +++ b/ui/src/components/view/InfoCard.vue @@ -369,11 +369,7 @@
{{ $t('label.resource') }}
- - - {{ resource.resourcename || resource.resourceid }} - {{ resource.resourcename || resource.resourceid }} - +
@@ -715,6 +711,7 @@ import TooltipButton from '@/components/widgets/TooltipButton' import UploadResourceIcon from '@/components/view/UploadResourceIcon' import eventBus from '@/config/eventBus' import ResourceIcon from '@/components/view/ResourceIcon' +import ResourceLabel from '@/components/widgets/ResourceLabel' export default { name: 'InfoCard', @@ -725,7 +722,8 @@ export default { TooltipButton, UploadResourceIcon, ResourceIcon, - RenderIcon + RenderIcon, + ResourceLabel }, props: { resource: { diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index 0b1df67b3485..5a1b1dfab4c2 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -291,15 +291,8 @@ {{ text }} -