package kg.apc.jmeter.vizualizers;
import java.text.DecimalFormatSymbols;
import kg.apc.charting.AbstractGraphRow;
import kg.apc.charting.rows.GraphRowAverages;
import kg.apc.charting.rows.GraphRowOverallAverages;
import kg.apc.jmeter.JMeterPluginsUtils;
import kg.apc.jmeter.graphs.AbstractVsThreadVisualizer;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jorphan.gui.RateRenderer;
public class ThroughputVsThreadsGui
extends AbstractVsThreadVisualizer
{
/**
*
*/
public ThroughputVsThreadsGui()
{
super();
graphPanel.getGraphObject().setyAxisLabelRenderer(new CustomRateRenderer("#.0"));
graphPanel.getGraphObject().setYAxisLabel("Number of estimated transactions /sec");
}
@Override
public String getLabelResource()
{
return this.getClass().getSimpleName();
}
@Override
public String getStaticLabel()
{
return JMeterPluginsUtils.prefixLabel("Transaction Throughput vs Threads");
}
@Override
public void add(SampleResult res)
{
if (!isSampleIncluded(res)) {
return;
}
long time = res.getTime();
if (time < 1)
{
return;
}
super.add(res);
String label = res.getSampleLabel();
String averageLabel = "Average " + res.getSampleLabel();
GraphRowAverages row = (GraphRowAverages) model.get(label);
GraphRowOverallAverages avgRow = (GraphRowOverallAverages) model.get(averageLabel);
if(row == null || avgRow == null)
{
row = (GraphRowAverages) getNewRow(model, AbstractGraphRow.ROW_AVERAGES, label, AbstractGraphRow.MARKER_SIZE_SMALL , false, false, false, true, false);
avgRow = (GraphRowOverallAverages) getNewRow(model, AbstractGraphRow.ROW_OVERALL_AVERAGES, averageLabel, AbstractGraphRow.MARKER_SIZE_BIG , false, true, false, false, row.getColor(), false);
}
int allThreads = getCurrentThreadCount(res);
double throughput = (double) allThreads * 1000.0d / time;
row.add(allThreads, throughput);
avgRow.add(allThreads, throughput);
graphPanel.getGraphObject().setCurrentX(allThreads);
updateGui(null);
}
@Override
protected JSettingsPanel createSettingsPanel()
{
return new JSettingsPanel(this,
JSettingsPanel.GRADIENT_OPTION |
JSettingsPanel.CURRENTX_OPTION |
JSettingsPanel.MAXY_OPTION |
JSettingsPanel.HIDE_NON_REP_VALUES_OPTION);
}
@Override
public String getWikiPage() {
return "TransactionThroughputVsThreads";
}
private static class CustomRateRenderer
extends RateRenderer
{
private String zeroLabel;
public CustomRateRenderer(String format)
{
super(format);
zeroLabel = "0" + new DecimalFormatSymbols().getDecimalSeparator() + "0/sec";
}
@Override
public void setValue(Object value)
{
if (value != null && (value instanceof Double) && ((Double)value).doubleValue() == 0)
{
setText(zeroLabel);
} else
{
super.setValue(value);
}
}
}
}