ofri masad has uploaded a new change for review.

Change subject: webadmin: Quota Monitors - webadmin
......................................................................

webadmin: Quota Monitors - webadmin

This patch is the 2nd out of 3.

Quota monitoring is added to the webadmin as columns in the
MainTabQuotaView.

Change-Id: I39aaf87f084a31b6ff31412030517a2f19bbe1af
Bug-Url: https://bugzilla.redhat.com/876903
Signed-off-by: Ofri Masad <oma...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabQuotaView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/QuotaPercentColumn.java
5 files changed, 223 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/10121/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 919a13a..b6ebaf0 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -165,7 +165,8 @@
                <include 
name="common/businessentities/QuotaStorageProperties.java"/>
                <include name="common/businessentities/QuotaVdsGroup.java"/>
                <include 
name="common/businessentities/QuotaVdsGroupProperties.java"/>
-               <include name="common/action/QuotaCRUDParameters.java"/>
+        <include name="common/businessentities/QuotaPerUserUsageEntity.java"/>
+        <include name="common/action/QuotaCRUDParameters.java"/>
                <include 
name="common/queries/GetQuotaByStoragePoolIdQueryParameters.java"/>
                <include 
name="common/queries/GetQuotaByQuotaIdQueryParameters.java"/>
                <include 
name="common/queries/GetQuotaVdsGroupByQuotaIdQueryParameters.java"/>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index b29f281..6f6bc73 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -1448,13 +1448,22 @@
     @DefaultStringValue("Data Center")
     String dcQuota();
 
-    @DefaultStringValue("Used Memory/Total")
+    @DefaultStringValue("Free Memory")
+    String freeMemory();
+
+    @DefaultStringValue("Free vCPU")
+    String freeVcpu();
+
+    @DefaultStringValue("Free Storage")
+    String freeStorage();
+
+    @DefaultStringValue("Memory Consumption")
     String usedMemoryQuota();
 
-    @DefaultStringValue("Running CPU/Total")
+    @DefaultStringValue("VCPU Consumption")
     String runningCpuQuota();
 
