You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sa...@apache.org on 2014/05/14 11:32:21 UTC
git commit: updated refs/heads/master to 35cd61c
Repository: cloudstack
Updated Branches:
refs/heads/master a605ca09c -> 35cd61c46
CLOUDSTACK-6649: CS is not giving the system-wide capacity for GPU reosurce.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/35cd61c4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/35cd61c4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/35cd61c4
Branch: refs/heads/master
Commit: 35cd61c46314290904189d1b1515413337011f43
Parents: a605ca0
Author: Sanjay Tripathi <sa...@citrix.com>
Authored: Tue May 13 15:00:11 2014 +0530
Committer: Sanjay Tripathi <sa...@citrix.com>
Committed: Wed May 14 15:05:28 2014 +0530
----------------------------------------------------------------------
api/src/com/cloud/agent/api/VgpuTypesInfo.java | 8 ++-
api/src/com/cloud/capacity/Capacity.java | 1 +
.../cloudstack/api/response/HostResponse.java | 1 +
.../src/com/cloud/gpu/dao/HostGpuGroupsDao.java | 2 +-
.../src/com/cloud/gpu/dao/VGPUTypesDao.java | 47 ++++++++++-------
.../src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java | 54 +++++++++++++++++++-
.../src/com/cloud/vm/dao/VMInstanceDao.java | 3 ++
.../src/com/cloud/vm/dao/VMInstanceDaoImpl.java | 46 +++++++++++++++++
.../xen/resource/XenServer620SP1Resource.java | 2 +-
server/src/com/cloud/api/ApiDBUtils.java | 10 ++++
server/src/com/cloud/api/ApiResponseHelper.java | 40 +++++++++++++++
ui/scripts/sharedFunctions.js | 2 +
ui/scripts/ui-custom/zoneChart.js | 3 ++
13 files changed, 195 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/api/src/com/cloud/agent/api/VgpuTypesInfo.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/VgpuTypesInfo.java b/api/src/com/cloud/agent/api/VgpuTypesInfo.java
index ed54c5a..85ffc18 100644
--- a/api/src/com/cloud/agent/api/VgpuTypesInfo.java
+++ b/api/src/com/cloud/agent/api/VgpuTypesInfo.java
@@ -18,6 +18,7 @@ package com.cloud.agent.api;
public class VgpuTypesInfo {
private String modelName;
+ private String groupName;
private Long maxHeads;
private Long videoRam;
private Long maxResolutionX;
@@ -30,6 +31,10 @@ public class VgpuTypesInfo {
return modelName;
}
+ public String getGroupName() {
+ return groupName;
+ }
+
public Long getVideoRam() {
return videoRam;
}
@@ -66,8 +71,9 @@ public class VgpuTypesInfo {
this.maxCapacity = maxCapacity;
}
- public VgpuTypesInfo(String modelName, Long videoRam, Long maxHeads, Long maxResolutionX, Long maxResolutionY, Long maxVgpuPerGpu,
+ public VgpuTypesInfo(String groupName, String modelName, Long videoRam, Long maxHeads, Long maxResolutionX, Long maxResolutionY, Long maxVgpuPerGpu,
Long remainingCapacity, Long maxCapacity) {
+ this.groupName = groupName;
this.modelName = modelName;
this.videoRam = videoRam;
this.maxHeads = maxHeads;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/api/src/com/cloud/capacity/Capacity.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/capacity/Capacity.java b/api/src/com/cloud/capacity/Capacity.java
index c1c5d8f..2fbc1d6 100755
--- a/api/src/com/cloud/capacity/Capacity.java
+++ b/api/src/com/cloud/capacity/Capacity.java
@@ -30,6 +30,7 @@ public interface Capacity extends InternalIdentity, Identity {
public static final short CAPACITY_TYPE_VLAN = 7;
public static final short CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP = 8;
public static final short CAPACITY_TYPE_LOCAL_STORAGE = 9;
+ public static final short CAPACITY_TYPE_GPU = 19;
public Long getHostOrPoolId();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/api/src/org/apache/cloudstack/api/response/HostResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java
index 008631f..d7638de 100644
--- a/api/src/org/apache/cloudstack/api/response/HostResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java
@@ -328,6 +328,7 @@ public class HostResponse extends BaseResponse {
public void setGpuGroups(List<GpuResponse> gpuGroup) {
this.gpuGroup = gpuGroup;
}
+
public void setDiskSizeTotal(Long diskSizeTotal) {
this.diskSizeTotal = diskSizeTotal;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java b/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java
index 5864144..8e4f2f7 100644
--- a/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java
+++ b/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java
@@ -24,7 +24,7 @@ import com.cloud.utils.db.GenericDao;
public interface HostGpuGroupsDao extends GenericDao<HostGpuGroupsVO, Long> {
/**
- * Find host device by hostId and PCI ID
+ * Find host device by hostId and groupName
* @param hostId the host
* @param groupName GPU group
* @return HostGpuGroupsVO
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java b/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java
index 25f3085..94d97c0 100644
--- a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java
+++ b/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java
@@ -25,25 +25,34 @@ import com.cloud.utils.db.GenericDao;
public interface VGPUTypesDao extends GenericDao<VGPUTypesVO, Long> {
- /**
- * Find VGPU types by group Id
- * @param groupId of the GPU group
- * @return list of VGPUTypesVO
- */
- List<VGPUTypesVO> listByGroupId(long groupId);
+ /**
+ * List zonewide/podwide/clusterwide GPU card capacities.
+ * @param zoneId
+ * @param podId
+ * @param clusterId
+ * @return Custom Query result
+ */
+ List<VgpuTypesInfo> listGPUCapacities(Long zoneId, Long podId, Long clusterId);
- /**
- * Find VGPU type by group Id and VGPU type
- * @param groupId of the GPU group
- * @param vgpuType name of VGPU type
- * @return VGPUTypesVO
- */
- VGPUTypesVO findByGroupIdVGPUType(long groupId, String vgpuType);
+ /**
+ * Find VGPU types by group Id
+ * @param groupId of the GPU group
+ * @return list of VGPUTypesVO
+ */
+ List<VGPUTypesVO> listByGroupId(long groupId);
- /**
- * Save the list of enabled VGPU types
- * @param hostId the host
- * @param groupDetails with enabled VGPU types
- */
- void persist(long hostId, HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails);
+ /**
+ * Find VGPU type by group Id and VGPU type
+ * @param groupId of the GPU group
+ * @param vgpuType name of VGPU type
+ * @return VGPUTypesVO
+ */
+ VGPUTypesVO findByGroupIdVGPUType(long groupId, String vgpuType);
+
+ /**
+ * Save the list of enabled VGPU types
+ * @param hostId the host
+ * @param groupDetails with enabled VGPU types
+ */
+ void persist(long hostId, HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java b/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
index 81a1945..96e3a62 100644
--- a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
+++ b/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
@@ -16,6 +16,10 @@
//under the License.
package com.cloud.gpu.dao;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -33,6 +37,8 @@ import com.cloud.gpu.VGPUTypesVO;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.utils.exception.CloudRuntimeException;
@Component
@Local(value = VGPUTypesDao.class)
@@ -41,11 +47,14 @@ public class VGPUTypesDaoImpl extends GenericDaoBase<VGPUTypesVO, Long> implemen
private final SearchBuilder<VGPUTypesVO> _searchByGroupId;
private final SearchBuilder<VGPUTypesVO> _searchByGroupIdVGPUType;
- // private final SearchBuilder<VGPUTypesVO> _searchByHostId;
- // private final SearchBuilder<VGPUTypesVO> _searchForStaleEntries;
@Inject protected HostGpuGroupsDao _hostGpuGroupsDao;
+ private static final String LIST_ZONE_POD_CLUSTER_WIDE_GPU_CAPACITIES =
+ "SELECT host_gpu_groups.group_name, vgpu_type, max_vgpu_per_pgpu, SUM(remaining_capacity) AS remaining_capacity, SUM(max_capacity) AS total_capacity FROM" +
+ " `cloud`.`vgpu_types` INNER JOIN `cloud`.`host_gpu_groups` ON vgpu_types.gpu_group_id = host_gpu_groups.id INNER JOIN `cloud`.`host`" +
+ " ON host_gpu_groups.host_id = host.id WHERE host.type = 'Routing' AND host.data_center_id = ?";
+
public VGPUTypesDaoImpl() {
_searchByGroupId = createSearchBuilder();
@@ -59,6 +68,47 @@ public class VGPUTypesDaoImpl extends GenericDaoBase<VGPUTypesVO, Long> implemen
}
@Override
+ public List<VgpuTypesInfo> listGPUCapacities(Long dcId, Long podId, Long clusterId) {
+ StringBuilder finalQuery = new StringBuilder();
+ TransactionLegacy txn = TransactionLegacy.currentTxn();
+ PreparedStatement pstmt = null;
+ List<Long> resourceIdList = new ArrayList<Long>();
+ ArrayList<VgpuTypesInfo> result = new ArrayList<VgpuTypesInfo>();
+
+ resourceIdList.add(dcId);
+ finalQuery.append(LIST_ZONE_POD_CLUSTER_WIDE_GPU_CAPACITIES);
+
+ if (podId != null) {
+ finalQuery.append(" AND host.pod_id = ?");
+ resourceIdList.add(podId);
+ }
+
+ if (clusterId != null) {
+ finalQuery.append(" AND host.cluster_id = ?");
+ resourceIdList.add(clusterId);
+ }
+ finalQuery.append(" GROUP BY host_gpu_groups.group_name, vgpu_type");
+
+ try {
+ pstmt = txn.prepareAutoCloseStatement(finalQuery.toString());
+ for (int i = 0; i < resourceIdList.size(); i++) {
+ pstmt.setLong(1 + i, resourceIdList.get(i));
+ }
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+
+ VgpuTypesInfo gpuCapacity = new VgpuTypesInfo(rs.getString(1), rs.getString(2), null, null, null, null, rs.getLong(3), rs.getLong(4), rs.getLong(5));
+ result.add(gpuCapacity);
+ }
+ return result;
+ } catch (SQLException e) {
+ throw new CloudRuntimeException("DB Exception on: " + finalQuery, e);
+ } catch (Throwable e) {
+ throw new CloudRuntimeException("Caught: " + finalQuery, e);
+ }
+ }
+
+ @Override
public List<VGPUTypesVO> listByGroupId(long groupId) {
SearchCriteria<VGPUTypesVO> sc = _searchByGroupId.create();
sc.setParameters("groupId", groupId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java b/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java
index 453d222..6ba7c36 100644
--- a/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java
@@ -17,6 +17,7 @@
package com.cloud.vm.dao;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -133,4 +134,6 @@ public interface VMInstanceDao extends GenericDao<VMInstanceVO, Long>, StateDao<
void resetVmPowerStateTracking(long instanceId);
void resetHostPowerStateTracking(long hostId);
+
+ HashMap<String, Long> countVgpuVMs(Long dcId, Long podId, Long clusterId);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
index cc05f53..bcd6fa7 100644
--- a/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
@@ -115,6 +115,13 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
private static final String ORDER_HOSTS_NUMBER_OF_VMS_FOR_ACCOUNT_PART2 = " GROUP BY host.id ORDER BY 2 ASC ";
+ private static final String COUNT_VMS_BASED_ON_VGPU_TYPES1 =
+ "SELECT pci, type, SUM(vmcount) FROM (SELECT MAX(IF(offering.name = 'pciDevice',value,'')) AS pci, MAX(IF(offering.name = 'vgpuType', value,'')) " +
+ "AS type, COUNT(DISTINCT vm.id) AS vmcount FROM service_offering_details offering INNER JOIN vm_instance vm ON offering.service_offering_id = vm.service_offering_id " +
+ "INNER JOIN `cloud`.`host` ON vm.host_id = host.id WHERE vm.state = 'Running' AND host.data_center_id = ? ";
+ private static final String COUNT_VMS_BASED_ON_VGPU_TYPES2 =
+ "GROUP BY offering.service_offering_id) results GROUP BY pci, type";
+
@Inject
protected HostDao _hostDao;
@@ -641,6 +648,45 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
}
@Override
+ public HashMap<String, Long> countVgpuVMs(Long dcId, Long podId, Long clusterId) {
+ StringBuilder finalQuery = new StringBuilder();
+ TransactionLegacy txn = TransactionLegacy.currentTxn();
+ PreparedStatement pstmt = null;
+ List<Long> resourceIdList = new ArrayList<Long>();
+ HashMap<String, Long> result = new HashMap<String, Long>();
+
+ resourceIdList.add(dcId);
+ finalQuery.append(COUNT_VMS_BASED_ON_VGPU_TYPES1);
+
+ if (podId != null) {
+ finalQuery.append(" AND host.pod_id = ?");
+ resourceIdList.add(podId);
+ }
+
+ if (clusterId != null) {
+ finalQuery.append(" AND host.cluster_id = ?");
+ resourceIdList.add(clusterId);
+ }
+ finalQuery.append(COUNT_VMS_BASED_ON_VGPU_TYPES2);
+
+ try {
+ pstmt = txn.prepareAutoCloseStatement(finalQuery.toString());
+ for (int i = 0; i < resourceIdList.size(); i++) {
+ pstmt.setLong(1 + i, resourceIdList.get(i));
+ }
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ result.put(rs.getString(1).concat(rs.getString(2)), rs.getLong(3));
+ }
+ return result;
+ } catch (SQLException e) {
+ throw new CloudRuntimeException("DB Exception on: " + finalQuery, e);
+ } catch (Throwable e) {
+ throw new CloudRuntimeException("Caught: " + finalQuery, e);
+ }
+ }
+
+ @Override
public Long countRunningByAccount(long accountId) {
SearchCriteria<Long> sc = CountRunningByAccount.create();
sc.setParameters("account", accountId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
index de9225f..567d6df 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
@@ -121,7 +121,7 @@ public class XenServer620SP1Resource extends XenServer620Resource {
entry.setMaxVmCapacity(maxCapacity);
gpuCapacity.put(record.modelName, entry);
} else {
- VgpuTypesInfo vgpuTypeRecord = new VgpuTypesInfo(record.modelName, record.framebufferSize, record.maxHeads,
+ VgpuTypesInfo vgpuTypeRecord = new VgpuTypesInfo(null, record.modelName, record.framebufferSize, record.maxHeads,
record.maxResolutionX, record.maxResolutionY, maxCapacity, remainingCapacity, maxCapacity);
gpuCapacity.put(record.modelName, vgpuTypeRecord);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 296a1f4..a953cd6 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -18,6 +18,7 @@ package com.cloud.api;
import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
@@ -64,6 +65,7 @@ import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.api.query.dao.AccountJoinDao;
import com.cloud.api.query.dao.AffinityGroupJoinDao;
import com.cloud.api.query.dao.AsyncJobJoinDao;
@@ -1101,6 +1103,14 @@ public class ApiDBUtils {
return s_hostGpuGroupsDao.listByHostId(hostId);
}
+ public static List<VgpuTypesInfo> getGpuCapacites(Long zoneId, Long podId, Long clusterId) {
+ return s_vgpuTypesDao.listGPUCapacities(zoneId, podId, clusterId);
+ }
+
+ public static HashMap<String, Long> getVgpuVmsCount(Long zoneId, Long podId, Long clusterId) {
+ return s_vmDao.countVgpuVMs(zoneId, podId, clusterId);
+ }
+
public static List<VGPUTypesVO> getVgpus(long groupId) {
return s_vgpuTypesDao.listByGroupId(groupId);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 138a0aa..1965a95 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -150,6 +150,7 @@ import org.apache.cloudstack.usage.Usage;
import org.apache.cloudstack.usage.UsageService;
import org.apache.cloudstack.usage.UsageTypes;
+import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.api.query.ViewResponseHelper;
import com.cloud.api.query.vo.AccountJoinVO;
import com.cloud.api.query.vo.AsyncJobJoinVO;
@@ -193,6 +194,7 @@ import com.cloud.domain.Domain;
import com.cloud.event.Event;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
+import com.cloud.gpu.GPU;
import com.cloud.host.Host;
import com.cloud.host.HostVO;
import com.cloud.hypervisor.HypervisorCapabilities;
@@ -1467,6 +1469,44 @@ public class ApiResponseHelper implements ResponseGenerator {
capacityResponses.add(capacityResponse);
}
+ List<VgpuTypesInfo> gpuCapacities;
+ if ((gpuCapacities = ApiDBUtils.getGpuCapacites(result.get(0).getDataCenterId(), result.get(0).getPodId(), result.get(0).getClusterId())) != null) {
+ HashMap<String, Long> vgpuVMs = ApiDBUtils.getVgpuVmsCount(result.get(0).getDataCenterId(), result.get(0).getPodId(), result.get(0).getClusterId());
+
+ float capacityUsed = 0;
+ long capacityMax = 0;
+ for (VgpuTypesInfo capacity : gpuCapacities) {
+ if (vgpuVMs.containsKey(capacity.getGroupName().concat(capacity.getModelName()))) {
+ capacityUsed += (float)vgpuVMs.get(capacity.getGroupName().concat(capacity.getModelName())) / capacity.getMaxVpuPerGpu();
+ }
+ if (capacity.getModelName().equals(GPU.vGPUType.passthrough.toString())) {
+ capacityMax += capacity.getMaxCapacity();
+ }
+ }
+
+ DataCenter zone = ApiDBUtils.findZoneById(result.get(0).getDataCenterId());
+ CapacityResponse capacityResponse = new CapacityResponse();
+ if (zone != null) {
+ capacityResponse.setZoneId(zone.getUuid());
+ capacityResponse.setZoneName(zone.getName());
+ }
+ if (result.get(0).getPodId() != null) {
+ HostPodVO pod = ApiDBUtils.findPodById(result.get(0).getPodId());
+ capacityResponse.setPodId(pod.getUuid());
+ capacityResponse.setPodName(pod.getName());
+ }
+ if (result.get(0).getClusterId() != null) {
+ ClusterVO cluster = ApiDBUtils.findClusterById(result.get(0).getClusterId());
+ capacityResponse.setClusterId(cluster.getUuid());
+ capacityResponse.setClusterName(cluster.getName());
+ }
+ capacityResponse.setCapacityType(Capacity.CAPACITY_TYPE_GPU);
+ capacityResponse.setCapacityUsed((long)Math.ceil(capacityUsed));
+ capacityResponse.setCapacityTotal(capacityMax);
+ capacityResponse.setPercentUsed(format.format(capacityUsed / capacityMax * 100f));
+ capacityResponse.setObjectName("capacity");
+ capacityResponses.add(capacityResponse);
+ }
return capacityResponses;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 2f7ef0a..9cb48a2 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -1104,6 +1104,8 @@ cloudStack.converters = {
return "VLAN";
case 18:
return "Secondary Storage VM";
+ case 19:
+ return "GPU";
}
},
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35cd61c4/ui/scripts/ui-custom/zoneChart.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/zoneChart.js b/ui/scripts/ui-custom/zoneChart.js
index 877567e..ac3c0e4 100644
--- a/ui/scripts/ui-custom/zoneChart.js
+++ b/ui/scripts/ui-custom/zoneChart.js
@@ -383,6 +383,9 @@
},
7: {
name: _l('label.vlan')
+ },
+ 19: {
+ name: _l('GPU')
}
};