Shubhendu Tripathi has uploaded a new change for review.

Change subject: restapi: WIP-Introduced statistics for glustervolumes
......................................................................

restapi: WIP-Introduced statistics for glustervolumes

Introduced statistics under glustervolumes resource. This would be used
for listing the volume capacity details like used, free and total
capacity of the volume.

Change-Id: I6b17170f403c6ac320829b23b8e2d03b537b8ff2
Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/VolumeStatisticalQuery.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java
5 files changed, 140 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/79/22579/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
index 744e0f1..438f9e6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
@@ -39,6 +39,13 @@
         }
 
         getQueryReturnValue().setReturnValue(fetchVolumeCapacityDetails());
+//        List<GlusterVolumeSizeInfo> lst = new ArrayList<>();
+//        GlusterVolumeSizeInfo info = new GlusterVolumeSizeInfo();
+//        info.setFreeSize(1024L);
+//        info.setUsedSize(1024L);
+//        info.setTotalSize(2048L);
+//        lst.add(info);
+//        getQueryReturnValue().setReturnValue(lst);
     }
 
     private List<GlusterVolumeSizeInfo> fetchVolumeCapacityDetails() {
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java
index a340bb2..c538942 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java
@@ -14,12 +14,13 @@
 import org.ovirt.engine.api.model.GlusterVolume;
 import org.ovirt.engine.api.resource.ActionResource;
 import org.ovirt.engine.api.resource.ApiMediaType;
+import org.ovirt.engine.api.resource.MeasurableResource;
 
 /**
  * Resource interface for the 
"clusters/{cluster_id}/glustervolumes/{volume_id}" resource
  */
 @Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
-public interface GlusterVolumeResource {
+public interface GlusterVolumeResource extends MeasurableResource {
     @GET
     @Formatted
     public GlusterVolume get();
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index e261939..09ed41f 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -327,6 +327,7 @@
           <xs:element ref="vm" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="brick" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="step" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="gluster_volume" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -3338,6 +3339,7 @@
           <xs:element ref="bricks" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="options" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="volume_capacity" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -3455,6 +3457,31 @@
     </xs:complexContent>
   </xs:complexType>
 
+  <xs:element name="volume_capacity" type="VolumeCapacity"/>
+  <xs:complexType name="VolumeCapacity">
+    <xs:sequence>
+      <xs:element name="total_size" type="xs:long" minOccurs="0" 
maxOccurs="1"/>
+      <xs:element name="free_size" type="xs:long" minOccurs="0" maxOccurs="1"/>
+      <xs:element name="used_size" type="xs:long" minOccurs="0" maxOccurs="1"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="volume_capacities" type="VolumeCapacities"/>
+  <xs:complexType name="VolumeCapacities">
+    <xs:complexContent>
+      <xs:extension base="BaseResources">
+        <xs:sequence>
+          <xs:annotation>
+            <xs:appinfo>
+              <jaxb:property name="VolumeCapacities"/>
+            </xs:appinfo>
+          </xs:annotation>
+          <xs:element ref="volume_capacity" minOccurs="0" 
maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
   <xs:element name="brick_memoryinfo" type="GlusterBrickMemoryInfo"/>
   <xs:complexType name="GlusterBrickMemoryInfo">
     <xs:sequence>
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/VolumeStatisticalQuery.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/VolumeStatisticalQuery.java
new file mode 100644
index 0000000..579406b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/VolumeStatisticalQuery.java
@@ -0,0 +1,63 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.api.model.GlusterVolume;
+import org.ovirt.engine.api.model.Statistic;
+import org.ovirt.engine.api.model.ValueType;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
+import org.ovirt.engine.core.compat.Guid;
+
+public class VolumeStatisticalQuery extends 
AbstractStatisticalQuery<GlusterVolume, GlusterVolumeEntity> {
+    private final static Statistic MEM_TOTAL_SIZE   = 
create("memory.total.size", "Total size", GAUGE, BYTES, ValueType.INTEGER);
+    private final static Statistic MEM_FREE_SIZE   = 
create("memory.free.size", "Free size", GAUGE, BYTES, ValueType.INTEGER);
+    private final static Statistic MEM_USED_SIZE   = 
create("memory.used.size", "Used size", GAUGE, BYTES, ValueType.INTEGER);
+
+    public VolumeStatisticalQuery(GlusterVolume parent ) {
+        this(null, parent);
+    }
+
+    public VolumeStatisticalQuery(AbstractBackendResource<GlusterVolume, 
GlusterVolumeEntity>.EntityIdResolver<Guid> entityResolver, GlusterVolume 
parent) {
+        super(GlusterVolume.class, parent, entityResolver);
+    }
+
+    @Override
+    public List<Statistic> getStatistics(GlusterVolumeEntity entity) {
+        GlusterVolumeSizeInfo sizeInfo = entity.getCapacityDetails();
+        if (sizeInfo == null) {
+            return new ArrayList<Statistic>();
+        }
+        return asList(setDatum(clone(MEM_TOTAL_SIZE), sizeInfo.getTotalSize() 
* Mb),
+                      setDatum(clone(MEM_FREE_SIZE), sizeInfo.getFreeSize() * 
Mb),
+                      setDatum(clone(MEM_USED_SIZE), sizeInfo.getUsedSize() * 
Mb));
+
+    }
+
+    @Override
+    public Statistic adopt(Statistic statistic) {
+        statistic.setGlusterVolume(clone(parent));
+        return statistic;
+    }
+
+    private GlusterVolume clone(GlusterVolume volume) {
+        GlusterVolume cloned = new GlusterVolume();
+        cloned.setId(volume.getId());
+        cloned.setBricks(volume.getBricks());
+        cloned.setCluster(volume.getCluster());
+        cloned.setComment(volume.getComment());
+        cloned.setCreationStatus(volume.getCreationStatus());
+        cloned.setDescription(volume.getDescription());
+        cloned.setHref(volume.getHref());
+        cloned.setName(volume.getName());
+        cloned.setOptions(volume.getOptions());
+        cloned.setReplicaCount(volume.getReplicaCount());
+        cloned.setStatus(volume.getStatus());
+        cloned.setStripeCount(volume.getStripeCount());
+        cloned.setTransportTypes(volume.getTransportTypes());
+        cloned.setVolumeType(volume.getVolumeType());
+        cloned.setVolumeCapacity(volume.getVolumeCapacity());
+        return cloned;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java
index 0cd2978..6edb263 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/gluster/BackendGlusterVolumeResource.java
@@ -1,13 +1,20 @@
 package org.ovirt.engine.api.restapi.resource.gluster;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.Path;
 import javax.ws.rs.core.Response;
 
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.GlusterVolume;
 import org.ovirt.engine.api.model.Option;
+import org.ovirt.engine.api.resource.StatisticsResource;
 import org.ovirt.engine.api.resource.gluster.GlusterBricksResource;
 import org.ovirt.engine.api.resource.gluster.GlusterVolumeResource;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendActionableResource;
+import org.ovirt.engine.api.restapi.resource.BackendStatisticsResource;
+import org.ovirt.engine.api.restapi.resource.VolumeStatisticalQuery;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeActionParameters;
 import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeOptionParameters;
@@ -15,8 +22,11 @@
 import 
org.ovirt.engine.core.common.action.gluster.ResetGlusterVolumeOptionsParameters;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeCapacityQueryParameters;
+import org.ovirt.engine.core.compat.Guid;
 
 /**
  * Implementation of the "glustervolumes/{id}" resource
@@ -127,4 +137,35 @@
     public String getId() {
         return this.id;
     }
+
+    @Override
+    @Path("statistics")
+    public StatisticsResource getStatisticsResource() {
+        EntityIdResolver<Guid> resolver =
+                new QueryIdResolver<Guid>(VdcQueryType.GetGlusterVolumeById, 
IdQueryParameters.class) {
+
+                    @Override
+                    public GlusterVolumeEntity lookupEntity(Guid id) throws 
BackendFailureException {
+                        GlusterVolumeEntity volumeEntity = 
getEntity(GlusterVolumeEntity.class,
+                                VdcQueryType.GetGlusterVolumeById,
+                                new IdQueryParameters(id),
+                                null,
+                                true);
+                        List<Guid> guids = new ArrayList<>();
+                        guids.add(volumeEntity.getId());
+                        List<GlusterVolumeSizeInfo> sizeInfos =
+                                runQuery(VdcQueryType.GetGlusterVolumeSizeInfo,
+                                        new 
GlusterVolumeCapacityQueryParameters(volumeEntity.getClusterId(), 
guids)).getReturnValue();
+                        if (sizeInfos != null && sizeInfos.size() > 0) {
+                            volumeEntity.setCapacityDetails(sizeInfos.get(0));
+                        }
+                        return volumeEntity;
+                    }
+
+                };
+        VolumeStatisticalQuery query = new VolumeStatisticalQuery(resolver, 
newModel(id));
+        return inject(new BackendStatisticsResource<GlusterVolume, 
GlusterVolumeEntity>(GlusterVolumeEntity.class,
+                guid,
+                query));
+    }
 }


-- 
To view, visit http://gerrit.ovirt.org/22579
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6b17170f403c6ac320829b23b8e2d03b537b8ff2
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to