-    @DefaultStringValue("Used Storage/Total")
+    @DefaultStringValue("Storage Consumption")
     String usedStorageQuota();
 
     @DefaultStringValue("Add")
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
index f2f3daf..9f523db 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
@@ -20,6 +20,26 @@
     SafeHtml progressBar(int progress, String text, String color);
 
     /**
+     * Creates a progress bar template.
+     *
+     * @param progressA
+     *            Progress value A in percent.
+     * @param progressB
+     *            Progress value B in percent.
+     * @param textA
+     *            Text to show within the progress bar A.
+     * @param textB
+     *            Text to show within the progress bar B.
+     */
+    @Template("<div class='engine-progress-box'>" +
+            "<div style='background: {4}; width: {0}%; height: 100%; float: 
left'>" +
+            "<div class='engine-progress-text' style='position: 
inherit'>{2}</div></div>" +
+            "<div style='background: {5}; float: left; width: {1}%; height: 
100%'>" +
+            "<div class='engine-progress-text' style='position: 
inherit'>{3}</div></div>" +
+            "</div>")
+    SafeHtml doubleProgressBar(int progressA, int progressB, String textA, 
String textB, String colorA, String ColorB);
+
+    /**
      * Creates a tree-item HTML
      *
      * @param imageHtml
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabQuotaView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabQuotaView.java
index 7097d23..3805606 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabQuotaView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabQuotaView.java
@@ -1,8 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.tab;
 
+import com.google.gwt.i18n.client.NumberFormat;
 import org.ovirt.engine.core.common.businessentities.Quota;
+import org.ovirt.engine.core.common.businessentities.QuotaStorage;
+import org.ovirt.engine.core.common.businessentities.QuotaVdsGroup;
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
+import org.ovirt.engine.ui.common.widget.renderer.DiskSizeRenderer;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel;
@@ -14,8 +18,14 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.inject.Inject;
+import org.ovirt.engine.ui.webadmin.widget.table.column.QuotaPercentColumn;
+
 
 public class MainTabQuotaView extends 
AbstractMainTabWithDetailsTableView<Quota, QuotaListModel> implements 
MainTabQuotaPresenter.ViewDef {
+
+    private static final NumberFormat decimalFormat = 
NumberFormat.getDecimalFormat();
+    private static final DiskSizeRenderer<Number> diskSizeRenderer =
+            new 
DiskSizeRenderer<Number>(DiskSizeRenderer.DiskSizeUnit.GIGABYTE);
 
     interface ViewIdHandler extends ElementIdHandler<MainTabQuotaView> {
         ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
@@ -39,46 +49,172 @@
             public String getValue(Quota object) {
                 return object.getQuotaName() == null ? "" : 
object.getQuotaName(); //$NON-NLS-1$
             }
-        }, constants.nameQuota(), "150px"); //$NON-NLS-1$
+        }, constants.nameQuota(), "120px"); //$NON-NLS-1$
 
         getTable().addColumn(new TextColumnWithTooltip<Quota>() {
             @Override
             public String getValue(Quota object) {
                 return object.getDescription() == null ? "" : 
object.getDescription(); //$NON-NLS-1$
             }
-        }, constants.descriptionQuota(), "300px"); //$NON-NLS-1$
+        }, constants.descriptionQuota(), "120px"); //$NON-NLS-1$
+
+//        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
+//            @Override
+//            public String getValue(Quota object) {
+//                return object.getStoragePoolName() == null ? "" : 
object.getStoragePoolName(); //$NON-NLS-1$
+//            }
+//        }, constants.dcQuota(), "150px"); //$NON-NLS-1$
+
+        getTable().addColumn(new QuotaPercentColumn<Quota>() {
+            @Override
+            protected Integer getProgressValue(Quota object) {
+                int value;
+                long allocated = 0;
+                long used = 0;
+                if (object.getGlobalQuotaVdsGroup() != null) {
+                    allocated = object.getGlobalQuotaVdsGroup().getMemSizeMB();
+                    used = object.getGlobalQuotaVdsGroup().getMemSizeMBUsage();
+                } else {
+                    for (QuotaVdsGroup quotaVdsGroup : 
object.getQuotaVdsGroups()) {
+                        allocated += quotaVdsGroup.getMemSizeMB();
+                        used += quotaVdsGroup.getMemSizeMBUsage();
+                    }
+                }
+                value = (int)(((double)used/allocated) * 100);
+                return allocated < 0 ? -1 : value > 100 ? 100 : value;
+            }
+        },
+        constants.usedMemoryQuota(), "100px"); //$NON-NLS-1$
 
         getTable().addColumn(new TextColumnWithTooltip<Quota>() {
             @Override
             public String getValue(Quota object) {
-                return object.getStoragePoolName() == null ? "" : 
object.getStoragePoolName(); //$NON-NLS-1$
+                int value;
+                long allocated = 0;
+                long used = 0;
+                if (object.getGlobalQuotaVdsGroup() != null) {
+                    allocated = object.getGlobalQuotaVdsGroup().getMemSizeMB();
+                    used = object.getGlobalQuotaVdsGroup().getMemSizeMBUsage();
+                } else {
+                    for (QuotaVdsGroup quotaVdsGroup : 
object.getQuotaVdsGroups()) {
+                        allocated += quotaVdsGroup.getMemSizeMB();
+                        used += quotaVdsGroup.getMemSizeMBUsage();
+                    }
+                }
+                value = (int)(allocated-used);
+                String returnVal;
+                if (allocated < 0) {
+                    returnVal = "Unlimited"; //$NON-NLS-1$
+                } else if (value <= 0){
+                    returnVal = "0 MB"; //$NON-NLS-1$
+                } else if (value <= 5120) {
+                    returnVal = value + "MB"; //$NON-NLS-1$
+                } else {
+                    returnVal = decimalFormat.format((double)value/1025) + 
"GB"; //$NON-NLS-1$
+                }
+                return returnVal;
             }
-        }, constants.dcQuota(), "150px"); //$NON-NLS-1$
+        },constants.freeMemory(), "80px"); //$NON-NLS-1$
 
-        //        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-        //            @Override
-        //            public String getValue(Quota object) {
-        //                return (object.getMemSizeMBUsage() == null ? "0" : 
object.getMemSizeMBUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-        //                        + (object.getMemSizeMB() == null ? "*" : 
object.getMemSizeMB().toString()) + " GB"; //$NON-NLS-1$ //$NON-NLS-2$
-        //            }
-        //        },
-        //        constants.usedMemoryQuota());
-        //        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-        //            @Override
-        //            public String getValue(Quota object) {
-        //                return (object.getVirtualCpuUsage() == null ? "0" : 
object.getVirtualCpuUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-        //                        + (object.getVirtualCpu() == null ? "*" : 
object.getVirtualCpu().toString()); //$NON-NLS-1$
-        //            }
-        //        },
-        //        constants.runningCpuQuota());
-        //        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-        //            @Override
-        //            public String getValue(Quota object) {
-        //                return (object.getStorageSizeGBUsage() == null ? "0" 
: object.getStorageSizeGBUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-        //                        + (object.getStorageSizeGB() == null ? "*" : 
object.getStorageSizeGB().toString()) + " GB"; //$NON-NLS-1$ //$NON-NLS-2$
-        //            }
-        //        },
-        //        constants.usedStorageQuota());
+        getTable().addColumn(new QuotaPercentColumn<Quota>() {
+            @Override
+            protected Integer getProgressValue(Quota object) {
+                int value;
+                int allocated = 0;
+                int used = 0;
+                if (object.getGlobalQuotaVdsGroup() != null) {
+                    allocated = 
object.getGlobalQuotaVdsGroup().getVirtualCpu();
+                    used = 
object.getGlobalQuotaVdsGroup().getVirtualCpuUsage();
+                } else {
+                    for (QuotaVdsGroup quotaVdsGroup : 
object.getQuotaVdsGroups()) {
+                        allocated += quotaVdsGroup.getVirtualCpu();
+                        used += quotaVdsGroup.getVirtualCpuUsage();
+                    }
+                }
+                value = (int)(((double)used/allocated) * 100);
+                return allocated < 0 ? -1 : value > 100 ? 100 : value;
+            }
+        },
+        constants.runningCpuQuota(), "100px"); //$NON-NLS-1$
+
+        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
+            @Override
+            public String getValue(Quota object) {
+                int value;
+                int allocated = 0;
+                int used = 0;
+                if (object.getGlobalQuotaVdsGroup() != null) {
+                    allocated = 
object.getGlobalQuotaVdsGroup().getVirtualCpu();
+                    used = 
object.getGlobalQuotaVdsGroup().getVirtualCpuUsage();
+                } else {
+                    for (QuotaVdsGroup quotaVdsGroup : 
object.getQuotaVdsGroups()) {
+                        allocated += quotaVdsGroup.getVirtualCpu();
+                        used += quotaVdsGroup.getVirtualCpuUsage();
+                    }
+                }
+                value = allocated - used;
+
+                String returnVal;
+                if (allocated < 0) {
+                    returnVal = "Unlimited"; //$NON-NLS-1$
+                } else if (value <= 0) {
+                    returnVal = "0"; //$NON-NLS-1$
+                } else {
+                    returnVal = value + ""; //$NON-NLS-1$
+                }
+                return returnVal;
+            }
+        },constants.freeVcpu(), "80px"); //$NON-NLS-1$
+
+        getTable().addColumn(new QuotaPercentColumn<Quota>() {
+            @Override
+            protected Integer getProgressValue(Quota object) {
+                int value;
+                double allocated = 0;
+                double used = 0;
+                if (object.getGlobalQuotaStorage() != null) {
+                    allocated = 
object.getGlobalQuotaStorage().getStorageSizeGB();
+                    used = 
object.getGlobalQuotaStorage().getStorageSizeGBUsage();
+                } else {
+                    for (QuotaStorage quotaStorage : 
object.getQuotaStorages()) {
+                        allocated += quotaStorage.getStorageSizeGB();
+                        used += quotaStorage.getStorageSizeGBUsage();
+                    }
+                }
+                value = (int)((used/allocated) * 100);
+                return allocated < 0 ? -1 : value > 100 ? 100 : value;
+            }
+        },
+        constants.usedStorageQuota(), "100px"); //$NON-NLS-1$
+
+        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
+            @Override
+            public String getValue(Quota object) {
+                double value;
+                double allocated = 0;
+                double used = 0;
+                if (object.getGlobalQuotaStorage() != null) {
+                    allocated = 
object.getGlobalQuotaStorage().getStorageSizeGB();
+                    used = 
object.getGlobalQuotaStorage().getStorageSizeGBUsage();
+                } else {
+                    for (QuotaStorage quotaStorage : 
object.getQuotaStorages()) {
+                        allocated += quotaStorage.getStorageSizeGB();
+                        used += quotaStorage.getStorageSizeGBUsage();
+                    }
+                }
+                value = allocated - used;
+
+                String returnVal;
+                if (allocated < 0) {
+                    returnVal = "Unlimited"; //$NON-NLS-1$
+                } else if (value <= 0) {
+                    returnVal = "0 GB"; //$NON-NLS-1$
+                } else {
+                    returnVal = diskSizeRenderer.render(value);
+                }
+                return returnVal;
+            }
+        },constants.freeStorage(),"80px"); //$NON-NLS-1$
 
         getTable().addActionButton(new 
WebAdminButtonDefinition<Quota>(constants.addQuota()) {
             @Override
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/QuotaPercentColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/QuotaPercentColumn.java
new file mode 100644
index 0000000..fabba46
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/QuotaPercentColumn.java
@@ -0,0 +1,25 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+
+/**
+ * Column for displaying percent-based progress bar for quota.
+ *
+ * @param <T>
+ *            Table row data type.
+ */
+public abstract class QuotaPercentColumn<T> extends ProgressBarColumn<T> {
+
+
+    @Override
+    protected String getProgressText(T object) {
+        Integer progressValue = getProgressValue(object);
+        if (progressValue != null && progressValue >= 100) {
+            return "Exceeded"; //$NON-NLS-1$
+        }
+        if (progressValue != null && progressValue < 0) {
+            return "Unlimited"; //$NON-NLS-1$
+        }
+        return progressValue != null ? progressValue + "%" : "0%"; 
//$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+}


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

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

Reply via email to