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>'].

Reply via email to