/* * 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, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.core.domain.measurement; import java.io.Serializable; import java.util.LinkedHashSet; import java.util.Set; import org.jetbrains.annotations.NotNull; import org.rhq.core.domain.measurement.calltime.CallTimeData; /** * A report of measurement information. When a plugin collects measurement data that is emitted from a monitored * resource, it will store that measurement data in an instance of this type. * <p/> * <p>This report has an optimized serialization strategy.</p> * * @author Greg Hinkle * @author Ian Springer */ public class MeasurementReport implements Serializable { private static final long serialVersionUID = 1; /* * instead of using synchronized collection wrappers - which won't GWT-compile - we can use the synchronized * modifier on the various methods that access these collections */ private Set<MeasurementDataNumeric> measurementNumericData = new LinkedHashSet<MeasurementDataNumeric>(); private Set<MeasurementDataTrait> measurementTraitData = new LinkedHashSet<MeasurementDataTrait>(); private Set<CallTimeData> callTimeData = new LinkedHashSet<CallTimeData>(); private long collectionTime; /** * Adds the given piece of numeric data to this report. Items are added to this report's list of numeric data in order. * That is, the order in which you add multiple pieces of numeric data is the same order in which you get them * in the list via {@link #getNumericData()}. * * @param value the measurement data to be added */ public synchronized void addData(MeasurementDataNumeric value) { measurementNumericData.add(value); // note, duplicates will be silently ignored } /** * Adds the given piece of trait data to this report. Items are added to this report's list of trait data in order. * That is, the order in which you add multiple pieces of trait data is the same order in which you get them * in the list via {@link #getTraitData()}. * * @param value the measurement data to be added */ public synchronized void addData(MeasurementDataTrait value) { measurementTraitData.add(value); // note, duplicates will be silently ignored } /** * Adds the given call-time data to this report. Items are added to this report's list of call-time data in order. That is, * the order in which you add multiple pieces of call-time data is the same order in which you get them in the list * via {@link #getCallTimeData()}. * * @param data the call-time data to be added */ public synchronized void addData(CallTimeData data) { this.callTimeData.add(data); } /** * Returns the set of all numeric data items in this report. The data items are ordered in the set in the same order * in which they were {@link #addData(MeasurementDataNumeric) added}. * * @return the list of all the numeric data items in this report */ public synchronized Set<MeasurementDataNumeric> getNumericData() { return measurementNumericData; } /** * Returns the set of all trait data items in this report. The data items are ordered in the set in the same order * in which they were {@link #addData(MeasurementDataTrait) added}. * * @return the list of all the trait data items in this report */ public synchronized Set<MeasurementDataTrait> getTraitData() { return measurementTraitData; } /** * Returns the entire list of all call-time data items in this report. The data items are ordered in the set in the * same order in which they were {@link #addData(CallTimeData) added}. * * @return the list of all the call-time data items in this report */ @NotNull public synchronized Set<CallTimeData> getCallTimeData() { return callTimeData; } /** * Returns the total number of data items (numeric metrics, traits, or call-time datums) in this report. * * @return the total number of data items (numeric metrics, traits, or call-time datums) in this report */ public synchronized long getDataCount() { return this.measurementNumericData.size() + this.measurementTraitData.size() + this.callTimeData.size(); } public long getCollectionTime() { return collectionTime; } public void setCollectionTime(long collectionTime) { this.collectionTime = collectionTime; } public void incrementCollectionTime(long collectionTime) { this.collectionTime += collectionTime; } }