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.

(cherry picked from commit 3e7ea4e8d9)
This commit is contained in:
Nitin Mehta 2014-04-28 18:16:13 -07:00
parent fc68922286
commit dd55095fd5
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);