CLOUDSTACK-6530: Populate the first class entities in the context to be available for publishing more information for the event bus, checking the displayable property etc.

This commit is contained in:
Nitin Mehta 2014-04-28 18:16:13 -07:00
parent 69add34ad0
commit 3e7ea4e8d9
21 changed files with 415 additions and 301 deletions

View File

@ -19,6 +19,9 @@ package com.cloud.event;
import java.util.HashMap;
import java.util.Map;
import com.cloud.server.ResourceTag;
import com.cloud.vm.ConsoleProxy;
import com.cloud.vm.SecondaryStorageVm;
import org.apache.cloudstack.config.Configuration;
import com.cloud.dc.DataCenter;
@ -62,7 +65,7 @@ import com.cloud.vm.VirtualMachine;
public class EventTypes {
//map of Event and corresponding entity for which Event is applicable
private static Map<String, String> entityEventDetails = null;
private static Map<String, Object> entityEventDetails = null;
// VM Events
public static final String EVENT_VM_CREATE = "VM.CREATE";
@ -492,122 +495,120 @@ public class EventTypes {
static {
// TODO: need a way to force author adding event types to declare the entity details as well, with out braking
// current ActionEvent annotation semantics
// TODO #2 - The map should be from event type to class.
entityEventDetails = new HashMap<String, String>();
entityEventDetails = new HashMap<String, Object>();
entityEventDetails.put(EVENT_VM_CREATE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_DESTROY, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_START, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_STOP, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_REBOOT, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_UPDATE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_UPGRADE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_DYNAMIC_SCALE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_RESETPASSWORD, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_RESETSSHKEY, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_MIGRATE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_MOVE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_RESTORE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_EXPUNGE, VirtualMachine.class.getName());
entityEventDetails.put(EVENT_VM_CREATE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_DESTROY, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_START, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_STOP, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_REBOOT, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_UPDATE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_UPGRADE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_DYNAMIC_SCALE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_RESETPASSWORD, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_RESETSSHKEY, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_MIGRATE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_MOVE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_RESTORE, VirtualMachine.class);
entityEventDetails.put(EVENT_VM_EXPUNGE, VirtualMachine.class);
entityEventDetails.put(EVENT_ROUTER_CREATE, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_DESTROY, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_START, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_STOP, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_REBOOT, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_HA, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_UPGRADE, VirtualRouter.class.getName());
entityEventDetails.put(EVENT_ROUTER_CREATE, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_DESTROY, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_START, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_STOP, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_REBOOT, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_HA, VirtualRouter.class);
entityEventDetails.put(EVENT_ROUTER_UPGRADE, VirtualRouter.class);
entityEventDetails.put(EVENT_PROXY_CREATE, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_DESTROY, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_START, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_STOP, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_REBOOT, "ConsoleProxy");
entityEventDetails.put(EVENT_ROUTER_HA, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_HA, "ConsoleProxy");
entityEventDetails.put(EVENT_PROXY_CREATE, ConsoleProxy.class);
entityEventDetails.put(EVENT_PROXY_DESTROY, ConsoleProxy.class);
entityEventDetails.put(EVENT_PROXY_START, ConsoleProxy.class);
entityEventDetails.put(EVENT_PROXY_STOP, ConsoleProxy.class);
entityEventDetails.put(EVENT_PROXY_REBOOT, ConsoleProxy.class);
entityEventDetails.put(EVENT_ROUTER_HA, ConsoleProxy.class);
entityEventDetails.put(EVENT_PROXY_HA, ConsoleProxy.class);
entityEventDetails.put(EVENT_VNC_CONNECT, "VNC");
entityEventDetails.put(EVENT_VNC_DISCONNECT, "VNC");
// Network Events
entityEventDetails.put(EVENT_NETWORK_CREATE, Network.class.getName());
entityEventDetails.put(EVENT_NETWORK_DELETE, Network.class.getName());
entityEventDetails.put(EVENT_NETWORK_UPDATE, Network.class.getName());
entityEventDetails.put(EVENT_NETWORK_RESTART, Network.class.getName());
entityEventDetails.put(EVENT_NET_IP_ASSIGN, PublicIpAddress.class.getName());
entityEventDetails.put(EVENT_NET_IP_RELEASE, PublicIpAddress.class.getName());
entityEventDetails.put(EVENT_NET_RULE_ADD, Network.class.getName());
entityEventDetails.put(EVENT_NET_RULE_DELETE, Network.class.getName());
entityEventDetails.put(EVENT_NET_RULE_MODIFY, Network.class.getName());
entityEventDetails.put(EVENT_FIREWALL_OPEN, Network.class.getName());
entityEventDetails.put(EVENT_FIREWALL_CLOSE, Network.class.getName());
entityEventDetails.put(EVENT_NETWORK_CREATE, Network.class);
entityEventDetails.put(EVENT_NETWORK_DELETE, Network.class);
entityEventDetails.put(EVENT_NETWORK_UPDATE, Network.class);
entityEventDetails.put(EVENT_NETWORK_RESTART, Network.class);
entityEventDetails.put(EVENT_NET_IP_ASSIGN, PublicIpAddress.class);
entityEventDetails.put(EVENT_NET_IP_RELEASE, PublicIpAddress.class);
entityEventDetails.put(EVENT_NET_RULE_ADD, Network.class);
entityEventDetails.put(EVENT_NET_RULE_DELETE, Network.class);
entityEventDetails.put(EVENT_NET_RULE_MODIFY, Network.class);
entityEventDetails.put(EVENT_FIREWALL_OPEN, Network.class);
entityEventDetails.put(EVENT_FIREWALL_CLOSE, Network.class);
// Load Balancers
entityEventDetails.put(EVENT_ASSIGN_TO_LOAD_BALANCER_RULE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_REMOVE_FROM_LOAD_BALANCER_RULE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LOAD_BALANCER_CREATE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LOAD_BALANCER_DELETE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_STICKINESSPOLICY_CREATE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_STICKINESSPOLICY_DELETE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LOAD_BALANCER_UPDATE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_CERT_UPLOAD, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_CERT_DELETE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_CERT_ASSIGN, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_LB_CERT_REMOVE, LoadBalancer.class.getName());
entityEventDetails.put(EVENT_ASSIGN_TO_LOAD_BALANCER_RULE, LoadBalancer.class);
entityEventDetails.put(EVENT_REMOVE_FROM_LOAD_BALANCER_RULE, LoadBalancer.class);
entityEventDetails.put(EVENT_LOAD_BALANCER_CREATE, LoadBalancer.class);
entityEventDetails.put(EVENT_LOAD_BALANCER_DELETE, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_STICKINESSPOLICY_CREATE, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_STICKINESSPOLICY_DELETE, LoadBalancer.class);
entityEventDetails.put(EVENT_LOAD_BALANCER_UPDATE, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_CERT_UPLOAD, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_CERT_DELETE, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_CERT_ASSIGN, LoadBalancer.class);
entityEventDetails.put(EVENT_LB_CERT_REMOVE, LoadBalancer.class);
// Account events
entityEventDetails.put(EVENT_ACCOUNT_ENABLE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_DISABLE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_CREATE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_DELETE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_UPDATE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_MARK_DEFAULT_ZONE, Account.class.getName());
entityEventDetails.put(EVENT_ACCOUNT_ENABLE, Account.class);
entityEventDetails.put(EVENT_ACCOUNT_DISABLE, Account.class);
entityEventDetails.put(EVENT_ACCOUNT_CREATE, Account.class);
entityEventDetails.put(EVENT_ACCOUNT_DELETE, Account.class);
entityEventDetails.put(EVENT_ACCOUNT_UPDATE, Account.class);
entityEventDetails.put(EVENT_ACCOUNT_MARK_DEFAULT_ZONE, Account.class);
// UserVO Events
entityEventDetails.put(EVENT_USER_LOGIN, User.class.getName());
entityEventDetails.put(EVENT_USER_LOGOUT, User.class.getName());
entityEventDetails.put(EVENT_USER_CREATE, User.class.getName());
entityEventDetails.put(EVENT_USER_DELETE, User.class.getName());
entityEventDetails.put(EVENT_USER_DISABLE, User.class.getName());
entityEventDetails.put(EVENT_USER_UPDATE, User.class.getName());
entityEventDetails.put(EVENT_USER_ENABLE, User.class.getName());
entityEventDetails.put(EVENT_USER_LOCK, User.class.getName());
entityEventDetails.put(EVENT_USER_LOGIN, User.class);
entityEventDetails.put(EVENT_USER_LOGOUT, User.class);
entityEventDetails.put(EVENT_USER_CREATE, User.class);
entityEventDetails.put(EVENT_USER_DELETE, User.class);
entityEventDetails.put(EVENT_USER_DISABLE, User.class);
entityEventDetails.put(EVENT_USER_UPDATE, User.class);
entityEventDetails.put(EVENT_USER_ENABLE, User.class);
entityEventDetails.put(EVENT_USER_LOCK, User.class);
// Template Events
entityEventDetails.put(EVENT_TEMPLATE_CREATE, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_DELETE, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_UPDATE, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_START, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_SUCCESS, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_FAILED, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_COPY, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_EXTRACT, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_UPLOAD, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_CLEANUP, VirtualMachineTemplate.class.getName());
entityEventDetails.put(EVENT_TEMPLATE_CREATE, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_DELETE, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_UPDATE, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_START, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_SUCCESS, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_DOWNLOAD_FAILED, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_COPY, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_EXTRACT, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_UPLOAD, VirtualMachineTemplate.class);
entityEventDetails.put(EVENT_TEMPLATE_CLEANUP, VirtualMachineTemplate.class);
// Volume Events
entityEventDetails.put(EVENT_VOLUME_CREATE, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_DELETE, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_ATTACH, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_DETACH, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_EXTRACT, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_UPLOAD, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_MIGRATE, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_RESIZE, Volume.class.getName());
entityEventDetails.put(EVENT_VOLUME_CREATE, Volume.class);
entityEventDetails.put(EVENT_VOLUME_DELETE, Volume.class);
entityEventDetails.put(EVENT_VOLUME_ATTACH, Volume.class);
entityEventDetails.put(EVENT_VOLUME_DETACH, Volume.class);
entityEventDetails.put(EVENT_VOLUME_EXTRACT, Volume.class);
entityEventDetails.put(EVENT_VOLUME_UPLOAD, Volume.class);
entityEventDetails.put(EVENT_VOLUME_MIGRATE, Volume.class);
entityEventDetails.put(EVENT_VOLUME_RESIZE, Volume.class);
// Domains
entityEventDetails.put(EVENT_DOMAIN_CREATE, Domain.class.getName());
entityEventDetails.put(EVENT_DOMAIN_DELETE, Domain.class.getName());
entityEventDetails.put(EVENT_DOMAIN_UPDATE, Domain.class.getName());
entityEventDetails.put(EVENT_DOMAIN_CREATE, Domain.class);
entityEventDetails.put(EVENT_DOMAIN_DELETE, Domain.class);
entityEventDetails.put(EVENT_DOMAIN_UPDATE, Domain.class);
// Snapshots
entityEventDetails.put(EVENT_SNAPSHOT_CREATE, Snapshot.class.getName());
entityEventDetails.put(EVENT_SNAPSHOT_DELETE, Snapshot.class.getName());
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_CREATE, Snapshot.class.getName());
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_UPDATE, Snapshot.class.getName());
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_DELETE, Snapshot.class.getName());
entityEventDetails.put(EVENT_SNAPSHOT_CREATE, Snapshot.class);
entityEventDetails.put(EVENT_SNAPSHOT_DELETE, Snapshot.class);
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_CREATE, Snapshot.class);
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_UPDATE, Snapshot.class);
entityEventDetails.put(EVENT_SNAPSHOT_POLICY_DELETE, Snapshot.class);
// ISO
entityEventDetails.put(EVENT_ISO_CREATE, "Iso");
@ -619,129 +620,129 @@ public class EventTypes {
entityEventDetails.put(EVENT_ISO_UPLOAD, "Iso");
// SSVM
entityEventDetails.put(EVENT_SSVM_CREATE, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_DESTROY, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_START, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_STOP, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_REBOOT, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_HA, "SecondaryStorageVm");
entityEventDetails.put(EVENT_SSVM_CREATE, SecondaryStorageVm.class);
entityEventDetails.put(EVENT_SSVM_DESTROY, SecondaryStorageVm.class);
entityEventDetails.put(EVENT_SSVM_START, SecondaryStorageVm.class);
entityEventDetails.put(EVENT_SSVM_STOP, SecondaryStorageVm.class);
entityEventDetails.put(EVENT_SSVM_REBOOT, SecondaryStorageVm.class);
entityEventDetails.put(EVENT_SSVM_HA, SecondaryStorageVm.class);
// Service Offerings
entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class.getName());
entityEventDetails.put(EVENT_SERVICE_OFFERING_EDIT, ServiceOffering.class.getName());
entityEventDetails.put(EVENT_SERVICE_OFFERING_DELETE, ServiceOffering.class.getName());
entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class);
entityEventDetails.put(EVENT_SERVICE_OFFERING_EDIT, ServiceOffering.class);
entityEventDetails.put(EVENT_SERVICE_OFFERING_DELETE, ServiceOffering.class);
// Disk Offerings
entityEventDetails.put(EVENT_DISK_OFFERING_CREATE, DiskOffering.class.getName());
entityEventDetails.put(EVENT_DISK_OFFERING_EDIT, DiskOffering.class.getName());
entityEventDetails.put(EVENT_DISK_OFFERING_DELETE, DiskOffering.class.getName());
entityEventDetails.put(EVENT_DISK_OFFERING_CREATE, DiskOffering.class);
entityEventDetails.put(EVENT_DISK_OFFERING_EDIT, DiskOffering.class);
entityEventDetails.put(EVENT_DISK_OFFERING_DELETE, DiskOffering.class);
// Network offerings
entityEventDetails.put(EVENT_NETWORK_OFFERING_CREATE, NetworkOffering.class.getName());
entityEventDetails.put(EVENT_NETWORK_OFFERING_ASSIGN, NetworkOffering.class.getName());
entityEventDetails.put(EVENT_NETWORK_OFFERING_EDIT, NetworkOffering.class.getName());
entityEventDetails.put(EVENT_NETWORK_OFFERING_REMOVE, NetworkOffering.class.getName());
entityEventDetails.put(EVENT_NETWORK_OFFERING_DELETE, NetworkOffering.class.getName());
entityEventDetails.put(EVENT_NETWORK_OFFERING_CREATE, NetworkOffering.class);
entityEventDetails.put(EVENT_NETWORK_OFFERING_ASSIGN, NetworkOffering.class);
entityEventDetails.put(EVENT_NETWORK_OFFERING_EDIT, NetworkOffering.class);
entityEventDetails.put(EVENT_NETWORK_OFFERING_REMOVE, NetworkOffering.class);
entityEventDetails.put(EVENT_NETWORK_OFFERING_DELETE, NetworkOffering.class);
// Pods
entityEventDetails.put(EVENT_POD_CREATE, Pod.class.getName());
entityEventDetails.put(EVENT_POD_EDIT, Pod.class.getName());
entityEventDetails.put(EVENT_POD_DELETE, Pod.class.getName());
entityEventDetails.put(EVENT_POD_CREATE, Pod.class);
entityEventDetails.put(EVENT_POD_EDIT, Pod.class);
entityEventDetails.put(EVENT_POD_DELETE, Pod.class);
// Zones
entityEventDetails.put(EVENT_ZONE_CREATE, DataCenter.class.getName());
entityEventDetails.put(EVENT_ZONE_EDIT, DataCenter.class.getName());
entityEventDetails.put(EVENT_ZONE_DELETE, DataCenter.class.getName());
entityEventDetails.put(EVENT_ZONE_CREATE, DataCenter.class);
entityEventDetails.put(EVENT_ZONE_EDIT, DataCenter.class);
entityEventDetails.put(EVENT_ZONE_DELETE, DataCenter.class);
// VLANs/IP ranges
entityEventDetails.put(EVENT_VLAN_IP_RANGE_CREATE, Vlan.class.getName());
entityEventDetails.put(EVENT_VLAN_IP_RANGE_DELETE, Vlan.class.getName());
entityEventDetails.put(EVENT_VLAN_IP_RANGE_DEDICATE, Vlan.class.getName());
entityEventDetails.put(EVENT_VLAN_IP_RANGE_RELEASE, Vlan.class.getName());
entityEventDetails.put(EVENT_VLAN_IP_RANGE_CREATE, Vlan.class);
entityEventDetails.put(EVENT_VLAN_IP_RANGE_DELETE, Vlan.class);
entityEventDetails.put(EVENT_VLAN_IP_RANGE_DEDICATE, Vlan.class);
entityEventDetails.put(EVENT_VLAN_IP_RANGE_RELEASE, Vlan.class);
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_CREATE, StorageNetworkIpRange.class.getName());
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_DELETE, StorageNetworkIpRange.class.getName());
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_UPDATE, StorageNetworkIpRange.class.getName());
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_CREATE, StorageNetworkIpRange.class);
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_DELETE, StorageNetworkIpRange.class);
entityEventDetails.put(EVENT_STORAGE_IP_RANGE_UPDATE, StorageNetworkIpRange.class);
// Configuration Table
entityEventDetails.put(EVENT_CONFIGURATION_VALUE_EDIT, Configuration.class.getName());
entityEventDetails.put(EVENT_CONFIGURATION_VALUE_EDIT, Configuration.class);
// Security Groups
entityEventDetails.put(EVENT_SECURITY_GROUP_AUTHORIZE_INGRESS, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_REVOKE_INGRESS, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_AUTHORIZE_EGRESS, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_REVOKE_EGRESS, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_CREATE, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_DELETE, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_ASSIGN, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_REMOVE, SecurityGroup.class.getName());
entityEventDetails.put(EVENT_SECURITY_GROUP_AUTHORIZE_INGRESS, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_REVOKE_INGRESS, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_AUTHORIZE_EGRESS, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_REVOKE_EGRESS, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_CREATE, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_DELETE, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_ASSIGN, SecurityGroup.class);
entityEventDetails.put(EVENT_SECURITY_GROUP_REMOVE, SecurityGroup.class);
// Host
entityEventDetails.put(EVENT_HOST_RECONNECT, Host.class.getName());
entityEventDetails.put(EVENT_HOST_RECONNECT, Host.class);
// Maintenance
entityEventDetails.put(EVENT_MAINTENANCE_CANCEL, Host.class.getName());
entityEventDetails.put(EVENT_MAINTENANCE_CANCEL_PRIMARY_STORAGE, Host.class.getName());
entityEventDetails.put(EVENT_MAINTENANCE_PREPARE, Host.class.getName());
entityEventDetails.put(EVENT_MAINTENANCE_PREPARE_PRIMARY_STORAGE, Host.class.getName());
entityEventDetails.put(EVENT_MAINTENANCE_CANCEL, Host.class);
entityEventDetails.put(EVENT_MAINTENANCE_CANCEL_PRIMARY_STORAGE, Host.class);
entityEventDetails.put(EVENT_MAINTENANCE_PREPARE, Host.class);
entityEventDetails.put(EVENT_MAINTENANCE_PREPARE_PRIMARY_STORAGE, Host.class);
// VPN
entityEventDetails.put(EVENT_REMOTE_ACCESS_VPN_CREATE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_REMOTE_ACCESS_VPN_DESTROY, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_VPN_USER_ADD, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_VPN_USER_REMOVE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_GATEWAY_CREATE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_GATEWAY_DELETE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_CREATE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_DELETE, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_RESET, RemoteAccessVpn.class.getName());
entityEventDetails.put(EVENT_REMOTE_ACCESS_VPN_CREATE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_REMOTE_ACCESS_VPN_DESTROY, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_VPN_USER_ADD, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_VPN_USER_REMOVE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_GATEWAY_CREATE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_GATEWAY_DELETE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_CREATE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_DELETE, RemoteAccessVpn.class);
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_RESET, RemoteAccessVpn.class);
// Custom certificates
entityEventDetails.put(EVENT_UPLOAD_CUSTOM_CERTIFICATE, "Certificate");
// OneToOnenat
entityEventDetails.put(EVENT_ENABLE_STATIC_NAT, StaticNat.class.getName());
entityEventDetails.put(EVENT_DISABLE_STATIC_NAT, StaticNat.class.getName());
entityEventDetails.put(EVENT_ENABLE_STATIC_NAT, StaticNat.class);
entityEventDetails.put(EVENT_DISABLE_STATIC_NAT, StaticNat.class);
entityEventDetails.put(EVENT_ZONE_VLAN_ASSIGN, Vlan.class.getName());
entityEventDetails.put(EVENT_ZONE_VLAN_RELEASE, Vlan.class.getName());
entityEventDetails.put(EVENT_ZONE_VLAN_ASSIGN, Vlan.class);
entityEventDetails.put(EVENT_ZONE_VLAN_RELEASE, Vlan.class);
// Projects
entityEventDetails.put(EVENT_PROJECT_CREATE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_UPDATE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_DELETE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_ACTIVATE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_SUSPEND, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_ACCOUNT_ADD, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_INVITATION_UPDATE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_INVITATION_REMOVE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_ACCOUNT_REMOVE, Project.class.getName());
entityEventDetails.put(EVENT_PROJECT_CREATE, Project.class);
entityEventDetails.put(EVENT_PROJECT_UPDATE, Project.class);
entityEventDetails.put(EVENT_PROJECT_DELETE, Project.class);
entityEventDetails.put(EVENT_PROJECT_ACTIVATE, Project.class);
entityEventDetails.put(EVENT_PROJECT_SUSPEND, Project.class);
entityEventDetails.put(EVENT_PROJECT_ACCOUNT_ADD, Project.class);
entityEventDetails.put(EVENT_PROJECT_INVITATION_UPDATE, Project.class);
entityEventDetails.put(EVENT_PROJECT_INVITATION_REMOVE, Project.class);
entityEventDetails.put(EVENT_PROJECT_ACCOUNT_REMOVE, Project.class);
// Network as a Service
entityEventDetails.put(EVENT_NETWORK_ELEMENT_CONFIGURE, Network.class.getName());
entityEventDetails.put(EVENT_NETWORK_ELEMENT_CONFIGURE, Network.class);
// Physical Network Events
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_CREATE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_DELETE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_UPDATE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_CREATE, PhysicalNetwork.class);
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_DELETE, PhysicalNetwork.class);
entityEventDetails.put(EVENT_PHYSICAL_NETWORK_UPDATE, PhysicalNetwork.class);
// Physical Network Service Provider Events
entityEventDetails.put(EVENT_SERVICE_PROVIDER_CREATE, PhysicalNetworkServiceProvider.class.getName());
entityEventDetails.put(EVENT_SERVICE_PROVIDER_DELETE, PhysicalNetworkServiceProvider.class.getName());
entityEventDetails.put(EVENT_SERVICE_PROVIDER_UPDATE, PhysicalNetworkServiceProvider.class.getName());
entityEventDetails.put(EVENT_SERVICE_PROVIDER_CREATE, PhysicalNetworkServiceProvider.class);
entityEventDetails.put(EVENT_SERVICE_PROVIDER_DELETE, PhysicalNetworkServiceProvider.class);
entityEventDetails.put(EVENT_SERVICE_PROVIDER_UPDATE, PhysicalNetworkServiceProvider.class);
// Physical Network TrafficType Events
entityEventDetails.put(EVENT_TRAFFIC_TYPE_CREATE, PhysicalNetworkTrafficType.class.getName());
entityEventDetails.put(EVENT_TRAFFIC_TYPE_DELETE, PhysicalNetworkTrafficType.class.getName());
entityEventDetails.put(EVENT_TRAFFIC_TYPE_UPDATE, PhysicalNetworkTrafficType.class.getName());
entityEventDetails.put(EVENT_TRAFFIC_TYPE_CREATE, PhysicalNetworkTrafficType.class);
entityEventDetails.put(EVENT_TRAFFIC_TYPE_DELETE, PhysicalNetworkTrafficType.class);
entityEventDetails.put(EVENT_TRAFFIC_TYPE_UPDATE, PhysicalNetworkTrafficType.class);
// external network device events
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_ADD, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_DELETE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_CONFIGURE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_ADD, PhysicalNetwork.class);
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_DELETE, PhysicalNetwork.class);
entityEventDetails.put(EVENT_EXTERNAL_LB_DEVICE_CONFIGURE, PhysicalNetwork.class);
// external switch management device events (E.g.: Cisco Nexus 1000v Virtual Supervisor Module.
entityEventDetails.put(EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_ADD, "Nexus1000v");
@ -750,32 +751,32 @@ public class EventTypes {
entityEventDetails.put(EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_ENABLE, "Nexus1000v");
entityEventDetails.put(EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DISABLE, "Nexus1000v");
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_ADD, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_DELETE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_CONFIGURE, PhysicalNetwork.class.getName());
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_ADD, PhysicalNetwork.class);
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_DELETE, PhysicalNetwork.class);
entityEventDetails.put(EVENT_EXTERNAL_FIREWALL_DEVICE_CONFIGURE, PhysicalNetwork.class);
// VPC
entityEventDetails.put(EVENT_VPC_CREATE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_UPDATE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_DELETE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_RESTART, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_CREATE, Vpc.class);
entityEventDetails.put(EVENT_VPC_UPDATE, Vpc.class);
entityEventDetails.put(EVENT_VPC_DELETE, Vpc.class);
entityEventDetails.put(EVENT_VPC_RESTART, Vpc.class);
// VPC offerings
entityEventDetails.put(EVENT_VPC_OFFERING_CREATE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_OFFERING_UPDATE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_OFFERING_DELETE, Vpc.class.getName());
entityEventDetails.put(EVENT_VPC_OFFERING_CREATE, Vpc.class);
entityEventDetails.put(EVENT_VPC_OFFERING_UPDATE, Vpc.class);
entityEventDetails.put(EVENT_VPC_OFFERING_DELETE, Vpc.class);
// Private gateway
entityEventDetails.put(EVENT_PRIVATE_GATEWAY_CREATE, PrivateGateway.class.getName());
entityEventDetails.put(EVENT_PRIVATE_GATEWAY_DELETE, PrivateGateway.class.getName());
entityEventDetails.put(EVENT_PRIVATE_GATEWAY_CREATE, PrivateGateway.class);
entityEventDetails.put(EVENT_PRIVATE_GATEWAY_DELETE, PrivateGateway.class);
// Static routes
entityEventDetails.put(EVENT_STATIC_ROUTE_CREATE, StaticRoute.class.getName());
entityEventDetails.put(EVENT_STATIC_ROUTE_DELETE, StaticRoute.class.getName());
entityEventDetails.put(EVENT_STATIC_ROUTE_CREATE, StaticRoute.class);
entityEventDetails.put(EVENT_STATIC_ROUTE_DELETE, StaticRoute.class);
// tag related events
entityEventDetails.put(EVENT_TAGS_CREATE, "Tag");
entityEventDetails.put(EVENT_TAGS_DELETE, "tag");
entityEventDetails.put(EVENT_TAGS_CREATE, ResourceTag.class);
entityEventDetails.put(EVENT_TAGS_DELETE, ResourceTag.class);
// external network device events
entityEventDetails.put(EVENT_EXTERNAL_NVP_CONTROLLER_ADD, "NvpController");
@ -783,23 +784,23 @@ public class EventTypes {
entityEventDetails.put(EVENT_EXTERNAL_NVP_CONTROLLER_CONFIGURE, "NvpController");
// AutoScale
entityEventDetails.put(EVENT_COUNTER_CREATE, AutoScaleCounter.class.getName());
entityEventDetails.put(EVENT_COUNTER_DELETE, AutoScaleCounter.class.getName());
entityEventDetails.put(EVENT_CONDITION_CREATE, Condition.class.getName());
entityEventDetails.put(EVENT_CONDITION_DELETE, Condition.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_CREATE, AutoScalePolicy.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_UPDATE, AutoScalePolicy.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_DELETE, AutoScalePolicy.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_CREATE, AutoScaleVmProfile.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_DELETE, AutoScaleVmProfile.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_UPDATE, AutoScaleVmProfile.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_CREATE, AutoScaleVmGroup.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_DELETE, AutoScaleVmGroup.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_UPDATE, AutoScaleVmGroup.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_ENABLE, AutoScaleVmGroup.class.getName());
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_DISABLE, AutoScaleVmGroup.class.getName());
entityEventDetails.put(EVENT_GUEST_VLAN_RANGE_DEDICATE, GuestVlan.class.getName());
entityEventDetails.put(EVENT_DEDICATED_GUEST_VLAN_RANGE_RELEASE, GuestVlan.class.getName());
entityEventDetails.put(EVENT_COUNTER_CREATE, AutoScaleCounter.class);
entityEventDetails.put(EVENT_COUNTER_DELETE, AutoScaleCounter.class);
entityEventDetails.put(EVENT_CONDITION_CREATE, Condition.class);
entityEventDetails.put(EVENT_CONDITION_DELETE, Condition.class);
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_CREATE, AutoScalePolicy.class);
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_UPDATE, AutoScalePolicy.class);
entityEventDetails.put(EVENT_AUTOSCALEPOLICY_DELETE, AutoScalePolicy.class);
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_CREATE, AutoScaleVmProfile.class);
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_DELETE, AutoScaleVmProfile.class);
entityEventDetails.put(EVENT_AUTOSCALEVMPROFILE_UPDATE, AutoScaleVmProfile.class);
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_CREATE, AutoScaleVmGroup.class);
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_DELETE, AutoScaleVmGroup.class);
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_UPDATE, AutoScaleVmGroup.class);
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_ENABLE, AutoScaleVmGroup.class);
entityEventDetails.put(EVENT_AUTOSCALEVMGROUP_DISABLE, AutoScaleVmGroup.class);
entityEventDetails.put(EVENT_GUEST_VLAN_RANGE_DEDICATE, GuestVlan.class);
entityEventDetails.put(EVENT_DEDICATED_GUEST_VLAN_RANGE_RELEASE, GuestVlan.class);
// OpenDaylight
entityEventDetails.put(EVENT_EXTERNAL_OPENDAYLIGHT_ADD_CONTROLLER, "OpenDaylightController");
@ -807,24 +808,40 @@ public class EventTypes {
entityEventDetails.put(EVENT_EXTERNAL_OPENDAYLIGHT_CONFIGURE_CONTROLLER, "OpenDaylightController");
//Guest OS
entityEventDetails.put(EVENT_GUEST_OS_ADD, GuestOS.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_REMOVE, GuestOS.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_UPDATE, GuestOS.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_ADD, GuestOSHypervisor.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_REMOVE, GuestOSHypervisor.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_UPDATE, GuestOSHypervisor.class.getName());
entityEventDetails.put(EVENT_GUEST_OS_ADD, GuestOS.class);
entityEventDetails.put(EVENT_GUEST_OS_REMOVE, GuestOS.class);
entityEventDetails.put(EVENT_GUEST_OS_UPDATE, GuestOS.class);
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_ADD, GuestOSHypervisor.class);
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_REMOVE, GuestOSHypervisor.class);
entityEventDetails.put(EVENT_GUEST_OS_MAPPING_UPDATE, GuestOSHypervisor.class);
}
public static String getEntityForEvent(String eventName) {
String entityClassName = entityEventDetails.get(eventName);
if (entityClassName == null || entityClassName.isEmpty()) {
Object entityClass = entityEventDetails.get(eventName);
if (entityClass == null) {
return null;
} else if (entityClass instanceof String){
return (String)entityClass;
} else if (entityClass instanceof Class){
String entityClassName = ((Class)entityClass).getName();
int index = entityClassName.lastIndexOf(".");
String entityName = entityClassName;
if (index != -1) {
entityName = entityClassName.substring(index + 1);
}
return entityName;
}
int index = entityClassName.lastIndexOf(".");
String entityName = entityClassName;
if (index != -1) {
entityName = entityClassName.substring(index + 1);
return null;
}
public static Class getEntityClassForEvent(String eventName) {
Object clz = entityEventDetails.get(eventName);
if(clz instanceof Class){
return (Class)entityEventDetails.get(eventName);
}
return entityName;
return null;
}
}

View File

@ -20,6 +20,7 @@ import java.util.Date;
import java.util.Map;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.api.Displayable;
import org.apache.cloudstack.api.Identity;
import org.apache.cloudstack.api.InternalIdentity;
@ -31,7 +32,7 @@ import com.cloud.utils.fsm.StateObject;
* VirtualMachine describes the properties held by a virtual machine
*
*/
public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, InternalIdentity, StateObject<VirtualMachine.State> {
public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, InternalIdentity, Displayable, StateObject<VirtualMachine.State> {
public enum PowerState {
PowerUnknown,
@ -321,6 +322,7 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I
long getUpdated();
@Override
boolean isDisplay();
}

View File

@ -17,6 +17,10 @@
package org.apache.cloudstack.api;
import com.cloud.event.EventTypes;
import org.apache.cloudstack.context.CallContext;
import org.apache.log4j.Logger;
/**
* queryAsyncJobResult API command.
*/
@ -27,6 +31,7 @@ public abstract class BaseAsyncCmd extends BaseCmd {
public static final String vpcSyncObject = "vpc";
public static final String snapshotHostSyncObject = "snapshothost";
public static final String gslbSyncObject = "globalserverloadbalacner";
private static final Logger s_logger = Logger.getLogger(BaseAsyncCmd.class.getName());
private Object job;
@ -89,4 +94,27 @@ public abstract class BaseAsyncCmd extends BaseCmd {
public Object getJob() {
return job;
}
@Override
public boolean isDisplay(){
// Get entity Class from the event name. Eg. - Volume.class
final CallContext ctx = CallContext.current();
Class entityClass = EventTypes.getEntityClassForEvent(getEventType());
boolean isDisplay = true;
try{
// If the entity Class implements Displayable interface then see the flag from VO
if (entityClass != null && Displayable.class.isAssignableFrom(entityClass)){
Object objVO =_entityMgr.findById(entityClass, (Long)ctx.getContextParameter(entityClass.getName()));
isDisplay = ((Displayable)objVO).isDisplay();
ctx.setEventDisplayEnabled(isDisplay);
}
}catch (Exception e){
s_logger.trace("Caught exception while finding the display property, defaulting to true and moving on " +e);
}
return isDisplay;
}
}

View File

@ -360,7 +360,7 @@ public abstract class BaseCmd {
* display flag is used to control the display of the resource only to the end user. It doesnt affect Root Admin.
* @return display flag
*/
public boolean isDisplayResourceEnabled(){
public boolean isDisplay(){
return true;
}
}

View File

@ -0,0 +1,21 @@
// 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;
public interface Displayable {
boolean isDisplay();
}

View File

@ -250,6 +250,14 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd {
return displayVm;
}
@Override
public boolean isDisplay() {
if(displayVm == null)
return true;
else
return displayVm;
}
public List<Long> getSecurityGroupIdList() {
if (securityGroupNameList != null && securityGroupIdList != null) {
throw new InvalidParameterValueException("securitygroupids parameter is mutually exclusive with securitygroupnames parameter");
@ -408,16 +416,6 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd {
return accountId;
}
@Override
public boolean isDisplayResourceEnabled(){
Boolean display = getDisplayVm();
if(display == null){
return true;
} else {
return display;
}
}
@Override
public String getEventType() {
return EventTypes.EVENT_VM_CREATE;

View File

@ -151,7 +151,7 @@ public class UpdateVMCmd extends BaseCustomIdCmd {
}
@Override
public boolean isDisplayResourceEnabled(){
public boolean isDisplay(){
UserVm userVm = _entityMgr.findById(UserVm.class, getId());
if (userVm != null) {
return userVm.isDisplayVm();

View File

@ -118,7 +118,7 @@ public class UpgradeVMCmd extends BaseCmd {
}
@Override
public boolean isDisplayResourceEnabled(){
public boolean isDisplay(){
return _userVmService.isDisplayResourceEnabled(getId());
}

View File

@ -194,16 +194,6 @@ public class CreateVolumeCmd extends BaseAsyncCreateCustomIdCmd {
return EventTypes.EVENT_VOLUME_CREATE;
}
@Override
public boolean isDisplayResourceEnabled(){
Boolean display = getDisplayVolume();
if(display == null){
return true;
} else {
return display;
}
}
@Override
public String getEventDescription() {
return "creating volume: " + getVolumeName() + ((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId());

View File

@ -80,7 +80,7 @@ public class DeleteVolumeCmd extends BaseCmd {
}
@Override
public boolean isDisplayResourceEnabled(){
public boolean isDisplay(){
return _volumeService.isDisplayResourceEnabled(getId());
}

View File

@ -130,11 +130,6 @@ public class UpdateVolumeCmd extends BaseAsyncCustomIdCmd {
return volume.getAccountId();
}
@Override
public boolean isDisplayResourceEnabled(){
return _volumeService.isDisplayResourceEnabled(getId());
}
@Override
public String getEventType() {
return EventTypes.EVENT_VOLUME_UPDATE;

View File

@ -316,6 +316,17 @@ public class CallContext {
isEventDisplayEnabled = eventDisplayEnabled;
}
public Map<Object, Object> getContextParameters() {
return context;
}
public void putContextParameters(Map<Object, Object> details){
if (details == null) return;
for(Object key : details.keySet()){
putContextParameter(key, details.get(key));
}
}
public static void setActionEventInfo(String eventType, String description) {
CallContext context = CallContext.current();
if (context != null) {

View File

@ -75,6 +75,9 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat
// whenever we deserialize, the UserContext needs to be updated
String userIdStr = params.get("ctxUserId");
String acctIdStr = params.get("ctxAccountId");
String contextDetails = params.get("ctxDetails");
Long userId = null;
Account accountObject = null;
@ -94,7 +97,12 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat
accountObject = _entityMgr.findById(Account.class, Long.parseLong(acctIdStr));
}
CallContext.register(user, accountObject);
CallContext ctx = CallContext.register(user, accountObject);
if(contextDetails != null){
Type objectMapType = new TypeToken<Map<Object, Object>>() {}.getType();
ctx.putContextParameters((Map<Object, Object>) gson.fromJson(contextDetails, objectMapType));
}
try {
// dispatch could ultimately queue the job
_dispatcher.dispatch(cmdObj, params, true);

View File

@ -36,10 +36,7 @@ import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import com.cloud.api.dispatch.DispatchChain;
import com.cloud.api.dispatch.DispatchChainFactory;
import com.cloud.api.dispatch.DispatchTask;
import com.cloud.event.EventTypes;
import com.cloud.user.AccountManager;
import com.cloud.utils.ReflectUtil;
import com.cloud.vm.VirtualMachine;
public class ApiDispatcher {
private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName());
@ -75,7 +72,6 @@ public class ApiDispatcher {
public void dispatchCreateCmd(final BaseAsyncCreateCmd cmd, final Map<String, String> params) throws Exception {
asyncCreationDispatchChain.dispatch(new DispatchTask(cmd, params));
CallContext.current().setEventDisplayEnabled(cmd.isDisplayResourceEnabled());
}
public void dispatch(final BaseCmd cmd, final Map<String, String> params, final boolean execute) throws Exception {
@ -83,26 +79,15 @@ public class ApiDispatcher {
standardDispatchChain.dispatch(new DispatchTask(cmd, params));
final CallContext ctx = CallContext.current();
ctx.setEventDisplayEnabled(cmd.isDisplayResourceEnabled());
ctx.setEventDisplayEnabled(cmd.isDisplay());
// TODO This if shouldn't be here. Use polymorphism and move it to validateSpecificParameters
if (cmd instanceof BaseAsyncCmd) {
final BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd;
final String startEventId = params.get(ApiConstants.CTX_START_EVENT_ID);
String uuid = params.get(ApiConstants.UUID);
ctx.setStartEventId(Long.valueOf(startEventId));
// Fow now use the key from EventTypes.java rather than getInstanceType bcz the later doesn't refer to the interfaces
// Add the resource id in the call context, also add some other first class object ids (for now vm) if available.
// TODO - this should be done for all the uuids passed in the cmd - so should be moved where uuid to id conversion happens.
if(EventTypes.getEntityForEvent(asyncCmd.getEventType()) != null){
ctx.putContextParameter(EventTypes.getEntityForEvent(asyncCmd.getEventType()), uuid);
}
if(params.get(ApiConstants.VIRTUAL_MACHINE_ID) != null){
ctx.putContextParameter(ReflectUtil.getEntityName(VirtualMachine.class), params.get(ApiConstants.VIRTUAL_MACHINE_ID));
}
// Synchronise job on the object if needed
if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) {
Long queueSizeLimit = null;

View File

@ -148,7 +148,6 @@ import com.cloud.user.UserAccount;
import com.cloud.user.UserVO;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.ReflectUtil;
import com.cloud.utils.StringUtils;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ManagerBase;
@ -159,7 +158,6 @@ import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.exception.ExceptionProxyObject;
import com.cloud.vm.VirtualMachine;
@Component
public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiServerService {
@ -511,7 +509,6 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
final CallContext ctx = CallContext.current();
final Long callerUserId = ctx.getCallingUserId();
final Account caller = ctx.getCallingAccount();
String vmUUID = params.get(ApiConstants.VIRTUAL_MACHINE_ID);
// Queue command based on Cmd super class:
// BaseCmd: cmd is dispatched to ApiDispatcher, executed, serialized and returned.
@ -526,6 +523,9 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
objectId = createCmd.getEntityId();
objectUuid = createCmd.getEntityUuid();
params.put("id", objectId.toString());
Class entityClass = EventTypes.getEntityClassForEvent(createCmd.getEventType());
if(entityClass != null)
ctx.putContextParameter(entityClass.getName(), objectId);
} else {
// Extract the uuid before params are processed and id reflects internal db id
objectUuid = params.get(ApiConstants.ID);
@ -552,14 +552,11 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
if(EventTypes.getEntityForEvent(asyncCmd.getEventType()) != null){
ctx.putContextParameter(EventTypes.getEntityForEvent(asyncCmd.getEventType()), objectUuid);
}
if(vmUUID != null){
ctx.putContextParameter(ReflectUtil.getEntityName(VirtualMachine.class), vmUUID);
}
// save the scheduled event
final Long eventId =
ActionEventUtils.onScheduledActionEvent((callerUserId == null) ? User.UID_SYSTEM : callerUserId, asyncCmd.getEntityOwnerId(), asyncCmd.getEventType(),
asyncCmd.getEventDescription(), asyncCmd.isDisplayResourceEnabled(), startEventId);
asyncCmd.getEventDescription(), asyncCmd.isDisplay(), startEventId);
if (startEventId == 0) {
// There was no create event before, set current event id as start eventId
startEventId = eventId;
@ -567,6 +564,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
params.put("ctxStartEventId", String.valueOf(startEventId));
params.put("cmdEventType", asyncCmd.getEventType().toString());
params.put("ctxDetails", ApiGsonHelper.getBuilder().create().toJson(ctx.getContextParameters()));
Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId;
AsyncJobVO job = new AsyncJobVO("", callerUserId, caller.getId(), cmdObj.getClass().getName(),

View File

@ -23,6 +23,7 @@ import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.ServerApiException;
import com.cloud.exception.ResourceAllocationException;
import org.apache.cloudstack.context.CallContext;
/**
@ -42,6 +43,7 @@ public class CommandCreationWorker implements DispatchWorker {
if (cmd instanceof BaseAsyncCreateCmd) {
try {
CallContext.current().setEventDisplayEnabled(cmd.isDisplay());
((BaseAsyncCreateCmd)cmd).create();
} catch (final ResourceAllocationException e) {
throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR,

View File

@ -464,6 +464,11 @@ public class ParamProcessWorker implements DispatchWorker {
// Enforce that it's uuid for newly added apis from version 3.x
if (!isPre3x && !isUuid)
return null;
// There may be multiple entities defined on the @EntityReference of a Response.class
// UUID CommandType would expect only one entityType, so use the first entityType
final Class<?>[] entities = annotation.entityType()[0].getAnnotation(EntityReference.class).value();
// Allow both uuid and internal id for pre3x apis
if (isPre3x && !isUuid) {
try {
@ -471,12 +476,15 @@ public class ParamProcessWorker implements DispatchWorker {
} catch (final NumberFormatException e) {
internalId = null;
}
if (internalId != null)
if (internalId != null){
// Populate CallContext for each of the entity.
for (final Class<?> entity : entities) {
CallContext.current().putContextParameter(entity.getName(), internalId);
}
return internalId;
}
}
// There may be multiple entities defined on the @EntityReference of a Response.class
// UUID CommandType would expect only one entityType, so use the first entityType
final Class<?>[] entities = annotation.entityType()[0].getAnnotation(EntityReference.class).value();
// Go through each entity which is an interface to a VO class and get a VO object
// Try to getId() for the object using reflection, break on first non-null value
for (final Class<?> entity : entities) {
@ -487,15 +495,17 @@ public class ParamProcessWorker implements DispatchWorker {
continue;
}
// Invoke the getId method, get the internal long ID
// If that fails hide exceptions as the uuid may not exist
// If that fails hide exceptions as the uuid may not exist s
try {
internalId = ((InternalIdentity)objVO).getId();
} catch (final IllegalArgumentException e) {
} catch (final NullPointerException e) {
}
// Return on first non-null Id for the uuid entity
if (internalId != null)
if (internalId != null){
CallContext.current().putContextParameter(entity.getName(), internalId);
break;
}
}
if (internalId == null) {
if (s_logger.isDebugEnabled())

View File

@ -26,7 +26,8 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import com.cloud.utils.ReflectUtil;
import com.cloud.vm.VirtualMachine;
import com.cloud.utils.db.EntityManager;
import org.apache.cloudstack.api.Identity;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@ -54,6 +55,7 @@ public class ActionEventUtils {
private static ProjectDao s_projectDao;
protected static UserDao s_userDao;
protected static EventBus s_eventBus = null;
protected static EntityManager s_entityMgr;
public static final String EventDetails = "event_details";
public static final String EventId = "event_id";
@ -69,6 +71,8 @@ public class ActionEventUtils {
UserDao userDao;
@Inject
ProjectDao projectDao;
@Inject
EntityManager entityMgr;
public ActionEventUtils() {
}
@ -79,6 +83,7 @@ public class ActionEventUtils {
s_accountDao = accountDao;
s_userDao = userDao;
s_projectDao = projectDao;
s_entityMgr = entityMgr;
}
public static Long onActionEvent(Long userId, Long accountId, Long domainId, String type, String description) {
@ -188,19 +193,24 @@ public class ActionEventUtils {
String entityType = null;
String entityUuid = null;
CallContext context = CallContext.current();
String vmEntityName = ReflectUtil.getEntityName(VirtualMachine.class);
String vmuuid = (String) context.getContextParameter(vmEntityName);
Class entityKey = getEntityKey(eventType);
if (entityKey != null)
{
if (entityKey != null){
//FIXME - Remove this since it should be covered by the else if condition below.
entityUuid = (String)context.getContextParameter(entityKey);
if (entityUuid != null)
entityType = entityKey.getName();
}else if (EventTypes.getEntityForEvent(eventType) != null){
entityType = EventTypes.getEntityForEvent(eventType);
if (entityType != null){
entityUuid = (String)context.getContextParameter(entityType);
}else if (EventTypes.getEntityClassForEvent(eventType) != null){
//Get entity Class(Example - VirtualMachine.class) from the event Type eg. - VM.CREATE
Class entityClass = EventTypes.getEntityClassForEvent(eventType);
//Get uuid from id
if(context.getContextParameter(entityClass.getName()) != null){
try {
final Object objVO = s_entityMgr.findByIdIncludingRemoved(entityClass, getInternalId(context.getContextParameter(entityClass.getName())));
entityUuid = ((Identity)objVO).getUuid();
} catch (Exception e){
s_logger.debug("Caught exception while finding entityUUID, moving on");
}
}
}
@ -225,7 +235,7 @@ public class ActionEventUtils {
eventDescription.put("entity", entityType);
eventDescription.put("entityuuid", entityUuid);
//Put all the first class entities that are touched during the action. For now atleast put in the vmid.
eventDescription.put(vmEntityName, vmuuid);
populateFirstClassEntities(eventDescription);
eventDescription.put("description", description);
String eventDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(new Date());
@ -240,6 +250,19 @@ public class ActionEventUtils {
}
}
private static Long getInternalId(Object internalIdObj){
Long internalId = null;
// In case its an async job the value would be a string because of json deserialization
if(internalIdObj instanceof String){
internalId = Long.valueOf((String) internalIdObj);
}else if (internalIdObj instanceof Long){
internalId = (Long) internalIdObj;
}
return internalId;
}
private static long getDomainId(long accountId) {
AccountVO account = s_accountDao.findByIdIncludingRemoved(accountId);
if (account == null) {
@ -249,6 +272,27 @@ public class ActionEventUtils {
return account.getDomainId();
}
private static void populateFirstClassEntities(Map<String, String> eventDescription){
CallContext context = CallContext.current();
Map<Object, Object> contextMap = context.getContextParameters();
try{
for(Map.Entry<Object, Object> entry : contextMap.entrySet()){
Object key = entry.getKey();
Class clz = Class.forName((String)key);
if(clz instanceof Class && Identity.class.isAssignableFrom(clz)){
final Object objVO = s_entityMgr.findById(clz, getInternalId(entry.getValue()));
String uuid = ((Identity) objVO).getUuid();
eventDescription.put(ReflectUtil.getEntityName(clz), uuid);
}
}
}catch (Exception e){
s_logger.debug("Caught exception while populating first class entities for event bus, moving on", e);
}
}
private static Class getEntityKey(String eventType)
{
// FIXME - Remove this

View File

@ -1862,15 +1862,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
return updateVirtualMachine(id, displayName, group, ha, isDisplayVm, osTypeId, userData, isDynamicallyScalable, cmd.getHttpMethod(), cmd.getCustomId(), hostName);
}
private void usage(VirtualMachine vm){
List<NicVO> nics = _nicDao.listByVmId(vm.getId());
for (NicVO nic : nics) {
NetworkVO network = _networkDao.findById(nic.getNetworkId());
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
Long.toString(nic.getId()), network.getNetworkOfferingId(), null, 0L, vm.getClass().getName(), vm.getUuid(), vm.isDisplay());
}
}
private void saveUsageEvent(UserVmVO vm) {
// If vm not destroyed

View File

@ -18,7 +18,12 @@ package com.cloud.api.dispatch;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.UserVO;
import org.apache.cloudstack.context.CallContext;
import org.junit.Test;
import static org.mockito.Mockito.mock;
@ -36,6 +41,9 @@ public class CommandCreationWorkerTest {
// Prepare
final BaseAsyncCreateCmd asyncCreateCmd = mock(BaseAsyncCreateCmd.class);
final Map<String, String> params = new HashMap<String, String>();
Account account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid");
UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
CallContext.register(user, account);
// Execute
final CommandCreationWorker creationWorker = new CommandCreationWorker();

View File

@ -32,6 +32,7 @@ import java.util.UUID;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import com.cloud.utils.db.EntityManager;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
@ -282,6 +283,11 @@ public class AffinityApiUnitTest {
return Mockito.mock(AffinityGroupDomainMapDao.class);
}
@Bean
public EntityManager entityManager() {
return Mockito.mock(EntityManager.class);
}
@Bean
public DomainDao domainDao() {
return Mockito.mock(DomainDao.class);