/* * RHQ Management Platform * Copyright (C) 2005-2008 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.core.domain.measurement.ui; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Represents a metric that may be displayed in a list context. All fields refer to display needs in a list context in * the monitoring UI. */ public abstract class BaseMetricDisplay extends MeasurementSummary implements java.io.Serializable, Comparable { private static final long serialVersionUID = 1L; private Long beginTimeFrame; private Long endTimeFrame; private String label; // the human readable name as it is defined in the definition/plugin descriptor private String metricName; // the metric "name" aka the "property" as it is defined in the definition/plugin descriptor private String units; private Integer scheduleId; private Integer definitionId; private Integer collectionType; private Boolean showNumberCollecting; private int numberCollecting = -1; private String metricSource; private int metricSourceId; private String description; private Map<String, MetricDisplayValue> metrics; protected static final List<String> attrKeyList = Arrays.asList(MetricDisplayConstants.attrKey); /** * Constructor for MetricDisplaySummary. */ public BaseMetricDisplay() { super(); metrics = new HashMap<String, MetricDisplayValue>(); } public double[] getMetricValueDoubles() { List<Double> values = new ArrayList<Double>(); for (Map.Entry<String, MetricDisplayValue> ent : metrics.entrySet()) { if ((ent.getKey() != null) && (ent.getValue() != null)) { values.add(ent.getValue().getValue()); } } int i = 0; double[] rv = new double[values.size()]; for (Double v : values) { rv[i] = v; ++i; } return rv; } public String[] getMetricKeys() { List<String> keys = new ArrayList<String>(); for (Map.Entry<String, MetricDisplayValue> ent : metrics.entrySet()) { if ((ent.getKey() != null) && (ent.getValue() != null)) { keys.add(ent.getKey()); } } int i = 0; String[] rv = new String[keys.size()]; for (String key : keys) { rv[i] = key; ++i; } return rv; } public void setMetric(String key, MetricDisplayValue value) { if (!attrKeyList.contains(key)) { throw new IllegalArgumentException(key + " is not a known metric value"); } metrics.put(key, value); } public MetricDisplayValue getMetric(String key) { if (key == null) { throw new IllegalArgumentException("'null' is not a valid metric key"); } return metrics.get(key); } public Map<String, MetricDisplayValue> getMetrics() { return metrics; } public void setMetrics(Map<String, MetricDisplayValue> metrics) { this.metrics = metrics; } public MetricDisplayValue getMinMetric() { MetricDisplayValue mdv = getMetric(MetricDisplayConstants.MIN_KEY); if (mdv == null) { throw new IllegalArgumentException("No valid metric key: " + MetricDisplayConstants.MIN_KEY); } return mdv; } public MetricDisplayValue getMaxMetric() { MetricDisplayValue mdv = getMetric(MetricDisplayConstants.MAX_KEY); if (mdv == null) { throw new IllegalArgumentException("No valid metric key: " + MetricDisplayConstants.MAX_KEY); } return mdv; } public MetricDisplayValue getAvgMetric() { MetricDisplayValue mdv = getMetric(MetricDisplayConstants.AVERAGE_KEY); if (mdv == null) { throw new IllegalArgumentException("No valid metric key: " + MetricDisplayConstants.AVERAGE_KEY); } return mdv; } public MetricDisplayValue getLastMetric() { MetricDisplayValue mdv = getMetric(MetricDisplayConstants.LAST_KEY); if (mdv == null) { throw new IllegalArgumentException("No valid metric key: " + MetricDisplayConstants.LAST_KEY); } return mdv; } public MetricDisplayValue getSummaryMetric() { MetricDisplayValue mdv = getMetric(MetricDisplayConstants.SUMMARY_KEY); if (mdv == null) { throw new IllegalArgumentException("No valid metric key: " + MetricDisplayConstants.SUMMARY_KEY); } return mdv; } /** * Method getBeginTimeFrame. All metrics displayed are within a timeframe. The beginning of that timeframe is * represented as the number of epoch seconds at which the timeframe commences, this method returns that Long value. * * @return Long */ public Long getBeginTimeFrame() { return this.beginTimeFrame; } /** * Method setBeginTimeFrame. All metrics displayed are within a timeframe. The beginning of that timeframe is * represented as the number of epoch seconds at which the timeframe commences, this method sets that Long value. * * @param beginTimeFrame The beginTimeFrame to set */ public void setBeginTimeFrame(Long beginTimeFrame) { this.beginTimeFrame = beginTimeFrame; } /** * Method getEndTimeFrame. All metrics displayed are within a timeframe. The end of that timeframe is represented as * the number of epoch seconds at which the timeframe is finished, this method returns that Long value. * * @return Long */ public Long getEndTimeFrame() { return this.endTimeFrame; } /** * Method setEndTimeFrame. All metrics displayed are within a timeframe. The end of that timeframe is represented as * the number of epoch seconds at which the timeframe is finished, this method sets that Long value. * * @param endTimeFrame The endTimeFrame to set */ public void setEndTimeFrame(Long endTimeFrame) { this.endTimeFrame = endTimeFrame; } /** * The label of the metric as it is displayed, perhaps the "alias". * Note that this is NOT the official name of the metric - the name (or the "property" as it * is called in the metric definition within the plugin descriptor) is obtains via {@link #getMetricName()}. * * @return String */ public String getLabel() { return this.label; } /** * Method setLabel. The name of the metric as it is displayed, perhaps the "alias" * * @param label The label to set */ public void setLabel(String label) { this.label = label; } /** * Method getIntervalUnits. Returns the label for the units of the metric (if not intrinsic to the metric itself) * measurement * * @return String */ public String getUnits() { return this.units; } /** * Method setIntervalUnits. Sets the label for the units of the metric (if not intrinsic to the metric itself) * measurement * * @param units The units to set */ public void setUnits(String units) { this.units = units; } /** * Get the collection type for the metrics. This value matches to MeasurementConstants.COLL_TYPE_* */ public Integer getCollectionType() { return this.collectionType; } public void setCollectionType(Integer collectionType) { this.collectionType = collectionType; } /** * @return Integer */ public Integer getScheduleId() { return scheduleId; } /** * Sets the scheduleId. * * @param scheduleId The scheduleId to set */ public void setScheduleId(Integer scheduleId) { this.scheduleId = scheduleId; } public Integer getDefinitionId() { return definitionId; } public void setDefinitionId(Integer definitionId) { this.definitionId = definitionId; } /** * Returns the showNumberCollecting. * * @return boolean */ public Boolean getShowNumberCollecting() { return showNumberCollecting; } public String getMetricSource() { return metricSource; } public void setMetricSource(String string) { metricSource = string; } /** * This is the metric name, or as it is known in the plugin descriptor, the metric "property". * This is the value that is used by the plugin itself to determine what property to probe * to get the measurement. Note that this is specifically not the metric label. */ public String getMetricName() { return metricName; } public void setMetricName(String name) { metricName = name; } public int getMetricSourceId() { return metricSourceId; } public void setMetricSourceId(int id) { metricSourceId = id; } /** * Sets the showNumberCollecting. * * @param showNumberCollecting The showNumberCollecting to set */ public void setShowNumberCollecting(Boolean showNumberCollecting) { this.showNumberCollecting = showNumberCollecting; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { StringBuffer sb = new StringBuffer(BaseMetricDisplay.class.getName()); sb.append("(label=").append(label); sb.append(",beginTimeFrame=").append(beginTimeFrame); sb.append(",endTimeFrame=").append(endTimeFrame); sb.append(",units=").append(units); sb.append(",collectionType=").append(collectionType); sb.append(",metricSource=").append(metricSource); sb.append(",scheduleId=").append(scheduleId); sb.append(",showNumberCollecting=").append(showNumberCollecting); sb.append("metrics["); for (String anAttrKey : MetricDisplayConstants.attrKey) { sb.append("\n").append(anAttrKey).append("=").append(metrics.get(anAttrKey)); } sb.append("]\n)"); return sb.toString(); } /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(Object arg0) { if (arg0 instanceof BaseMetricDisplay) { BaseMetricDisplay to = (BaseMetricDisplay) arg0; return this.getLabel().compareTo(to.getLabel()); } throw new IllegalArgumentException("Cannot compare to non-BaseMetricDisplay object: " + arg0); } /** * @return the numberCollecting */ public int getNumberCollecting() { return numberCollecting; } /** * @param numberCollecting the numberCollecting to set */ public void setNumberCollecting(int numberCollecting) { this.numberCollecting = numberCollecting; } }