modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/ButtonBarDateTimeRangeEditor.java | 9 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java | 191 +++++----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java | 3 4 files changed, 129 insertions(+), 78 deletions(-)
New commits: commit 226b0a806bbbd18dcffa69335f201238331ffbe8 Author: Mike Thompson mithomps@redhat.com Date: Thu Sep 26 09:59:17 2013 -0700
[BZ 1012589] Multi-line Graph Auto-refresh not working.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java index 7408f62..c3cfb75 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java @@ -42,8 +42,10 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.JsonMetricProducer; import org.rhq.enterprise.gui.coregui.client.Messages; import org.rhq.enterprise.gui.coregui.client.UserSessionManager; +import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshUtil; 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.AutoRefresh; import org.rhq.enterprise.gui.coregui.client.inventory.common.graph.ButtonBarDateTimeRangeEditor; import org.rhq.enterprise.gui.coregui.client.inventory.common.graph.Refreshable; import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository; @@ -62,7 +64,7 @@ import org.rhq.enterprise.gui.coregui.client.util.preferences.MeasurementUserPre * * @author Mike Thompson */ -public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout implements JsonMetricProducer, Refreshable { +public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout implements JsonMetricProducer, AutoRefresh, Refreshable {
static protected final Messages MSG = CoreGUI.getMessages(); // string labels @@ -89,6 +91,9 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl private String chartTitle; private Integer chartHeight;
+ protected static Timer refreshTimer; + protected boolean isRefreshing; + public CompositeGroupD3GraphListView(int groupId, int defId, boolean isAutoGroup) { super(); this.groupId = groupId; @@ -100,6 +105,7 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl setHeight100(); setWidth100(); setPadding(10); + startRefreshCycle(); }
public void populateData() { @@ -113,89 +119,89 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl
measurementForEachResource.clear(); groupService.findResourceGroupCompositesByCriteria(criteria, - new AsyncCallback<PageList<ResourceGroupComposite>>() { - @Override - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_lookupFailed(), caught); - } - - @Override - public void onSuccess(PageList<ResourceGroupComposite> result) { - if (result.isEmpty()) { - return; + new AsyncCallback<PageList<ResourceGroupComposite>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_lookupFailed(), caught); }
- final ResourceGroup parentGroup = result.get(0).getResourceGroup(); - chartTitle = parentGroup.getName(); - Log.debug("group name: " + parentGroup.getName()); - // setting up a deferred Command to execute after all resource queries have completed (successfully or unsuccessfully) - final CountDownLatch countDownLatch = CountDownLatch.create(parentGroup.getExplicitResources() - .size(), new Command() { - @Override - /** - * Do this only after ALL of the metric queries for each resource - */ - public void execute() { - if (parentGroup.getExplicitResources().size() != measurementForEachResource.size()) { - Log.warn("Number of graphs doesn't match number of resources"); - Log.warn("# of child resources: " + parentGroup.getExplicitResources().size()); - Log.warn("# of charted graphs: " + measurementForEachResource.size()); - } - drawGraph(); + @Override + public void onSuccess(PageList<ResourceGroupComposite> result) { + if (result.isEmpty()) { + return; } - });
- final Set<Resource> childResources = parentGroup.getExplicitResources(); - if (!childResources.isEmpty()) { + final ResourceGroup parentGroup = result.get(0).getResourceGroup(); + chartTitle = parentGroup.getName(); + Log.debug("group name: " + parentGroup.getName()); + // setting up a deferred Command to execute after all resource queries have completed (successfully or unsuccessfully) + final CountDownLatch countDownLatch = CountDownLatch.create(parentGroup.getExplicitResources() + .size(), new Command() { + @Override + /** + * Do this only after ALL of the metric queries for each resource + */ + public void execute() { + if (parentGroup.getExplicitResources().size() != measurementForEachResource.size()) { + Log.warn("Number of graphs doesn't match number of resources"); + Log.warn("# of child resources: " + parentGroup.getExplicitResources().size()); + Log.warn("# of charted graphs: " + measurementForEachResource.size()); + } + drawGraph(); + } + });
- // resourceType will be the same for all autogroup children so get first - Resource childResource = childResources.iterator().next(); + final Set<Resource> childResources = parentGroup.getExplicitResources(); + if (!childResources.isEmpty()) {
- ResourceTypeRepository.Cache.getInstance().getResourceTypes( - childResource.getResourceType().getId(), - EnumSet.of(ResourceTypeRepository.MetadataType.measurements), - new ResourceTypeRepository.TypeLoadedCallback() { - @Override - public void onTypesLoaded(final ResourceType type) { + // resourceType will be the same for all autogroup children so get first + Resource childResource = childResources.iterator().next();
- for (MeasurementDefinition def : type.getMetricDefinitions()) { - // only need the one selected measurement - if (def.getId() == getDefinitionId()) { - setDefinition(def); - } - } - - for (final Resource childResource : childResources) { - Log.debug("Adding child composite: " + childResource.getName() - + childResource.getId()); - - GWTServiceLookup.getMeasurementDataService().findDataForResource( - childResource.getId(), new int[] { getDefinitionId() }, - buttonBarDateTimeRangeEditor.getStartTime(), - buttonBarDateTimeRangeEditor.getEndTime(), 60, - new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() { - @Override - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError( - MSG.view_resource_monitor_graphs_loadFailed(), caught); - countDownLatch.countDown(); - } + ResourceTypeRepository.Cache.getInstance().getResourceTypes( + childResource.getResourceType().getId(), + EnumSet.of(ResourceTypeRepository.MetadataType.measurements), + new ResourceTypeRepository.TypeLoadedCallback() { + @Override + public void onTypesLoaded(final ResourceType type) {
- @Override - public void onSuccess( - List<List<MeasurementDataNumericHighLowComposite>> measurements) { - addMeasurementForEachResource(childResource.getName(), - childResource.getId(), measurements.get(0)); - countDownLatch.countDown(); + for (MeasurementDefinition def : type.getMetricDefinitions()) { + // only need the one selected measurement + if (def.getId() == getDefinitionId()) { + setDefinition(def); } - }); - } - } - }); + } + + for (final Resource childResource : childResources) { + Log.debug("Adding child composite: " + childResource.getName() + + childResource.getId()); + + GWTServiceLookup.getMeasurementDataService().findDataForResource( + childResource.getId(), new int[]{getDefinitionId()}, + buttonBarDateTimeRangeEditor.getStartTime(), + buttonBarDateTimeRangeEditor.getEndTime(), 60, + new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError( + MSG.view_resource_monitor_graphs_loadFailed(), caught); + countDownLatch.countDown(); + } + + @Override + public void onSuccess( + List<List<MeasurementDataNumericHighLowComposite>> measurements) { + addMeasurementForEachResource(childResource.getName(), + childResource.getId(), measurements.get(0)); + countDownLatch.countDown(); + } + }); + } + } + }); + } } - }
- }); + });
}
@@ -418,6 +424,36 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl return MSG.chart_xaxis_time_format_hours(); }
+ @Override + public void startRefreshCycle() { + refreshTimer = AutoRefreshUtil.startRefreshCycleWithPageRefreshInterval(this, this, refreshTimer); + } + + @Override + protected void onDestroy() { + AutoRefreshUtil.onDestroy(refreshTimer); + + super.onDestroy(); + } + + @Override + public boolean isRefreshing() { + return isRefreshing; + } + + //Custom refresh operation as we are not directly extending Table + @Override + public void refresh() { + if (isVisible() && !isRefreshing()) { + isRefreshing = true; + try { + buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); + refreshData(); + } finally { + isRefreshing = false; + } + } + } /** * Client can choose which graph types to render. */
commit 77312423e631cc63462868baedfb0e8fe129e1fc Author: Mike Thompson mithomps@redhat.com Date: Thu Sep 26 07:52:06 2013 -0700
Update Summary metric portlet graphs for Date/Time range feedback of period being selected for charting.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/ButtonBarDateTimeRangeEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/ButtonBarDateTimeRangeEditor.java index 778bbb2..561f961 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/ButtonBarDateTimeRangeEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/ButtonBarDateTimeRangeEditor.java @@ -64,9 +64,12 @@ public class ButtonBarDateTimeRangeEditor extends EnhancedVLayout { private Label dateRangeLabel; private DateTimeButtonBarClickHandler dateTimeButtonBarClickHandler; private AbstractMeasurementRangeEditor.MetricRangePreferences prefs; + // just a reference to pass to CustomDateRangeWindow as it must be final + // so 'this' won't work final private ButtonBarDateTimeRangeEditor self; private RefreshIntervalMenu refreshIntervalMenu; private boolean allowPreferenceUpdateRefresh; + private boolean isCustomDateRangeActive;
public ButtonBarDateTimeRangeEditor(MeasurementUserPreferences measurementUserPrefs, Refreshable d3GraphListView) { this.self = this; @@ -110,6 +113,7 @@ public class ButtonBarDateTimeRangeEditor extends EnhancedVLayout { CustomDateRangeWindow customDateRangeWindow = new CustomDateRangeWindow(MSG .common_buttonbar_custom_window_title(), MSG.common_buttonbar_custom_window_subtitle(), self, new Date(prefs.begin), new Date(prefs.end)); + isCustomDateRangeActive = true; customDateRangeWindow.show(); } }); @@ -130,6 +134,10 @@ public class ButtonBarDateTimeRangeEditor extends EnhancedVLayout { addMember(toolStrip); }
+ public boolean isCustomTimeRangeActive(){ + return isCustomDateRangeActive; + } + public void redrawGraphs() { d3GraphListView.refreshData(); } @@ -213,6 +221,7 @@ public class ButtonBarDateTimeRangeEditor extends EnhancedVLayout { public void onClick(ClickEvent clickEvent) { IButton button = (IButton) clickEvent.getSource(); String selectedDateTimeRange = button.getTitle(); + isCustomDateRangeActive = false; Date now = new Date(); Date calculatedStartDateTime = calculateStartDate(now, selectedDateTimeRange); saveDateRange(calculatedStartDateTime.getTime(), now.getTime()); 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 dcfb744..561a7a5 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 @@ -141,7 +141,9 @@ public final class D3GroupGraphListView extends AbstractD3GraphListView implemen @Override public void run() { availabilityGraph.drawJsniChart(); - buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); + if(!buttonBarDateTimeRangeEditor.isCustomTimeRangeActive()){ + buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); + } } }.schedule(150); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java index 013696f..7408f62 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/CompositeGroupD3GraphListView.java @@ -103,7 +103,6 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl }
public void populateData() { - buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); ResourceGroupGWTServiceAsync groupService = GWTServiceLookup.getResourceGroupService();
ResourceGroupCriteria criteria = new ResourceGroupCriteria(); @@ -143,7 +142,6 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl Log.warn("# of charted graphs: " + measurementForEachResource.size()); } drawGraph(); - buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); } });
@@ -284,6 +282,9 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl
@Override public void run() { + if(!buttonBarDateTimeRangeEditor.isCustomTimeRangeActive()){ + buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); + } drawJsniChart(); } }.schedule(200); @@ -357,7 +358,6 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl sb.append("{ "x":" + measurement.getTimestamp() + ","); MeasurementNumericValueAndUnits dataValue = normalizeUnitsAndValues(measurement.getValue(), definition.getUnits()); - //sb.append(" "y":" + MeasurementUnits.scaleUp(measurement.getValue(), definition.getUnits()) + "},"); sb.append(" "y":" + dataValue.getValue() + "},"); adjustedMeasurementUnits = dataValue.getUnits().toString(); } @@ -381,8 +381,9 @@ public abstract class CompositeGroupD3GraphListView extends EnhancedVLayout impl } sb.setLength(sb.length() - 1); // delete the last ',' sb.append("]"); + Log.debug("Multi-resource Graph size: " + measurementForEachResource.size()); } - Log.debug("Multi-resource Graph json: " + sb.toString()); + //Log.debug("Multi-resource Graph json: " + sb.toString()); return sb.toString(); }
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 6eab1e9..0086871 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 @@ -233,6 +233,9 @@ public class D3GraphListView extends AbstractD3GraphListView { new Timer() { @Override public void run() { + if(!buttonBarDateTimeRangeEditor.isCustomTimeRangeActive()){ + buttonBarDateTimeRangeEditor.updateTimeRangeToNow(); + } availabilityGraph.drawJsniChart(); } }.schedule(150);
rhq-commits@lists.fedorahosted.org