/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.report.processor.graph; import java.util.HashMap; import java.util.Map; import org.apache.jmeter.report.processor.Aggregator; import org.apache.jmeter.report.processor.AggregatorFactory; /** * The class SeriesData helps to store series data in a graph. * * @since 3.0 */ public class SeriesData { /** The regular groupData. */ private final HashMap<Double, Aggregator> aggregators = new HashMap<>(); /** The keys aggregator for aggregated keys seriesData. */ private final Aggregator keysAggregator; /** The values aggregator for aggregated keys seriesData. */ private final Aggregator valuesAggregator; /** Indicate whether the current series is produced from controller samples. */ private final boolean isControllersSeries; /** * Indicate whether the current series is an overall aggregation of other * series. */ private final boolean isOverallSeries; /** The count of samples of this series. */ private long count = 0L; /** * Gets the groupData. * * @return the groupData */ public final Map<Double, Aggregator> getAggregatorInfo() { return aggregators; } /** * Gets the keys aggregator of aggregated keys seriesData. * * @return the keys aggregator */ public final Aggregator getKeysAggregator() { return keysAggregator; } /** * Gets the values aggregator of aggregated keys seriesData. * * @return the values aggregator */ public final Aggregator getValuesAggregator() { return valuesAggregator; } /** * Checks if the current series is built from controller samples. * * @return true, if the current series is built from controller samples; * false otherwise */ public final boolean isControllersSeries() { return isControllersSeries; } /** * Checks if the current series is an overall aggregation of other series. * * @return true, if the current series is an overall aggregation of other * series; false otherwise */ public final boolean isOverallSeries() { return isOverallSeries; } /** * Gets the count of samples. * * @return the count of samples */ public final long getCount() { return count; } /** * Instantiates a new data seriesData. * * @param factory * the factory * @param hasAggregatedKey * the has aggregated key * @param isControllersSeries * the flag using to indicate if the current series is built from * controller samples * @param isOverallSeries * flag to indicate whether the current series is an aggregation of * other series */ public SeriesData(AggregatorFactory factory, boolean hasAggregatedKey, boolean isControllersSeries, boolean isOverallSeries) { if (hasAggregatedKey) { keysAggregator = factory.createKeyAggregator(); valuesAggregator = factory.createAggregatedKeyValueAggregator(); } else { keysAggregator = null; valuesAggregator = null; } this.isControllersSeries = isControllersSeries; this.isOverallSeries = isOverallSeries; } /** * Increment the count of samples. */ public void incrementCount() { count++; } public void clear() { aggregators.clear(); count = 0L; if (keysAggregator != null) { keysAggregator.reset(); } if (valuesAggregator != null) { valuesAggregator.reset(); } } }