/* * 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; import org.apache.jmeter.report.core.Sample; import org.apache.jmeter.util.JMeterUtils; /** * <p> * The class ApdexSummaryConsumer provides a consumer that calculates Apdex for * each sample name. * </p> * * <p> * T and F thresholds for each sample is defined by the thresholds selector * field. * </p> * * @since 3.0 */ public class ApdexSummaryConsumer extends AbstractSummaryConsumer<ApdexSummaryData> { private ThresholdSelector thresholdSelector; /** * Gets the APDEX threshold selector. * * @return the threshold selector */ public final ThresholdSelector getThresholdSelector() { return thresholdSelector; } /** * Sets the APDEX threshold selector. * * @param thresholdSelector * the APDEX threshold selector to set */ public final void setThresholdSelector(ThresholdSelector thresholdSelector) { this.thresholdSelector = thresholdSelector; } public ApdexSummaryConsumer() { super(true); } @Override protected ListResultData createDataResult(String key, ApdexSummaryData data) { ListResultData result = new ListResultData(); result.addResult(new ValueResultData(Double.valueOf(getApdex(data)))); ApdexThresholdsInfo thresholdsInfo = data.getApdexThresholdInfo(); result.addResult(new ValueResultData(Long.valueOf(thresholdsInfo .getSatisfiedThreshold()))); result.addResult(new ValueResultData(Long.valueOf(thresholdsInfo .getToleratedThreshold()))); result.addResult(new ValueResultData(key != null ? key : JMeterUtils .getResString("reportgenerator_summary_total"))); return result; } /* * (non-Javadoc) * * @see * org.apache.jmeter.report.processor.AbstractSummaryConsumer#getKeyFromSample * (org.apache.jmeter.report.core.Sample) */ @Override protected String getKeyFromSample(Sample sample) { return sample.getName(); } /* * (non-Javadoc) * * @see * org.apache.jmeter.report.processor.AbstractSummaryConsumer#updateData * (org.apache.jmeter.report.processor.AbstractSummaryConsumer.SummaryInfo, * org.apache.jmeter.report.core.Sample) */ @Override protected void updateData(SummaryInfo info, Sample sample) { if(sample.isEmptyController()) { return; } // Initialize overall data if they don't exist SummaryInfo overallInfo = getOverallInfo(); ApdexSummaryData overallData = overallInfo.getData(); if (overallData == null) { overallData = new ApdexSummaryData(getThresholdSelector().select( null)); overallInfo.setData(overallData); } // Initialize info data if they don't exist ApdexSummaryData data = info.getData(); if (data == null) { data = new ApdexSummaryData(getThresholdSelector().select( sample.getName())); info.setData(data); } // Increment the total count of samples with the current name data.incTotalCount(); // Increment the total count of samples overallData.incTotalCount(); // Process only succeeded samples if (sample.getSuccess()) { long elapsedTime = sample.getElapsedTime(); // Increment the counters depending on the elapsed time. ApdexThresholdsInfo thresholdsInfo = data.getApdexThresholdInfo(); if (elapsedTime <= thresholdsInfo.getSatisfiedThreshold()) { data.incSatisfiedCount(); } else if (elapsedTime <= thresholdsInfo.getToleratedThreshold()) { data.incToleratedCount(); } // Increment the overall counters depending on the elapsed time. ApdexThresholdsInfo overallThresholdsInfo = overallData .getApdexThresholdInfo(); if (elapsedTime <= overallThresholdsInfo.getSatisfiedThreshold()) { overallData.incSatisfiedCount(); } else if (elapsedTime <= overallThresholdsInfo .getToleratedThreshold()) { overallData.incToleratedCount(); } } } private double getApdex(ApdexSummaryData data) { return (data.getSatisfiedCount() + (double) data.getToleratedCount() / 2) / data.getTotalCount(); } /* * (non-Javadoc) * * @see * org.apache.jmeter.report.processor.AbstractSummaryConsumer#createResultTitles * () */ @Override protected ListResultData createResultTitles() { ListResultData titles = new ListResultData(); titles.addResult(new ValueResultData(JMeterUtils .getResString("reportgenerator_summary_apdex_apdex"))); titles.addResult(new ValueResultData(JMeterUtils .getResString("reportgenerator_summary_apdex_satisfied"))); titles.addResult(new ValueResultData(JMeterUtils .getResString("reportgenerator_summary_apdex_tolerated"))); titles.addResult(new ValueResultData(JMeterUtils .getResString("reportgenerator_summary_apdex_samplers"))); return titles; } }