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 47419df CLOUDSTACK-10039: Adding used IOPS to storage pool response (#2294) 47419df is described below commit 47419df368336b089814d66f4a70afeae9e1ba47 Author: Syed Mushtaq Ahmed <syed1.mush...@gmail.com> AuthorDate: Fri Dec 15 07:42:13 2017 -0500 CLOUDSTACK-10039: Adding used IOPS to storage pool response (#2294) This change adds allocatediops to the ListStoragePool API. This applies to managed storage where we have a guaranteed minimum IOPS set. This is useful for monitoring if we have reached the IOPS limit on a storage cluster. --- .../cloudstack/api/response/StoragePoolResponse.java | 8 ++++++++ .../cloud/api/query/dao/StoragePoolJoinDaoImpl.java | 19 +++++++++++++++++++ ui/l10n/en.js | 1 + ui/scripts/system.js | 9 +++++++++ 4 files changed, 37 insertions(+) diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 02d5c44..a03c2d8 100644 --- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -93,6 +93,10 @@ public class StoragePoolResponse extends BaseResponse { @Param(description = "IOPS CloudStack can provision from this storage pool") private Long capacityIops; + @SerializedName("allocatediops") + @Param(description = "total min IOPS currently in use by volumes") + private Long allocatedIops; + @SerializedName("tags") @Param(description = "the tags for the storage pool") private String tags; @@ -288,6 +292,10 @@ public class StoragePoolResponse extends BaseResponse { this.capacityIops = capacityIops; } + public void setAllocatedIops(Long allocatedIops) { + this.allocatedIops = allocatedIops; + } + public String getTags() { return tags; } diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java index 37fdaef..b8b312b 100644 --- a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java @@ -19,6 +19,7 @@ package com.cloud.api.query.dao; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.capacity.CapacityManager; +import com.cloud.storage.DataStoreRole; import com.cloud.storage.StoragePool; import com.cloud.storage.StorageStats; import com.cloud.utils.StringUtils; @@ -26,7 +27,11 @@ import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -41,6 +46,12 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase<StoragePoolJoinVO, Lo @Inject private ConfigurationDao _configDao; + @Inject + private DataStoreManager dataStoreMgr; + + @Inject + protected PrimaryDataStoreDao storagePoolDao; + private final SearchBuilder<StoragePoolJoinVO> spSearch; private final SearchBuilder<StoragePoolJoinVO> spIdSearch; @@ -60,6 +71,7 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase<StoragePoolJoinVO, Lo @Override public StoragePoolResponse newStoragePoolResponse(StoragePoolJoinVO pool) { + StoragePool storagePool = storagePoolDao.findById(pool.getId()); StoragePoolResponse poolResponse = new StoragePoolResponse(); poolResponse.setId(pool.getUuid()); poolResponse.setName(pool.getName()); @@ -87,6 +99,13 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase<StoragePoolJoinVO, Lo poolResponse.setDiskSizeAllocated(allocatedSize); poolResponse.setCapacityIops(pool.getCapacityIops()); + if (storagePool.isManaged()) { + DataStore store = dataStoreMgr.getDataStore(pool.getId(), DataStoreRole.Primary); + PrimaryDataStoreDriver driver = (PrimaryDataStoreDriver) store.getDriver(); + long usedIops = driver.getUsedIops(storagePool); + poolResponse.setAllocatedIops(usedIops); + } + // TODO: StatsCollector does not persist data StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId()); if (stats != null) { diff --git a/ui/l10n/en.js b/ui/l10n/en.js index 3d0c421..19b5cd4 100644 --- a/ui/l10n/en.js +++ b/ui/l10n/en.js @@ -664,6 +664,7 @@ var dictionary = {"ICMP.code":"ICMP Code", "label.disk.iops.min":"Min IOPS", "label.disk.iops.read.rate":"Disk Read Rate (IOPS)", "label.disk.iops.total":"IOPS Total", +"label.disk.iops.allocated":"IOPS Allocated", "label.disk.iops.write.rate":"Disk Write Rate (IOPS)", "label.disk.offering":"Disk Offering", "label.disk.offering.details":"Disk offering details", diff --git a/ui/scripts/system.js b/ui/scripts/system.js index fc9b4b8..fbcfb72 100755 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -18778,6 +18778,15 @@ return ""; else return args; } + }, + allocatediops: { + label: 'label.disk.iops.allocated', + isEditable: false, + converter: function (args) { + if (args == null || args == 0) + return ""; else + return args; + } } }], -- To stop receiving notification emails like this one, please contact ['"commits@cloudstack.apache.org" <commits@cloudstack.apache.org>'].