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