modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java | 68 +---- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java | 84 ++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java | 1 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java | 124 +++++----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java | 100 +------- 8 files changed, 188 insertions(+), 195 deletions(-)
New commits: commit cb3e2ff994e904218e220058fb5ad7e9b67f2ffe Author: Mike Thompson mithomps@redhat.com Date: Thu Feb 28 14:11:42 2013 -0800
Charting - Add Availability charts to Group screens and pull-up the common availability code to a shared super class.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java index 0718e15..b2a168e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java @@ -37,17 +37,13 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import org.rhq.core.domain.common.EntityContext; import org.rhq.core.domain.configuration.PropertySimple; -import org.rhq.core.domain.criteria.AvailabilityCriteria; import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.dashboard.DashboardPortlet; -import org.rhq.core.domain.measurement.Availability; -import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.measurement.MeasurementDefinition; import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.lookup.ResourceLookupComboBoxItem; import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet; @@ -92,7 +88,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) { - Log.debug("\n\n\nPortlet Configure !!"); + Log.debug("\nPortlet Configure !!");
if (null == this.portletWindow && null != portletWindow) { this.portletWindow = portletWindow; @@ -108,11 +104,10 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo if (resourceIdProperty != null && measurementDefIdProperty != null) { final Integer entityId = resourceIdProperty.getIntegerValue(); final Integer measurementDefId = measurementDefIdProperty.getIntegerValue(); - graph.setDefinitionId(measurementDefId); - graph.setEntityId(entityId); - Log.debug("Metric Graph Data: "+ graph.getMetricGraphData()); - if (entityId != null && measurementDefId != null) { + graph.setDefinitionId(measurementDefId); + graph.setEntityId(entityId); + Log.debug("Metric Graph Data: " + graph.getMetricGraphData());
queryResource(entityId, measurementDefId); } @@ -122,8 +117,6 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo }
private void queryResource(Integer entityId, final Integer measurementDefId) { - //final long startTime = System.currentTimeMillis(); - ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
ResourceCriteria resourceCriteria = new ResourceCriteria(); @@ -176,61 +169,29 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo final long startTime = System.currentTimeMillis();
// setting up a deferred Command to execute after all resource queries have completed (successfully or unsuccessfully) - // we know there are exactly 2 resources + // we know there are exactly 1 resources final CountDownLatch countDownLatch = CountDownLatch.create(1, new Command() { @Override /** * Satisfied only after ALL of the metric queries AND availability have completed */ public void execute() { - Log.debug("Dashboard chart query total time for entity: "+entityId+", MeasurementDef: "+def.getId() +" in "+ (System.currentTimeMillis() - startTime)+" ms"); + Log.debug("Dashboard chart query total time for entity: " + entityId + ", MeasurementDef: " + + def.getId() + " in " + (System.currentTimeMillis() - startTime) + " ms"); drawGraph(); } });
queryMeasurementsAndMetricData(entityId, def.getId(), countDownLatch); - //queryAvailability(entityId, countDownLatch); // now the countDown latch will run sometime asynchronously after BOTH the previous 2 queries have executed }
-// private void queryAvailability(final Integer entityId, final CountDownLatch countDownLatch) { -// -// final long startTime = System.currentTimeMillis(); -// -// // now return the availability -// AvailabilityCriteria c = new AvailabilityCriteria(); -// c.addFilterResourceId(entityId); -// c.addFilterInitialAvailability(false); -// c.addSortStartTime(PageOrdering.ASC); -// GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c, -// new AsyncCallback<PageList<Availability>>() { -// @Override -// public void onFailure(Throwable caught) { -// CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught); -// countDownLatch.countDown(); -// } -// -// @Override -// public void onSuccess(PageList<Availability> availList) { -// Log.debug("Dashboard chart availability query for: "+entityId+", in: " -// + (System.currentTimeMillis() - startTime) + " ms."); -// PageList<Availability> availabilityList = new PageList<Availability>(); -// for (Availability availability : availList) { -// if (!availability.getAvailabilityType().equals(AvailabilityType.UP)){ -// availabilityList.add(availability); -// } -// } -// //graph.getMetricGraphData().setAvailabilityList(availabilityList); -// countDownLatch.countDown(); -// } -// }); -// } - - private void queryMeasurementsAndMetricData(final Integer entityId, final Integer definitionId, final CountDownLatch countDownLatch) { + private void queryMeasurementsAndMetricData(final Integer entityId, final Integer definitionId, + final CountDownLatch countDownLatch) { final long startTime = System.currentTimeMillis(); // - GWTServiceLookup.getMeasurementDataService().findDataForResourceForLast(entityId, - new int[] { definitionId }, 8, MeasurementUtils.UNIT_HOURS, 60, + GWTServiceLookup.getMeasurementDataService().findDataForResourceForLast(entityId, new int[] { definitionId }, + 8, MeasurementUtils.UNIT_HOURS, 60, new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() { @Override public void onFailure(Throwable caught) { @@ -240,8 +201,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override public void onSuccess(final List<List<MeasurementDataNumericHighLowComposite>> measurementData) { - Log.debug("Dashboard Metric data in: " - + (System.currentTimeMillis() - startTime) + " ms."); + Log.debug("Dashboard Metric data in: " + (System.currentTimeMillis() - startTime) + " ms."); graph.getMetricGraphData().setMetricData(measurementData.get(0)); countDownLatch.countDown(); } @@ -337,7 +297,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override public void redraw() { - Log.debug(" *** Redraw Portlet and set data"); + Log.debug("Redraw Portlet and set data"); super.redraw();
removeMembers(getMembers()); @@ -350,8 +310,6 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo } else { graph.getMetricGraphData().setEntityId(simple.getIntegerValue()); PropertySimple simpleDefId = storedPortlet.getConfiguration().getSimple(CFG_DEFINITION_ID); - Log.debug("EntityId from portal config: " + simple.getIntegerValue()); - Log.debug("DefintionId from portal config: " + simpleDefId.getIntegerValue()); graph.getMetricGraphData().setDefinitionId(simpleDefId.getIntegerValue()); drawGraph(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java new file mode 100644 index 0000000..76eb8d2 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java @@ -0,0 +1,84 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2013 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.gui.coregui.client.inventory.common; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.widgets.Label; + +import org.rhq.core.domain.criteria.AvailabilityCriteria; +import org.rhq.core.domain.measurement.Availability; +import org.rhq.core.domain.util.PageList; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.AvailabilityD3Graph; +import org.rhq.enterprise.gui.coregui.client.util.Log; +import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +public class AbstractD3GraphListView extends LocatableVLayout { + protected PageList<Availability> availabilityList; + protected AvailabilityD3Graph availabilityGraph; + protected static Label loadingLabel = new Label(MSG.common_msg_loading()); + protected UserPreferencesMeasurementRangeEditor measurementRangeEditor; + protected boolean monitorDetailView = false; + + public AbstractD3GraphListView(String locatorId){ + super(locatorId); + measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId()); + } + + protected void queryAvailability(final int resourceId, final CountDownLatch countDownLatch) { + + final long startTime = System.currentTimeMillis(); + + // now return the availability + AvailabilityCriteria c = new AvailabilityCriteria(); + c.addFilterResourceId(resourceId); + c.addFilterInitialAvailability(false); + c.addSortStartTime(PageOrdering.ASC); + GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c, + new AsyncCallback<PageList<Availability>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught); + if (countDownLatch != null) { + countDownLatch.countDown(); + } + } + + @Override + public void onSuccess(PageList<Availability> availList) { + Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime) + + " ms."); + availabilityList = new PageList<Availability>(); + for (Availability availability : availList) { + availabilityList.add(availability); + } + Log.debug("avail list size: " + availabilityList.size()); + if (countDownLatch != null) { + countDownLatch.countDown(); + } + } + }); + } + + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java index 954e19c..767daa9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java @@ -111,7 +111,7 @@ public abstract class AbstractMetricD3GraphView extends LocatableVLayout {
StringBuilder divAndSvgDefs = new StringBuilder(); divAndSvgDefs.append("<div id="rChart-" + graph.getMetricGraphData().getChartId() - + "" ><svg xmlns="http://www.w3.org/2000/svg%5C" version="1.1" style="height:" + getChartHeight() + + "" ><svg xmlns="http://www.w3.org/2000/svg%5C" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink%5C" style="height:" + getChartHeight() + "px;">"); divAndSvgDefs.append(getSvgDefs()); divAndSvgDefs.append("</svg></div>"); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java index df8635f..fddffe1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java @@ -72,7 +72,6 @@ public final class MetricStackedBarGraph extends AbstractGraph { "use strict"; // privates
- console.log("Chart Height: "+chartContext.height); var margin = {top: 10, right: 5, bottom: 5, left: 40}, width = 750 - margin.left - margin.right, adjustedChartHeight = chartContext.chartHeight - 50, diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java index f7e9eae..1d4c80d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java @@ -26,7 +26,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.widgets.Label;
import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.DisplayType; @@ -35,28 +34,27 @@ import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowCo import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.enterprise.gui.coregui.client.CoreGUI; -import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.AvailabilityLineGraphType; import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricGraphData; import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricStackedBarGraph; +import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractD3GraphListView; +import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.AvailabilityD3Graph; import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.ResourceMetricD3Graph; import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository; -import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/** * Build the Group version of the View that shows the individual graph views. * @author Mike Thompson */ -public class D3GroupGraphListView extends LocatableVLayout { +public class D3GroupGraphListView extends AbstractD3GraphListView {
private ResourceGroup resourceGroup; - private Label loadingLabel = new Label(MSG.common_msg_loading()); - private UserPreferencesMeasurementRangeEditor measurementRangeEditor;
- public D3GroupGraphListView(String locatorId, ResourceGroup resourceGroup) { + public D3GroupGraphListView(String locatorId, ResourceGroup resourceGroup, boolean monitorDetailView) { super(locatorId); - measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId()); this.resourceGroup = resourceGroup; + this.monitorDetailView = monitorDetailView; setOverflow(Overflow.AUTO); }
@@ -67,6 +65,13 @@ public class D3GroupGraphListView extends LocatableVLayout { destroyMembers();
addMember(measurementRangeEditor); + if (monitorDetailView) { + availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resourceGroup.getId())); + // first step in 2 step to create d3 chart + // create a placeholder for avail graph + availabilityGraph.createGraphMarker(); + addMember(availabilityGraph); + }
if (resourceGroup != null) { buildGraphs(); @@ -78,77 +83,78 @@ public class D3GroupGraphListView extends LocatableVLayout { */ private void buildGraphs() {
- List<Long> startEndList = measurementRangeEditor.getBeginEndTimes(); + List<Long> startEndList = measurementRangeEditor.getBeginEndTimes(); final long startTime = startEndList.get(0); final long endTime = startEndList.get(1);
+ queryAvailability(resourceGroup.getId(), null); + ResourceTypeRepository.Cache.getInstance().getResourceTypes(resourceGroup.getResourceType().getId(), - EnumSet.of(ResourceTypeRepository.MetadataType.measurements), - new ResourceTypeRepository.TypeLoadedCallback() { - public void onTypesLoaded(final ResourceType type) { + EnumSet.of(ResourceTypeRepository.MetadataType.measurements), + new ResourceTypeRepository.TypeLoadedCallback() { + public void onTypesLoaded(final ResourceType type) {
- final ArrayList<MeasurementDefinition> measurementDefinitions = new ArrayList<MeasurementDefinition>(); + final ArrayList<MeasurementDefinition> measurementDefinitions = new ArrayList<MeasurementDefinition>();
- for (MeasurementDefinition def : type.getMetricDefinitions()) { - if (def.getDataType() == DataType.MEASUREMENT && def.getDisplayType() == DisplayType.SUMMARY) { - measurementDefinitions.add(def); - } + for (MeasurementDefinition def : type.getMetricDefinitions()) { + if (def.getDataType() == DataType.MEASUREMENT && def.getDisplayType() == DisplayType.SUMMARY) { + measurementDefinitions.add(def); } + }
- Collections.sort(measurementDefinitions, new Comparator<MeasurementDefinition>() { - public int compare(MeasurementDefinition o1, MeasurementDefinition o2) { - return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder()); - } - }); - - int[] measDefIdArray = new int[measurementDefinitions.size()]; - for (int i = 0; i < measDefIdArray.length; i++) { - measDefIdArray[i] = measurementDefinitions.get(i).getId(); + Collections.sort(measurementDefinitions, new Comparator<MeasurementDefinition>() { + public int compare(MeasurementDefinition o1, MeasurementDefinition o2) { + return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder()); } + });
- GWTServiceLookup.getMeasurementDataService().findDataForCompatibleGroup(resourceGroup.getId(), measDefIdArray, startTime, endTime,60, - new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() - { - @Override - public void onFailure(Throwable caught) - { - CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_loadFailed(), - caught); - loadingLabel.setContents(MSG.view_resource_monitor_graphs_loadFailed()); - } + int[] measDefIdArray = new int[measurementDefinitions.size()]; + for (int i = 0; i < measDefIdArray.length; i++) { + measDefIdArray[i] = measurementDefinitions.get(i).getId(); + } + + GWTServiceLookup.getMeasurementDataService().findDataForCompatibleGroup(resourceGroup.getId(), + measDefIdArray, startTime, endTime, 60, + new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_loadFailed(), + caught); + loadingLabel.setContents(MSG.view_resource_monitor_graphs_loadFailed()); + }
- @Override - public void onSuccess(List<List<MeasurementDataNumericHighLowComposite>> result) - { - if (result.isEmpty()) - { - loadingLabel.setContents(MSG.view_resource_monitor_graphs_noneAvailable()); - } - else - { - loadingLabel.hide(); - int i = 0; - for (List<MeasurementDataNumericHighLowComposite> data : result) - { - buildIndividualGraph(measurementDefinitions.get(i++), data); - } - } + @Override + public void onSuccess(List<List<MeasurementDataNumericHighLowComposite>> result) { + if (result.isEmpty()) { + loadingLabel.setContents(MSG.view_resource_monitor_graphs_noneAvailable()); + } else { + loadingLabel.hide(); + int i = 0; + for (List<MeasurementDataNumericHighLowComposite> data : result) { + buildIndividualGraph(measurementDefinitions.get(i++), data); } - }); + availabilityGraph.setMetricData(result.get(0)); + availabilityGraph.setAvailabilityList(availabilityList); + availabilityGraph.drawGraph(); + } + } + });
- } - }); + } + }); }
- private void buildIndividualGraph(MeasurementDefinition measurementDefinition, List<MeasurementDataNumericHighLowComposite> data) { + private void buildIndividualGraph(MeasurementDefinition measurementDefinition, + List<MeasurementDataNumericHighLowComposite> data) {
MetricGraphData metricGraphData = new MetricGraphData(resourceGroup.getId(), resourceGroup.getName(), - measurementDefinition, data); + measurementDefinition, data); MetricStackedBarGraph graph = new MetricStackedBarGraph(metricGraphData); - ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()), graph); + ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()), + graph);
graphView.setWidth("95%"); - graphView.setHeight(250); + graphView.setHeight(225);
addMember(graphView); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java index 116bfed..12a7796 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java @@ -325,7 +325,7 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource viewFactory = (!visibleToIE8) ? null : new ViewFactory() { @Override public Canvas createView() { - return new D3GroupGraphListView(monitoringTab.extendLocatorId("NewGraphs"), groupComposite.getResourceGroup()); + return new D3GroupGraphListView(monitoringTab.extendLocatorId("NewGraphs"), groupComposite.getResourceGroup(), true); } };
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java index 6e45af9..f8c5dad 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java @@ -36,6 +36,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMetricGraphView; import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository; +import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -66,6 +67,7 @@ public class ResourceGroupMetricGraphView extends AbstractMetricGraphView { @Override protected void renderGraph() { if (null == getDefinition()) { + Log.debug(" **** Mike Group Metric Graph");
ResourceGroupGWTServiceAsync groupService = GWTServiceLookup.getResourceGroupService();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java index 1315565..e17bddd 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java @@ -28,11 +28,8 @@ import java.util.TreeSet;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
-import org.rhq.core.domain.criteria.AvailabilityCriteria; -import org.rhq.core.domain.measurement.Availability; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.DisplayType; import org.rhq.core.domain.measurement.MeasurementDefinition; @@ -41,10 +38,10 @@ import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractD3GraphListView; import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.AvailabilityLineGraphType; import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricGraphData; import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricStackedBarGraph; @@ -52,7 +49,6 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.async.Command; import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch; -import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/** * Build the View that shows the individual graph views for multi-graph @@ -61,20 +57,16 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; * * @author Mike Thompson */ -public class D3GraphListView extends LocatableVLayout { +public class D3GraphListView extends AbstractD3GraphListView {
private static int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
private Resource resource; private Set<Integer> definitionIds = null; - private Label loadingLabel = new Label(MSG.common_msg_loading()); private UserPreferencesMeasurementRangeEditor measurementRangeEditor; private boolean useSummaryData = false; - private boolean monitorDetailView = false; - private PageList<Availability> availabilityList; private PageList<MeasurementOOBComposite> measurementOOBCompositeList; private List<List<MeasurementDataNumericHighLowComposite>> metricsDataList; - private AvailabilityD3Graph availabilityGraph;
public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds, boolean monitorDetailView) { @@ -119,41 +111,6 @@ public class D3GraphListView extends LocatableVLayout { measurementRangeEditor.getSetButton().addClickHandler(clickHandler); }
- private void queryAvailability(final Resource resource, final CountDownLatch countDownLatch) { - - final long startTime = System.currentTimeMillis(); - - // now return the availability - AvailabilityCriteria c = new AvailabilityCriteria(); - c.addFilterResourceId(resource.getId()); - c.addFilterInitialAvailability(false); - c.addSortStartTime(PageOrdering.ASC); - GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c, - new AsyncCallback<PageList<Availability>>() { - @Override - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught); - if (countDownLatch != null) { - countDownLatch.countDown(); - } - } - - @Override - public void onSuccess(PageList<Availability> availList) { - Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime) - + " ms."); - availabilityList = new PageList<Availability>(); - for (Availability availability : availList) { - availabilityList.add(availability); - } - Log.debug("avail list size: " + availabilityList.size()); - if (countDownLatch != null) { - countDownLatch.countDown(); - } - } - }); - } - @Override protected void onDraw() { super.onDraw(); @@ -162,7 +119,6 @@ public class D3GraphListView extends LocatableVLayout { addMember(measurementRangeEditor);
if (monitorDetailView) { - Log.debug("show monitor view"); availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId())); // first step in 2 step to create d3 chart // create a placeholder for avail graph @@ -191,7 +147,7 @@ public class D3GraphListView extends LocatableVLayout { final long startTime = startEndList.get(0); final long endTime = startEndList.get(1);
- queryAvailability(resource, null); + queryAvailability(resource.getId(), null);
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(), EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
commit 10c476be0877fcdbe4e48d4c728e34c0d328b512 Author: Mike Thompson mithomps@redhat.com Date: Thu Feb 28 11:42:35 2013 -0800
Charting - Move availability call out of latch enabling it to called only once for the resource.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java index 5bbdb95..1315565 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java @@ -33,7 +33,6 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.core.domain.criteria.AvailabilityCriteria; import org.rhq.core.domain.measurement.Availability; -import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.DisplayType; import org.rhq.core.domain.measurement.MeasurementDefinition; @@ -64,13 +63,12 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; */ public class D3GraphListView extends LocatableVLayout {
- private static int NUM_ASYNC_CALLS = 3; // wait for X async calls in Latch + private static int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
private Resource resource; private Set<Integer> definitionIds = null; private Label loadingLabel = new Label(MSG.common_msg_loading()); private UserPreferencesMeasurementRangeEditor measurementRangeEditor; - //private SliderRangeEditor sliderRangeEditor; private boolean useSummaryData = false; private boolean monitorDetailView = false; private PageList<Availability> availabilityList; @@ -78,12 +76,14 @@ public class D3GraphListView extends LocatableVLayout { private List<List<MeasurementDataNumericHighLowComposite>> metricsDataList; private AvailabilityD3Graph availabilityGraph;
- public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds, boolean monitorDetailView) { + public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds, + boolean monitorDetailView) {
return new D3GraphListView(locatorId, resource, definitionIds, monitorDetailView); }
- public static D3GraphListView createSummaryMultipleGraphs(String locatorId, Resource resource, boolean monitorDetailView) { + public static D3GraphListView createSummaryMultipleGraphs(String locatorId, Resource resource, + boolean monitorDetailView) { return new D3GraphListView(locatorId, resource, monitorDetailView); }
@@ -110,13 +110,11 @@ public class D3GraphListView extends LocatableVLayout { }
private void commonConstructorSettings() { - //sliderRangeEditor = new SliderRangeEditor(this.getLocatorId()); measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId()); setOverflow(Overflow.AUTO); }
public void addSetButtonClickHandler(ClickHandler clickHandler) { - //Log.debug("measurementRangeEditor " + sliderRangeEditor); Log.debug("measurementRangeEditor " + measurementRangeEditor); measurementRangeEditor.getSetButton().addClickHandler(clickHandler); } @@ -131,45 +129,40 @@ public class D3GraphListView extends LocatableVLayout { c.addFilterInitialAvailability(false); c.addSortStartTime(PageOrdering.ASC); GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c, - new AsyncCallback<PageList<Availability>>() { - @Override - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError( - MSG.view_resource_monitor_availability_loadFailed(), caught); - if(countDownLatch != null){ - countDownLatch.countDown(); - } + new AsyncCallback<PageList<Availability>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught); + if (countDownLatch != null) { + countDownLatch.countDown(); } + }
- @Override - public void onSuccess(PageList<Availability> availList) { - Log.debug("\nSuccessfully queried availability in: " - + (System.currentTimeMillis() - startTime) + " ms."); - availabilityList = new PageList<Availability>(); - for (Availability availability : availList) { - availabilityList.add(availability); - } - Log.debug("avail list size: " + availabilityList.size()); - if(countDownLatch != null){ - countDownLatch.countDown(); - } + @Override + public void onSuccess(PageList<Availability> availList) { + Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime) + + " ms."); + availabilityList = new PageList<Availability>(); + for (Availability availability : availList) { + availabilityList.add(availability); + } + Log.debug("avail list size: " + availabilityList.size()); + if (countDownLatch != null) { + countDownLatch.countDown(); } - }); + } + }); }
- @Override protected void onDraw() { super.onDraw(); Log.debug("D3GraphListView.onDraw()"); destroyMembers(); - - //addMember(sliderRangeEditor); addMember(measurementRangeEditor);
- if(monitorDetailView){ + if (monitorDetailView) { Log.debug("show monitor view"); - //List<Long> startEndList = sliderRangeEditor.getBeginEndTimes(); availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId())); // first step in 2 step to create d3 chart // create a placeholder for avail graph @@ -195,10 +188,11 @@ public class D3GraphListView extends LocatableVLayout { private void buildGraphs() { final long startTimer = System.currentTimeMillis(); List<Long> startEndList = measurementRangeEditor.getBeginEndTimes(); - //List<Long> startEndList = sliderRangeEditor.getBeginEndTimes(); final long startTime = startEndList.get(0); final long endTime = startEndList.get(1);
+ queryAvailability(resource, null); + ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(), EnumSet.of(ResourceTypeRepository.MetadataType.measurements), new ResourceTypeRepository.TypeLoadedCallback() { @@ -263,7 +257,6 @@ public class D3GraphListView extends LocatableVLayout { });
queryMetricData(measDefIdArray, countDownLatch); - queryAvailability(resource, countDownLatch); queryOOBMetrics(resource, countDownLatch); // now the countDown latch will run sometime asynchronously
@@ -292,12 +285,10 @@ public class D3GraphListView extends LocatableVLayout { }); }
- private void queryOOBMetrics(final Resource resource, final CountDownLatch countDownLatch) {
final long startTime = System.currentTimeMillis();
- // now return the availability GWTServiceLookup.getMeasurementDataService().getHighestNOOBsForResource(resource.getId(), 60,
new AsyncCallback<PageList<MeasurementOOBComposite>>() { @@ -305,10 +296,10 @@ public class D3GraphListView extends LocatableVLayout { public void onSuccess(PageList<MeasurementOOBComposite> measurementOOBComposites) {
measurementOOBCompositeList = measurementOOBComposites; - Log.debug("\nSuccessfully queried OOB data in: " - + (System.currentTimeMillis() - startTime) + " ms."); - Log.debug("OOB Data size: "+measurementOOBCompositeList.size()); - if(null != measurementOOBCompositeList){ + Log.debug("\nSuccessfully queried OOB data in: " + (System.currentTimeMillis() - startTime) + + " ms."); + Log.debug("OOB Data size: " + measurementOOBCompositeList.size()); + if (null != measurementOOBCompositeList) { for (MeasurementOOBComposite measurementOOBComposite : measurementOOBComposites) { Log.debug("measurementOOBComposite = " + measurementOOBComposite); } @@ -344,7 +335,7 @@ public class D3GraphListView extends LocatableVLayout { int i = 0; for (MeasurementDefinition measurementDefinition : measurementDefinitions) { if (summaryIds.contains(measurementDefinition.getId())) { - buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition, + buildSingleGraph(measurementOOBCompositeList, measurementDefinition, measurementData.get(i), 225); } i++; @@ -364,13 +355,11 @@ public class D3GraphListView extends LocatableVLayout { if (null != selectedDefinitionId) { // single graph case if (measurementId == selectedDefinitionId) { - buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition, - metric, 225); + buildSingleGraph(measurementOOBCompositeList, measurementDefinition, metric, 225); } } else { // multiple graph case - buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition, - metric, 225); + buildSingleGraph(measurementOOBCompositeList, measurementDefinition, metric, 225); } } i++; @@ -380,16 +369,15 @@ public class D3GraphListView extends LocatableVLayout {
}
- private void buildSingleGraph(PageList<Availability> downAvailList, - PageList<MeasurementOOBComposite> measurementOOBCompositeList, MeasurementDefinition measurementDefinition, - List<MeasurementDataNumericHighLowComposite> data, int height) { + private void buildSingleGraph(PageList<MeasurementOOBComposite> measurementOOBCompositeList, + MeasurementDefinition measurementDefinition, List<MeasurementDataNumericHighLowComposite> data, int height) {
MetricGraphData metricGraphData = new MetricGraphData(resource.getId(), resource.getName(), - measurementDefinition, data, measurementOOBCompositeList); + measurementDefinition, data, measurementOOBCompositeList); MetricStackedBarGraph graph = new MetricStackedBarGraph(metricGraphData);
- ResourceMetricD3Graph graphView = new ResourceMetricD3Graph( - extendLocatorId(measurementDefinition.getName()), graph); + ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()), + graph);
graphView.setWidth("95%"); graphView.setHeight(height);