modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
| 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/graphtype/AvailabilitySummaryPieGraphType.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
| 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/GroupMetricsTableDataSource.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/MetricsTableDataSource.java
| 333 +++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
| 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableDataSource.java
| 335 ----------
7 files changed, 349 insertions(+), 359 deletions(-)
New commits:
commit 6a6485acff97d1073015d6aab0d52c5fb4022895
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Thu Aug 1 14:09:03 2013 -0700
Small Graph subsystem refactoring.
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
index d9f27b1..2ce63aa 100644
---
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
@@ -45,13 +45,13 @@ import
org.rhq.enterprise.gui.coregui.client.util.preferences.MeasurementUserPre
public abstract class AbstractD3GraphListView extends EnhancedVLayout implements
AutoRefresh,RedrawGraphs {
protected final static int SINGLE_CHART_HEIGHT = 225;
protected final static int MULTI_CHART_HEIGHT = 210;
- protected static Label loadingLabel = new Label(MSG.common_msg_loading());
+ protected static final Label loadingLabel = new Label(MSG.common_msg_loading());
protected List<Availability> availabilityList;
protected List<ResourceGroupAvailability> groupAvailabilityList;
protected AvailabilityD3GraphView availabilityGraph;
- protected MeasurementUserPreferences measurementUserPrefs;
+ protected final MeasurementUserPreferences measurementUserPrefs;
protected boolean showAvailabilityGraph = false;
- protected ButtonBarDateTimeRangeEditor buttonBarDateTimeRangeEditor;
+ protected final ButtonBarDateTimeRangeEditor buttonBarDateTimeRangeEditor;
protected Timer refreshTimer;
public AbstractD3GraphListView() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/graphtype/AvailabilitySummaryPieGraphType.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/graphtype/AvailabilitySummaryPieGraphType.java
index fb8e096..678724a 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/graphtype/AvailabilitySummaryPieGraphType.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/graph/graphtype/AvailabilitySummaryPieGraphType.java
@@ -92,8 +92,8 @@ public class AvailabilitySummaryPieGraphType {
console.log("Draw Availability Summary Pie Chart");
var global = this,
- w = 100,
- h = 100,
+ w =
@org.rhq.enterprise.gui.coregui.client.inventory.common.graph.graphtype.AvailabilitySummaryPieGraphType::WIDTH,
+ h =
@org.rhq.enterprise.gui.coregui.client.inventory.common.graph.graphtype.AvailabilitySummaryPieGraphType::HEIGHT,
r = h / 2,
color = $wnd.d3.scale.category10(),
data =
global.@org.rhq.enterprise.gui.coregui.client.inventory.common.graph.graphtype.AvailabilitySummaryPieGraphType::getAvailabilitySummaryJson()(),
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 a9789c6..16670aa 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
@@ -54,7 +54,7 @@ import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch;
*/
public final class D3GroupGraphListView extends AbstractD3GraphListView implements
AutoRefresh {
- private ResourceGroup resourceGroup;
+ private final ResourceGroup resourceGroup;
private VLayout graphsVLayout;
public D3GroupGraphListView(ResourceGroup resourceGroup, boolean monitorDetailView)
{
@@ -67,7 +67,6 @@ public final class D3GroupGraphListView extends AbstractD3GraphListView
implemen
@Override
protected void onDraw() {
super.onDraw();
-
destroyMembers();
addMember(buttonBarDateTimeRangeEditor);
@@ -81,9 +80,7 @@ public final class D3GroupGraphListView extends AbstractD3GraphListView
implemen
graphsVLayout.setWidth100();
graphsVLayout.setHeight100();
- if (resourceGroup != null) {
- buildGraphs();
- }
+ buildGraphs();
addMember(graphsVLayout);
}
@@ -196,9 +193,7 @@ public final class D3GroupGraphListView extends
AbstractD3GraphListView implemen
graphView.setWidth("95%");
graphView.setHeight(MULTI_CHART_HEIGHT);
- if (graphsVLayout != null) {
- graphsVLayout.addMember(graphView);
- }
+ graphsVLayout.addMember(graphView);
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/GroupMetricsTableDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/GroupMetricsTableDataSource.java
index 0b7b0bf..92221c5 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/GroupMetricsTableDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/GroupMetricsTableDataSource.java
@@ -22,7 +22,6 @@ import
org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.table.MetricsTableDataSource;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import
org.rhq.enterprise.gui.coregui.client.util.preferences.MeasurementUserPreferences;
@@ -149,8 +148,8 @@ public class GroupMetricsTableDataSource extends
MetricsTableDataSource {
//now retrieve metric display sumamries
GWTServiceLookup.getMeasurementChartsService().getMetricDisplaySummariesForCompatibleGroup(groupId,
- definitionArrayIds, Long.valueOf(range.get(0)).longValue(),
- Long.valueOf(range.get(1)).longValue(), false,
+ definitionArrayIds, range.get(0),
+ range.get(1), false,
new AsyncCallback<ArrayList<MetricDisplaySummary>>()
{
@Override
public void onSuccess(ArrayList<MetricDisplaySummary>
result) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/MetricsTableDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/MetricsTableDataSource.java
new file mode 100644
index 0000000..ef71ab7
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/table/MetricsTableDataSource.java
@@ -0,0 +1,333 @@
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.monitoring.table;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.measurement.DataType;
+import org.rhq.core.domain.measurement.MeasurementDefinition;
+import org.rhq.core.domain.measurement.MeasurementSchedule;
+import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite;
+import org.rhq.core.domain.measurement.ui.MetricDisplaySummary;
+import org.rhq.core.domain.measurement.ui.MetricDisplayValue;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
+import org.rhq.enterprise.gui.coregui.client.util.BrowserUtility;
+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.RPCDataSource;
+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.preferences.MeasurementUserPreferences;
+
+/**
+ * A simple data source to read in metric data summaries for a resource.
+ * This doesn't support paging - everything is returned in one query. Since
+ * the number of metrics per resource is relatively small (never more than tens of
them),
+ * we just load them all in at once.
+ *
+ * @author John Mazzitelli
+ * @author Mike Thompson
+ */
+public class MetricsTableDataSource extends RPCDataSource<MetricDisplaySummary,
Criteria> {
+
+ public static final String FIELD_SPARKLINE = "sparkline";
+ public static final String FIELD_METRIC_LABEL = "label";
+ public static final String FIELD_ALERT_COUNT = "alertCount";
+ public static final String FIELD_MIN_VALUE = "min";
+ public static final String FIELD_MAX_VALUE = "max";
+ public static final String FIELD_AVG_VALUE = "avg";
+ public static final String FIELD_LAST_VALUE = "last";
+ public static final String FIELD_METRIC_DEF_ID = "defId";
+ public static final String FIELD_METRIC_SCHED_ID = "schedId";
+ public static final String FIELD_METRIC_UNITS = "units";
+ public static final String FIELD_METRIC_NAME = "name";
+ public static final String FIELD_RESOURCE_ID = "resourceId";
+ private int resourceId;
+ private List<MetricDisplaySummary> metricDisplaySummaries;
+ private List<List<MeasurementDataNumericHighLowComposite>>
metricsDataList;
+ private MeasurementUserPreferences measurementUserPrefs;
+
+ public MetricsTableDataSource(int resourceId) {
+ this.resourceId = resourceId;
+ measurementUserPrefs = new
MeasurementUserPreferences(UserSessionManager.getUserPreferences());
+ }
+
+ /**
+ * The view that contains the list grid which will display this datasource's data
will call this
+ * method to get the field information which is used to control the display of the
data.
+ *
+ * @return list grid fields used to display the datasource data
+ */
+ public ArrayList<ListGridField> getListGridFields() {
+ ArrayList<ListGridField> fields = new ArrayList<ListGridField>(7);
+
+ ListGridField sparklineField = new ListGridField(FIELD_SPARKLINE,
"chart");
+ sparklineField.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ if (value == null) {
+ return "";
+ }
+ String contents = "<span id='sparkline_" + resourceId +
"-"
+ + record.getAttributeAsInt(FIELD_METRIC_DEF_ID) + "'
class='dynamicsparkline' width='70' "
+ + "values='" + record.getAttribute(FIELD_SPARKLINE) +
"'></span>";
+ return contents;
+
+ }
+ });
+
+ sparklineField.setWidth(80);
+ fields.add(sparklineField);
+
+ ListGridField nameField = new ListGridField(FIELD_METRIC_LABEL,
MSG.common_title_name());
+ nameField.setWidth("30%");
+ fields.add(nameField);
+
+ ListGridField alertsField = new ListGridField(FIELD_ALERT_COUNT,
MSG.common_title_alerts());
+ alertsField.setWidth("10%");
+ fields.add(alertsField);
+
+ ListGridField minField = new ListGridField(FIELD_MIN_VALUE,
MSG.view_resource_monitor_table_min());
+ minField.setWidth("15%");
+ fields.add(minField);
+
+ ListGridField maxField = new ListGridField(FIELD_MAX_VALUE,
MSG.view_resource_monitor_table_max());
+ maxField.setWidth("15%");
+ fields.add(maxField);
+
+ ListGridField avgField = new ListGridField(FIELD_AVG_VALUE,
MSG.view_resource_monitor_table_avg());
+ avgField.setWidth("15%");
+ fields.add(avgField);
+
+ ListGridField lastField = new ListGridField(FIELD_LAST_VALUE,
MSG.view_resource_monitor_table_last());
+ lastField.setWidth("15%");
+ fields.add(lastField);
+
+ return fields;
+ }
+
+ @Override
+ public MetricDisplaySummary copyValues(Record from) {
+ // we should never need this method - we only go in one direction
+ // if we ever need this, just have copyValues store an "object"
attribute whose value is "from"
+ // which this method then just reads out. Since we don't need this now, save
memory by not
+ // keeping the MetricDisplayValue around
+ return null;
+ }
+
+ @Override
+ public ListGridRecord copyValues(MetricDisplaySummary from) {
+ MeasurementUtility.formatSimpleMetrics(from);
+
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_SPARKLINE, getCsvMetricsForSparkline());
+ record.setAttribute(FIELD_METRIC_LABEL, from.getLabel());
+ record.setAttribute(FIELD_ALERT_COUNT, String.valueOf(from.getAlertCount()));
+ record.setAttribute(FIELD_MIN_VALUE, getMetricStringValue(from.getMinMetric()));
+ record.setAttribute(FIELD_MAX_VALUE, getMetricStringValue(from.getMaxMetric()));
+ record.setAttribute(FIELD_AVG_VALUE, getMetricStringValue(from.getAvgMetric()));
+ record.setAttribute(FIELD_LAST_VALUE,
getMetricStringValue(from.getLastMetric()));
+ record.setAttribute(FIELD_METRIC_DEF_ID, from.getDefinitionId());
+ record.setAttribute(FIELD_METRIC_SCHED_ID, from.getScheduleId());
+ record.setAttribute(FIELD_METRIC_UNITS, from.getUnits());
+ record.setAttribute(FIELD_METRIC_NAME, from.getMetricName());
+ record.setAttribute(FIELD_RESOURCE_ID, resourceId);
+ return record;
+ }
+
+ private String getCsvMetricsForSparkline() {
+ StringBuilder sb = new StringBuilder();
+ Log.debug("getCsvMetricsForSparkline.metricsDataList: " +
metricsDataList.size());
+ for (List<MeasurementDataNumericHighLowComposite> measurementData :
metricsDataList) {
+ for (int i = 0; i < measurementData.size(); i++) {
+ // take the last 20 values
+ if (i >= measurementData.size() - 20) {
+ if (!Double.isNaN(measurementData.get(i).getValue())) {
+ sb.append((int) measurementData.get(i).getValue());
+ sb.append(",");
+ }
+ }
+ }
+ if (sb.toString().endsWith(",")) {
+ sb.setLength(sb.length() - 1);
+ }
+ }
+ Log.debug("getCsvMetricsForSparkline: " + sb.toString());
+
+ return sb.toString();
+ }
+
+ protected String getMetricStringValue(MetricDisplayValue value) {
+ return (value != null) ? value.toString() : "";
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criterias for this datasource, just return null
+ return null;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, final
Criteria unused) {
+
+
GWTServiceLookup.getMeasurementScheduleService().findSchedulesForResourceAndType(resourceId,
+ DataType.MEASUREMENT, null, true, new
AsyncCallback<ArrayList<MeasurementSchedule>>() {
+ @Override
+ public void onSuccess(ArrayList<MeasurementSchedule>
measurementSchedules) {
+ int[] scheduleIds = new int[measurementSchedules.size()];
+ int i = 0;
+ for (MeasurementSchedule measurementSchedule : measurementSchedules)
{
+ scheduleIds[i++] = measurementSchedule.getId();
+ }
+
+ final CountDownLatch countDownLatch = CountDownLatch.create(2, new
Command() {
+
+ @Override
+ public void execute() {
+ response.setData(buildRecords(metricDisplaySummaries));
+ processResponse(request.getRequestId(), response);
+
+ new Timer() {
+
+ @Override
+ public void run() {
+ BrowserUtility.graphSparkLines();
+ }
+ }.schedule(150);
+ Log.debug("Finished CountdownLatch for metrics loaded:
" + metricsDataList.size());
+ }
+ });
+
+ retrieveResourceMetrics(resourceId, countDownLatch);
+
+
GWTServiceLookup.getMeasurementChartsService().getMetricDisplaySummariesForResource(resourceId,
+ scheduleIds,
measurementUserPrefs.getMetricRangePreferences().begin,
+ measurementUserPrefs.getMetricRangePreferences().end,
+ new
AsyncCallback<ArrayList<MetricDisplaySummary>>() {
+ @Override
+ public void
onSuccess(ArrayList<MetricDisplaySummary> metricDisplaySummaries) {
+ setMetricDisplaySummaries(metricDisplaySummaries);
+ countDownLatch.countDown();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Cannot
load metrics", caught);
+ countDownLatch.countDown();
+ }
+ }
+
+ );
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Cannot load
schedules", caught);
+ }
+ });
+ }
+
+ void setMetricDisplaySummaries(List<MetricDisplaySummary>
metricDisplaySummaries) {
+ this.metricDisplaySummaries = metricDisplaySummaries;
+ }
+
+ public void retrieveResourceMetrics(final Integer resourceId, final CountDownLatch
countDownLatch) {
+
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterId(resourceId);
+
+ //locate the resource
+ GWTServiceLookup.getResourceService().findResourceCompositesByCriteria(criteria,
+ new AsyncCallback<PageList<ResourceComposite>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.debug("Error retrieving resource resource composite for
resource [" + resourceId + "]:"
+ + caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(PageList<ResourceComposite>
resourceCompositePageList) {
+ if (!resourceCompositePageList.isEmpty()) {
+ final ResourceComposite resourceComposite =
resourceCompositePageList.get(0);
+ final Resource resource = resourceComposite.getResource();
+ // Load the fully fetched ResourceType.
+ ResourceType resourceType = resource.getResourceType();
+
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resourceType.getId(),
+
EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
+ new ResourceTypeRepository.TypeLoadedCallback() {
+ public void onTypesLoaded(ResourceType type) {
+ resource.setResourceType(type);
+ //metric definitions
+ Set<MeasurementDefinition> definitions =
type.getMetricDefinitions();
+
+ //build id mapping for measurementDefinition
instances Ex. Free Memory -> MeasurementDefinition[100071]
+ final HashMap<String, MeasurementDefinition>
measurementDefMap = new HashMap<String, MeasurementDefinition>();
+ for (MeasurementDefinition definition : definitions)
{
+
measurementDefMap.put(definition.getDisplayName(), definition);
+ }
+ //bundle definition ids for asynch call.
+ int[] definitionArrayIds = new
int[definitions.size()];
+ final String[] displayOrder = new
String[definitions.size()];
+ measurementDefMap.keySet().toArray(displayOrder);
+ //sort the charting data ex. Free Memory, Free Swap
Space,..System Load
+ Arrays.sort(displayOrder);
+
+ //organize definitionArrayIds for ordered request on
server.
+ int index = 0;
+ for (String definitionToDisplay : displayOrder) {
+ definitionArrayIds[index++] =
measurementDefMap.get(definitionToDisplay)
+ .getId();
+ }
+
+
GWTServiceLookup.getMeasurementDataService().findDataForResource(resourceId,
+ definitionArrayIds,
measurementUserPrefs.getMetricRangePreferences().begin,
+
measurementUserPrefs.getMetricRangePreferences().end, 60,
+ new
AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.warn("Error retrieving recent
metrics charting data for resource ["
+ + resourceId + "]:" +
caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(
+
List<List<MeasurementDataNumericHighLowComposite>> measurementDataList) {
+
+ if (!measurementDataList.isEmpty()) {
+ metricsDataList =
measurementDataList;
+ Log.debug("*** Setting
metricsDataList.size: "
+ + metricsDataList.size());
+ countDownLatch.countDown();
+ }
+ }
+ });
+
+ }
+ });
+ }
+ }
+ });
+
+ }
+}
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 8b9f327..5635d88 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
@@ -60,9 +60,9 @@ import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch;
*/
public class D3GraphListView extends AbstractD3GraphListView {
- private static int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
+ private static final int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
- private Resource resource;
+ private final Resource resource;
private Set<Integer> definitionIds = null;
private boolean useSummaryData = false;
private PageList<MeasurementOOBComposite> measurementOOBCompositeList;
@@ -91,7 +91,7 @@ public class D3GraphListView extends AbstractD3GraphListView {
return D3GraphListView.createSingleGraph(resource, measurementId, false);
}
- protected D3GraphListView(Resource resource, Set<Integer> definitionIds,
boolean showAvailabilityGraph) {
+ private D3GraphListView(Resource resource, Set<Integer> definitionIds, boolean
showAvailabilityGraph) {
super();
this.resource = resource;
commonConstructorSettings();
@@ -99,7 +99,7 @@ public class D3GraphListView extends AbstractD3GraphListView {
this.showAvailabilityGraph = showAvailabilityGraph;
}
- protected D3GraphListView(Resource resource, boolean showAvailabilityGraph) {
+ private D3GraphListView(Resource resource, boolean showAvailabilityGraph) {
super();
this.resource = resource;
this.showAvailabilityGraph = showAvailabilityGraph;
@@ -130,9 +130,7 @@ public class D3GraphListView extends AbstractD3GraphListView {
vLayout.setWidth100();
vLayout.setHeight100();
- if (resource != null) {
- queryAndBuildGraphs();
- }
+ queryAndBuildGraphs();
addMember(vLayout);
}
@@ -176,7 +174,7 @@ public class D3GraphListView extends AbstractD3GraphListView {
private void queryAndBuildGraphs() {
final long startTimer = System.currentTimeMillis();
- if (null != availabilityGraph) {
+ if (showAvailabilityGraph) {
queryAvailability(EntityContext.forResource(resource.getId()),
buttonBarDateTimeRangeEditor.getStartTime(),
buttonBarDateTimeRangeEditor.getEndTime(), null);
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableDataSource.java
deleted file mode 100644
index 57e62ab..0000000
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableDataSource.java
+++ /dev/null
@@ -1,335 +0,0 @@
-package
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.table;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Set;
-
-import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.DSRequest;
-import com.smartgwt.client.data.DSResponse;
-import com.smartgwt.client.data.Record;
-import com.smartgwt.client.widgets.grid.CellFormatter;
-import com.smartgwt.client.widgets.grid.ListGridField;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-
-import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.measurement.DataType;
-import org.rhq.core.domain.measurement.MeasurementDefinition;
-import org.rhq.core.domain.measurement.MeasurementSchedule;
-import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite;
-import org.rhq.core.domain.measurement.ui.MetricDisplaySummary;
-import org.rhq.core.domain.measurement.ui.MetricDisplayValue;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.resource.composite.ResourceComposite;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
-import org.rhq.enterprise.gui.coregui.client.util.BrowserUtility;
-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.RPCDataSource;
-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.preferences.MeasurementUserPreferences;
-
-/**
- * A simple data source to read in metric data summaries for a resource.
- * This doesn't support paging - everything is returned in one query. Since
- * the number of metrics per resource is relatively small (never more than tens of
them),
- * we just load them all in at once.
- *
- * @author John Mazzitelli
- * @author Mike Thompson
- * @todo: get rid of this once we have tested the new screen out
- */
-@Deprecated
-public class MetricsTableDataSource extends RPCDataSource<MetricDisplaySummary,
Criteria> {
-
- public static final String FIELD_SPARKLINE = "sparkline";
- public static final String FIELD_METRIC_LABEL = "label";
- public static final String FIELD_ALERT_COUNT = "alertCount";
- public static final String FIELD_MIN_VALUE = "min";
- public static final String FIELD_MAX_VALUE = "max";
- public static final String FIELD_AVG_VALUE = "avg";
- public static final String FIELD_LAST_VALUE = "last";
- public static final String FIELD_METRIC_DEF_ID = "defId";
- public static final String FIELD_METRIC_SCHED_ID = "schedId";
- public static final String FIELD_METRIC_UNITS = "units";
- public static final String FIELD_METRIC_NAME = "name";
- public static final String FIELD_RESOURCE_ID = "resourceId";
- private int resourceId;
- private List<MetricDisplaySummary> metricDisplaySummaries;
- private List<List<MeasurementDataNumericHighLowComposite>>
metricsDataList;
- private MeasurementUserPreferences measurementUserPrefs;
-
- public MetricsTableDataSource(int resourceId) {
- this.resourceId = resourceId;
- measurementUserPrefs = new
MeasurementUserPreferences(UserSessionManager.getUserPreferences());
- }
-
- /**
- * The view that contains the list grid which will display this datasource's data
will call this
- * method to get the field information which is used to control the display of the
data.
- *
- * @return list grid fields used to display the datasource data
- */
- public ArrayList<ListGridField> getListGridFields() {
- ArrayList<ListGridField> fields = new ArrayList<ListGridField>(7);
-
- ListGridField sparklineField = new ListGridField(FIELD_SPARKLINE,
"chart");
- sparklineField.setCellFormatter(new CellFormatter() {
- @Override
- public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
- if (value == null) {
- return "";
- }
- String contents = "<span id='sparkline_" + resourceId +
"-"
- + record.getAttributeAsInt(FIELD_METRIC_DEF_ID) + "'
class='dynamicsparkline' width='70' "
- + "values='" + record.getAttribute(FIELD_SPARKLINE) +
"'></span>";
- return contents;
-
- }
- });
-
- sparklineField.setWidth(80);
- fields.add(sparklineField);
-
- ListGridField nameField = new ListGridField(FIELD_METRIC_LABEL,
MSG.common_title_name());
- nameField.setWidth("30%");
- fields.add(nameField);
-
- ListGridField alertsField = new ListGridField(FIELD_ALERT_COUNT,
MSG.common_title_alerts());
- alertsField.setWidth("10%");
- fields.add(alertsField);
-
- ListGridField minField = new ListGridField(FIELD_MIN_VALUE,
MSG.view_resource_monitor_table_min());
- minField.setWidth("15%");
- fields.add(minField);
-
- ListGridField maxField = new ListGridField(FIELD_MAX_VALUE,
MSG.view_resource_monitor_table_max());
- maxField.setWidth("15%");
- fields.add(maxField);
-
- ListGridField avgField = new ListGridField(FIELD_AVG_VALUE,
MSG.view_resource_monitor_table_avg());
- avgField.setWidth("15%");
- fields.add(avgField);
-
- ListGridField lastField = new ListGridField(FIELD_LAST_VALUE,
MSG.view_resource_monitor_table_last());
- lastField.setWidth("15%");
- fields.add(lastField);
-
- return fields;
- }
-
- @Override
- public MetricDisplaySummary copyValues(Record from) {
- // we should never need this method - we only go in one direction
- // if we ever need this, just have copyValues store an "object"
attribute whose value is "from"
- // which this method then just reads out. Since we don't need this now, save
memory by not
- // keeping the MetricDisplayValue around
- return null;
- }
-
- @Override
- public ListGridRecord copyValues(MetricDisplaySummary from) {
- MeasurementUtility.formatSimpleMetrics(from);
-
- ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_SPARKLINE, getCsvMetricsForSparkline());
- record.setAttribute(FIELD_METRIC_LABEL, from.getLabel());
- record.setAttribute(FIELD_ALERT_COUNT, String.valueOf(from.getAlertCount()));
- record.setAttribute(FIELD_MIN_VALUE, getMetricStringValue(from.getMinMetric()));
- record.setAttribute(FIELD_MAX_VALUE, getMetricStringValue(from.getMaxMetric()));
- record.setAttribute(FIELD_AVG_VALUE, getMetricStringValue(from.getAvgMetric()));
- record.setAttribute(FIELD_LAST_VALUE,
getMetricStringValue(from.getLastMetric()));
- record.setAttribute(FIELD_METRIC_DEF_ID, from.getDefinitionId());
- record.setAttribute(FIELD_METRIC_SCHED_ID, from.getScheduleId());
- record.setAttribute(FIELD_METRIC_UNITS, from.getUnits());
- record.setAttribute(FIELD_METRIC_NAME, from.getMetricName());
- record.setAttribute(FIELD_RESOURCE_ID, resourceId);
- return record;
- }
-
- private String getCsvMetricsForSparkline() {
- StringBuilder sb = new StringBuilder();
- Log.debug("getCsvMetricsForSparkline.metricsDataList: " +
metricsDataList.size());
- for (List<MeasurementDataNumericHighLowComposite> measurementData :
metricsDataList) {
- for (int i = 0; i < measurementData.size(); i++) {
- // take the last 20 values
- if (i >= measurementData.size() - 20) {
- if (!Double.isNaN(measurementData.get(i).getValue())) {
- sb.append((int) measurementData.get(i).getValue());
- sb.append(",");
- }
- }
- }
- if (sb.toString().endsWith(",")) {
- sb.setLength(sb.length() - 1);
- }
- }
- Log.debug("getCsvMetricsForSparkline: " + sb.toString());
-
- return sb.toString();
- }
-
- protected String getMetricStringValue(MetricDisplayValue value) {
- return (value != null) ? value.toString() : "";
- }
-
- @Override
- protected Criteria getFetchCriteria(DSRequest request) {
- // we don't use criterias for this datasource, just return null
- return null;
- }
-
- @Override
- protected void executeFetch(final DSRequest request, final DSResponse response, final
Criteria unused) {
-
-
GWTServiceLookup.getMeasurementScheduleService().findSchedulesForResourceAndType(resourceId,
- DataType.MEASUREMENT, null, true, new
AsyncCallback<ArrayList<MeasurementSchedule>>() {
- @Override
- public void onSuccess(ArrayList<MeasurementSchedule>
measurementSchedules) {
- int[] scheduleIds = new int[measurementSchedules.size()];
- int i = 0;
- for (MeasurementSchedule measurementSchedule : measurementSchedules)
{
- scheduleIds[i++] = measurementSchedule.getId();
- }
-
- final CountDownLatch countDownLatch = CountDownLatch.create(2, new
Command() {
-
- @Override
- public void execute() {
- response.setData(buildRecords(metricDisplaySummaries));
- processResponse(request.getRequestId(), response);
-
- new Timer() {
-
- @Override
- public void run() {
- BrowserUtility.graphSparkLines();
- }
- }.schedule(150);
- Log.debug("*** Finished CountdownLatch for metrics
loaded: " + metricsDataList.size());
- }
- });
-
- retrieveResourceMetrics(resourceId, countDownLatch);
-
-
GWTServiceLookup.getMeasurementChartsService().getMetricDisplaySummariesForResource(resourceId,
- scheduleIds,
measurementUserPrefs.getMetricRangePreferences().begin,
- measurementUserPrefs.getMetricRangePreferences().end,
- new
AsyncCallback<ArrayList<MetricDisplaySummary>>() {
- @Override
- public void
onSuccess(ArrayList<MetricDisplaySummary> metricDisplaySummaries) {
- setMetricDisplaySummaries(metricDisplaySummaries);
- countDownLatch.countDown();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Cannot
load metrics", caught);
- countDownLatch.countDown();
- }
- }
-
- );
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Cannot load
schedules", caught);
- }
- });
- }
-
- void setMetricDisplaySummaries(List<MetricDisplaySummary>
metricDisplaySummaries) {
- this.metricDisplaySummaries = metricDisplaySummaries;
- }
-
- public void retrieveResourceMetrics(final Integer resourceId, final CountDownLatch
countDownLatch) {
-
- ResourceCriteria criteria = new ResourceCriteria();
- criteria.addFilterId(resourceId);
-
- //locate the resource
- GWTServiceLookup.getResourceService().findResourceCompositesByCriteria(criteria,
- new AsyncCallback<PageList<ResourceComposite>>() {
- @Override
- public void onFailure(Throwable caught) {
- Log.debug("Error retrieving resource resource composite for
resource [" + resourceId + "]:"
- + caught.getMessage());
- }
-
- @Override
- public void onSuccess(PageList<ResourceComposite>
resourceCompositePageList) {
- if (!resourceCompositePageList.isEmpty()) {
- final ResourceComposite resourceComposite =
resourceCompositePageList.get(0);
- final Resource resource = resourceComposite.getResource();
- // Load the fully fetched ResourceType.
- ResourceType resourceType = resource.getResourceType();
-
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resourceType.getId(),
-
EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
- new ResourceTypeRepository.TypeLoadedCallback() {
- public void onTypesLoaded(ResourceType type) {
- resource.setResourceType(type);
- //metric definitions
- Set<MeasurementDefinition> definitions =
type.getMetricDefinitions();
-
- //build id mapping for measurementDefinition
instances Ex. Free Memory -> MeasurementDefinition[100071]
- final HashMap<String, MeasurementDefinition>
measurementDefMap = new HashMap<String, MeasurementDefinition>();
- for (MeasurementDefinition definition : definitions)
{
-
measurementDefMap.put(definition.getDisplayName(), definition);
- }
- //bundle definition ids for asynch call.
- int[] definitionArrayIds = new
int[definitions.size()];
- final String[] displayOrder = new
String[definitions.size()];
- measurementDefMap.keySet().toArray(displayOrder);
- //sort the charting data ex. Free Memory, Free Swap
Space,..System Load
- Arrays.sort(displayOrder);
-
- //organize definitionArrayIds for ordered request on
server.
- int index = 0;
- for (String definitionToDisplay : displayOrder) {
- definitionArrayIds[index++] =
measurementDefMap.get(definitionToDisplay)
- .getId();
- }
-
-
GWTServiceLookup.getMeasurementDataService().findDataForResource(resourceId,
- definitionArrayIds,
measurementUserPrefs.getMetricRangePreferences().begin,
-
measurementUserPrefs.getMetricRangePreferences().end, 60,
- new
AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() {
- @Override
- public void onFailure(Throwable caught) {
- Log.warn("Error retrieving recent
metrics charting data for resource ["
- + resourceId + "]:" +
caught.getMessage());
- }
-
- @Override
- public void onSuccess(
-
List<List<MeasurementDataNumericHighLowComposite>> measurementDataList) {
-
- if (!measurementDataList.isEmpty()) {
- metricsDataList =
measurementDataList;
- Log.debug("*** Setting
metricsDataList.size: "
- + metricsDataList.size());
- countDownLatch.countDown();
- }
- }
- });
-
- }
- });
- }
- }
- });
-
- }
-}