This is an automated email from the ASF dual-hosted git repository. rohit pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push: new 2c32d60 server: return usage description with resource names and UUIDs (#3344) 2c32d60 is described below commit 2c32d60e444b3c9e0ad0e53d3593220351b4337b Author: Rohit Yadav <rohit.ya...@shapeblue.com> AuthorDate: Fri Jun 21 03:48:33 2019 +0530 server: return usage description with resource names and UUIDs (#3344) The usage record descriptions have CloudStack's internal integer IDs which makes it difficult for users to read their usages. This PRs introduces a new API boolean flag `oldformat` which when set to true would return the older description format, otherwise by default listUsageRecords will process and return description with names and UUIDs of resources. Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> --- .../org/apache/cloudstack/api/ApiConstants.java | 1 + .../apache/cloudstack/api/ResponseGenerator.java | 2 +- .../command/admin/usage/ListUsageRecordsCmd.java | 8 +- .../org/apache/cloudstack/usage/UsageTypes.java | 1 + .../cloudstack/quota/constant/QuotaTypes.java | 1 + .../main/java/com/cloud/api/ApiResponseHelper.java | 233 ++++++++++++++++++--- 6 files changed, 214 insertions(+), 32 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 99efafc..7502b18 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -219,6 +219,7 @@ public class ApiConstants { public static final String OFFER_HA = "offerha"; public static final String IS_SYSTEM_OFFERING = "issystem"; public static final String IS_DEFAULT_USE = "defaultuse"; + public static final String OLD_FORMAT = "oldformat"; public static final String OP = "op"; public static final String OS_CATEGORY_ID = "oscategoryid"; public static final String OS_TYPE_ID = "ostypeid"; diff --git a/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java index 80d6d4b..740ee46 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java @@ -435,7 +435,7 @@ public interface ResponseGenerator { UsageRecordResponse createUsageResponse(Usage usageRecord); - UsageRecordResponse createUsageResponse(Usage usageRecord, Map<String, Set<ResourceTagResponse>> resourceTagResponseMap); + UsageRecordResponse createUsageResponse(Usage usageRecord, Map<String, Set<ResourceTagResponse>> resourceTagResponseMap, boolean oldFormat); public Map<String, Set<ResourceTagResponse>> getUsageResourceTags(); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java index 2698c81..a5199ec 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java @@ -82,6 +82,9 @@ public class ListUsageRecordsCmd extends BaseListCmd { @Parameter(name = ApiConstants.INCLUDE_TAGS, type = CommandType.BOOLEAN, description = "Flag to enable display of Tags for a resource") private Boolean includeTags; + @Parameter(name = ApiConstants.OLD_FORMAT, type = CommandType.BOOLEAN, description = "Flag to enable description rendered in old format which uses internal database IDs instead of UUIDs. False by default.") + private Boolean oldFormat; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -146,6 +149,9 @@ public class ListUsageRecordsCmd extends BaseListCmd { this.usageId = usageId; } + public boolean getOldFormat() { + return oldFormat != null && oldFormat; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -168,7 +174,7 @@ public class ListUsageRecordsCmd extends BaseListCmd { resourceTagResponseMap = _responseGenerator.getUsageResourceTags(); } for (Usage usageRecord : usageRecords.first()) { - UsageRecordResponse usageResponse = _responseGenerator.createUsageResponse(usageRecord, resourceTagResponseMap); + UsageRecordResponse usageResponse = _responseGenerator.createUsageResponse(usageRecord, resourceTagResponseMap, getOldFormat()); if (usageResponse != null) { usageResponse.setObjectName("usagerecord"); usageResponses.add(usageResponse); diff --git a/api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java b/api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java index f03d9a9..d0b7006 100644 --- a/api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java +++ b/api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java @@ -66,6 +66,7 @@ public class UsageTypes { responseList.add(new UsageTypeResponse(VM_DISK_BYTES_READ, "VM Disk usage(Bytes Read)")); responseList.add(new UsageTypeResponse(VM_DISK_BYTES_WRITE, "VM Disk usage(Bytes Write)")); responseList.add(new UsageTypeResponse(VM_SNAPSHOT, "VM Snapshot storage usage")); + responseList.add(new UsageTypeResponse(VOLUME_SECONDARY, "Volume on secondary storage usage")); responseList.add(new UsageTypeResponse(VM_SNAPSHOT_ON_PRIMARY, "VM Snapshot on primary storage usage")); return responseList; } diff --git a/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java index 97e22da..2643ff3 100644 --- a/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java +++ b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java @@ -55,6 +55,7 @@ public class QuotaTypes extends UsageTypes { quotaTypeList.put(VM_DISK_BYTES_READ, new QuotaTypes(VM_DISK_BYTES_READ, "VM_DISK_BYTES_READ", "GB", "VM Disk usage(Bytes Read)")); quotaTypeList.put(VM_DISK_BYTES_WRITE, new QuotaTypes(VM_DISK_BYTES_WRITE, "VPN_USERS", "GB", "VM Disk usage(Bytes Write)")); quotaTypeList.put(VM_SNAPSHOT, new QuotaTypes(VM_SNAPSHOT, "VM_SNAPSHOT", "GB-Month", "VM Snapshot storage usage")); + quotaTypeList.put(VOLUME_SECONDARY, new QuotaTypes(VOLUME_SECONDARY, "VOLUME_SECONDARY", "GB-Month", "Volume secondary storage usage")); quotaTypeList.put(VM_SNAPSHOT_ON_PRIMARY, new QuotaTypes(VM_SNAPSHOT_ON_PRIMARY, "VM_SNAPSHOT_ON_PRIMARY", "GB-Month", "VM Snapshot primary storage usage")); quotaTypeList.put(CPU_CLOCK_RATE, new QuotaTypes(CPU_CLOCK_RATE, "CPU_CLOCK_RATE", "Compute-Month", "Quota tariff for using 1 CPU of clock rate 100MHz")); quotaTypeList.put(CPU_NUMBER, new QuotaTypes(CPU_NUMBER, "CPU_NUMBER", "Compute-Month", "Quota tariff for running VM that has 1vCPU")); diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index bb51215..9bea30a 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -3292,11 +3292,11 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UsageRecordResponse createUsageResponse(Usage usageRecord) { - return createUsageResponse(usageRecord, null); + return createUsageResponse(usageRecord, null, false); } @Override - public UsageRecordResponse createUsageResponse(Usage usageRecord, Map<String, Set<ResourceTagResponse>> resourceTagResponseMap) { + public UsageRecordResponse createUsageResponse(Usage usageRecord, Map<String, Set<ResourceTagResponse>> resourceTagResponseMap, boolean oldFormat) { UsageRecordResponse usageRecResponse = new UsageRecordResponse(); Account account = ApiDBUtils.findAccountById(usageRecord.getAccountId()); if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { @@ -3326,15 +3326,17 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setDescription(usageRecord.getDescription()); usageRecResponse.setUsage(usageRecord.getUsageDisplay()); usageRecResponse.setUsageType(usageRecord.getUsageType()); + VMInstanceVO vmInstance = null; if (usageRecord.getVmInstanceId() != null) { - VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getVmInstanceId()); - if (vm != null) { - usageRecResponse.setVirtualMachineId(vm.getUuid()); + vmInstance = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getVmInstanceId()); + if (vmInstance != null) { + usageRecResponse.setVirtualMachineId(vmInstance.getUuid()); } } usageRecResponse.setResourceName(usageRecord.getVmName()); + VMTemplateVO template = null; if (usageRecord.getTemplateId() != null) { - VMTemplateVO template = ApiDBUtils.findTemplateById(usageRecord.getTemplateId()); + template = ApiDBUtils.findTemplateById(usageRecord.getTemplateId()); if (template != null) { usageRecResponse.setTemplateId(template.getUuid()); } @@ -3349,7 +3351,12 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setOfferingId(svcOffering.getUuid()); } //VM Instance ID - VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString()); + VMInstanceVO vm = null; + if (usageRecord.getUsageId() != null && usageRecord.getUsageId().equals(usageRecord.getVmInstanceId())) { + vm = vmInstance; + } else { + vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString()); + } if (vm != null) { resourceType = ResourceTag.ResourceObjectType.UserVm; usageRecResponse.setUsageId(vm.getUuid()); @@ -3373,7 +3380,24 @@ public class ApiResponseHelper implements ResponseGenerator { } else if(svcOffering.getRamSize() != null) { usageRecResponse.setMemory(svcOffering.getRamSize().longValue()); } - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + if (usageRecord.getUsageType() == UsageTypes.RUNNING_VM) { + builder.append("Running VM usage "); + } else if(usageRecord.getUsageType() == UsageTypes.ALLOCATED_VM) { + builder.append("Allocated VM usage "); + } + if (vm != null) { + builder.append("for ").append(vm.getHostName()).append(" (").append(vm.getInstanceName()).append(", ").append(vm.getUuid()).append(") "); + } + if (svcOffering != null) { + builder.append("using service offering ").append(svcOffering.getName()).append(" (").append(svcOffering.getUuid()).append(") "); + } + if (template != null) { + builder.append("and template ").append(template.getName()).append(" (").append(template.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.IP_ADDRESS) { //IP Address ID IPAddressVO ip = _entityMgr.findByIdIncludingRemoved(IPAddressVO.class, usageRecord.getUsageId().toString()); @@ -3399,23 +3423,26 @@ public class ApiResponseHelper implements ResponseGenerator { //Device Type resourceType = ResourceObjectType.UserVm; usageRecResponse.setType(usageRecord.getType()); + VMInstanceVO vm = null; + HostVO host = null; if (usageRecord.getType().equals("DomainRouter") || usageRecord.getType().equals("UserVm")) { //Domain Router Id - VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString()); + vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString()); if (vm != null) { resourceId = vm.getId(); usageRecResponse.setUsageId(vm.getUuid()); } } else { //External Device Host Id - HostVO host = _entityMgr.findByIdIncludingRemoved(HostVO.class, usageRecord.getUsageId().toString()); + host = _entityMgr.findByIdIncludingRemoved(HostVO.class, usageRecord.getUsageId().toString()); if (host != null) { usageRecResponse.setUsageId(host.getUuid()); } } //Network ID + NetworkVO network = null; if((usageRecord.getNetworkId() != null) && (usageRecord.getNetworkId() != 0)) { - NetworkVO network = _entityMgr.findByIdIncludingRemoved(NetworkVO.class, usageRecord.getNetworkId().toString()); + network = _entityMgr.findByIdIncludingRemoved(NetworkVO.class, usageRecord.getNetworkId().toString()); if (network != null) { resourceType = ResourceObjectType.Network; resourceId = network.getId(); @@ -3423,23 +3450,53 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setResourceName(network.getName()); } } + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + if (usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_SENT) { + builder.append("Bytes sent by network "); + } else if (usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_RECEIVED) { + builder.append("Bytes received by network "); + } + if (network != null) { + builder.append(network.getName()).append(" (").append(network.getUuid()).append(") "); + } + if (vm != null) { + builder.append("using router ").append(vm.getInstanceName()).append(" (").append(vm.getUuid()).append(")"); + } else if (host != null) { + builder.append("using host ").append(host.getName()).append(" (").append(host.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.VM_DISK_IO_READ || usageRecord.getUsageType() == UsageTypes.VM_DISK_IO_WRITE || usageRecord.getUsageType() == UsageTypes.VM_DISK_BYTES_READ || usageRecord.getUsageType() == UsageTypes.VM_DISK_BYTES_WRITE) { //Device Type usageRecResponse.setType(usageRecord.getType()); resourceType = ResourceObjectType.Volume; - //VM Instance Id - VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getVmInstanceId().toString()); - if (vm != null) { - usageRecResponse.setVirtualMachineId(vm.getUuid()); - } //Volume ID VolumeVO volume = _entityMgr.findByIdIncludingRemoved(VolumeVO.class, usageRecord.getUsageId().toString()); if (volume != null) { usageRecResponse.setUsageId(volume.getUuid()); resourceId = volume.getId(); } - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + if (usageRecord.getUsageType() == UsageTypes.VM_DISK_IO_READ) { + builder.append("Disk I/O read requests"); + } else if (usageRecord.getUsageType() == UsageTypes.VM_DISK_IO_WRITE) { + builder.append("Disk I/O write requests"); + } else if (usageRecord.getUsageType() == UsageTypes.VM_DISK_BYTES_READ) { + builder.append("Disk I/O read bytes"); + } else if (usageRecord.getUsageType() == UsageTypes.VM_DISK_BYTES_WRITE) { + builder.append("Disk I/O write bytes"); + } + if (vmInstance != null) { + builder.append(" for VM ").append(vmInstance.getHostName()).append(" (").append(vmInstance.getUuid()).append(")"); + } + if (volume != null) { + builder.append(" and volume ").append(volume.getName()).append(" (").append(volume.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.VOLUME) { //Volume ID VolumeVO volume = _entityMgr.findByIdIncludingRemoved(VolumeVO.class, usageRecord.getUsageId().toString()); @@ -3451,11 +3508,25 @@ public class ApiResponseHelper implements ResponseGenerator { //Volume Size usageRecResponse.setSize(usageRecord.getSize()); //Disk Offering Id + DiskOfferingVO diskOff = null; if (usageRecord.getOfferingId() != null) { - DiskOfferingVO diskOff = _entityMgr.findByIdIncludingRemoved(DiskOfferingVO.class, usageRecord.getOfferingId().toString()); + diskOff = _entityMgr.findByIdIncludingRemoved(DiskOfferingVO.class, usageRecord.getOfferingId().toString()); usageRecResponse.setOfferingId(diskOff.getUuid()); } - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Volume usage "); + if (volume != null) { + builder.append("for ").append(volume.getName()).append(" (").append(volume.getUuid()).append(")"); + } + if (diskOff != null) { + builder.append(" with disk offering ").append(diskOff.getName()).append(" (").append(diskOff.getUuid()).append(")"); + } + if (template != null) { + builder.append(" and template ").append(template.getName()).append(" (").append(template.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.TEMPLATE || usageRecord.getUsageType() == UsageTypes.ISO) { //Template/ISO ID VMTemplateVO tmpl = _entityMgr.findByIdIncludingRemoved(VMTemplateVO.class, usageRecord.getUsageId().toString()); @@ -3472,7 +3543,19 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setVirtualSize(usageRecord.getVirtualSize()); resourceType = ResourceObjectType.Template; } - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + if (usageRecord.getUsageType() == UsageTypes.TEMPLATE) { + builder.append("Template usage"); + } else if (usageRecord.getUsageType() == UsageTypes.ISO) { + builder.append("ISO usage"); + } + if (tmpl != null) { + builder.append(" for ").append(tmpl.getName()).append(" (").append(tmpl.getUuid()).append(") ") + .append("with size ").append(usageRecord.getSize()).append(" and virtual size ").append(usageRecord.getVirtualSize()); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.SNAPSHOT) { //Snapshot ID SnapshotVO snap = _entityMgr.findByIdIncludingRemoved(SnapshotVO.class, usageRecord.getUsageId().toString()); @@ -3483,7 +3566,15 @@ public class ApiResponseHelper implements ResponseGenerator { } //Snapshot Size usageRecResponse.setSize(usageRecord.getSize()); - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Snapshot usage "); + if (snap != null) { + builder.append("for ").append(snap.getName()).append(" (").append(snap.getUuid()).append(") ") + .append("with size ").append(usageRecord.getSize()); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.LOAD_BALANCER_POLICY) { //Load Balancer Policy ID LoadBalancerVO lb = _entityMgr.findByIdIncludingRemoved(LoadBalancerVO.class, usageRecord.getUsageId().toString()); @@ -3492,6 +3583,14 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setUsageId(lb.getUuid()); resourceId = lb.getId(); } + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Loadbalancer policy usage "); + if (lb != null) { + builder.append(lb.getName()).append(" (").append(lb.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.PORT_FORWARDING_RULE) { //Port Forwarding Rule ID PortForwardingRuleVO pf = _entityMgr.findByIdIncludingRemoved(PortForwardingRuleVO.class, usageRecord.getUsageId().toString()); @@ -3500,20 +3599,45 @@ public class ApiResponseHelper implements ResponseGenerator { usageRecResponse.setUsageId(pf.getUuid()); resourceId = pf.getId(); } - + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Port forwarding rule usage"); + if (pf != null) { + builder.append(" (").append(pf.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.NETWORK_OFFERING) { //Network Offering Id NetworkOfferingVO netOff = _entityMgr.findByIdIncludingRemoved(NetworkOfferingVO.class, usageRecord.getOfferingId().toString()); usageRecResponse.setOfferingId(netOff.getUuid()); //is Default - usageRecResponse.setDefault((usageRecord.getUsageId() == 1) ? true : false); - + usageRecResponse.setDefault(usageRecord.getUsageId() == 1); + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Network offering "); + if (netOff != null) { + builder.append(netOff.getName()).append(" (").append(netOff.getUuid()).append(") usage "); + } + if (vmInstance != null) { + builder.append("for VM ").append(vmInstance.getHostName()).append(" (").append(vmInstance.getUuid()).append(") "); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.VPN_USERS) { //VPN User ID VpnUserVO vpnUser = _entityMgr.findByIdIncludingRemoved(VpnUserVO.class, usageRecord.getUsageId().toString()); if (vpnUser != null) { usageRecResponse.setUsageId(vpnUser.getUuid()); } + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("VPN usage "); + if (vpnUser != null) { + builder.append("for user ").append(vpnUser.getUsername()).append(" (").append(vpnUser.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.SECURITY_GROUP) { //Security Group Id SecurityGroupVO sg = _entityMgr.findByIdIncludingRemoved(SecurityGroupVO.class, usageRecord.getUsageId().toString()); @@ -3522,20 +3646,69 @@ public class ApiResponseHelper implements ResponseGenerator { resourceId = sg.getId(); usageRecResponse.setUsageId(sg.getUuid()); } + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Security group"); + if (sg != null) { + builder.append(" ").append(sg.getName()).append(" (").append(sg.getUuid()).append(") usage"); + } + if (vmInstance != null) { + builder.append(" for VM ").append(vmInstance.getHostName()).append(" (").append(vmInstance.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } } else if (usageRecord.getUsageType() == UsageTypes.VM_SNAPSHOT) { - VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getVmInstanceId().toString()); resourceType = ResourceObjectType.UserVm; - if (vm != null) { - resourceId = vm.getId(); - usageRecResponse.setResourceName(vm.getInstanceName()); - usageRecResponse.setUsageId(vm.getUuid()); + if (vmInstance != null) { + resourceId = vmInstance.getId(); + usageRecResponse.setResourceName(vmInstance.getInstanceName()); + usageRecResponse.setUsageId(vmInstance.getUuid()); } usageRecResponse.setSize(usageRecord.getSize()); if (usageRecord.getOfferingId() != null) { usageRecResponse.setOfferingId(usageRecord.getOfferingId().toString()); } + if (!oldFormat) { + VolumeVO volume = _entityMgr.findByIdIncludingRemoved(VolumeVO.class, usageRecord.getUsageId().toString()); + DiskOfferingVO diskOff = null; + if (usageRecord.getOfferingId() != null) { + diskOff = _entityMgr.findByIdIncludingRemoved(DiskOfferingVO.class, usageRecord.getOfferingId()); + } + final StringBuilder builder = new StringBuilder(); + builder.append("VMSnapshot usage"); + if (vmInstance != null) { + builder.append(" for VM ").append(vmInstance.getHostName()).append(" (").append(vmInstance.getUuid()).append(")"); + } + if (volume != null) { + builder.append(" with volume ").append(volume.getName()).append(" (").append(volume.getUuid()).append(")"); + } + if (diskOff != null) { + builder.append(" using disk offering ").append(diskOff.getName()).append(" (").append(diskOff.getUuid()).append(")"); + } + usageRecResponse.setDescription(builder.toString()); + } + } else if (usageRecord.getUsageType() == UsageTypes.VOLUME_SECONDARY) { + VolumeVO volume = _entityMgr.findByIdIncludingRemoved(VolumeVO.class, usageRecord.getUsageId().toString()); + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("Volume on secondary storage usage"); + if (volume != null) { + builder.append(" for ").append(volume.getName()).append(" (").append(volume.getUuid()).append(") ") + .append("with size ").append(usageRecord.getSize()); + } + usageRecResponse.setDescription(builder.toString()); + } + } else if (usageRecord.getUsageType() == UsageTypes.VM_SNAPSHOT_ON_PRIMARY) { + if (!oldFormat) { + final StringBuilder builder = new StringBuilder(); + builder.append("VMSnapshot on primary storage usage"); + if (vmInstance != null) { + builder.append(" for VM ").append(vmInstance.getHostName()).append(" (").append(vmInstance.getUuid()).append(") ") + .append("with size ").append(usageRecord.getVirtualSize()); + } + usageRecResponse.setDescription(builder.toString()); + } } - if(resourceTagResponseMap != null && resourceTagResponseMap.get(resourceId + ":" + resourceType) != null) { usageRecResponse.setTags(resourceTagResponseMap.get(resourceId + ":" + resourceType)); }