|
JMeter example source code file (AbstractChart.java)
The JMeter AbstractChart.java source code
/*
* 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.testelement;
import java.awt.image.BufferedImage;
import java.util.List;
import javax.swing.JComponent;
import org.apache.jmeter.report.DataSet;
import org.apache.jmeter.report.ReportChart;
import org.apache.jmeter.visualizers.SamplingStatCalculator;
import org.apache.jorphan.util.JOrphanUtils;
/**
* The general idea of the chart graphs information for a table.
* A chart can only be generated from a specific table, though more
* than one chart can be generated from a single table.
*
*/
public abstract class AbstractChart extends AbstractTestElement implements ReportChart {
private static final long serialVersionUID = 240L;
public static final String REPORT_CHART_X_AXIS = "ReportChart.chart.x.axis";
public static final String REPORT_CHART_Y_AXIS = "ReportChart.chart.y.axis";
public static final String REPORT_CHART_X_LABEL = "ReportChart.chart.x.label";
public static final String REPORT_CHART_Y_LABEL = "ReportChart.chart.y.label";
public static final String REPORT_CHART_TITLE = "ReportChart.chart.title";
public static final String REPORT_CHART_CAPTION = "ReportChart.chart.caption";
public static final String REPORT_CHART_WIDTH = "ReportChart.chart.width";
public static final String REPORT_CHART_HEIGHT = "ReportChart.chart.height";
public static final int DEFAULT_WIDTH = 350;
public static final int DEFAULT_HEIGHT = 350;
public static final String X_DATA_FILENAME_LABEL = "Filename";
public static final String X_DATA_DATE_LABEL = "Date";
public static final String[] X_LABELS = { X_DATA_FILENAME_LABEL, X_DATA_DATE_LABEL };
protected BufferedImage image = null;
public AbstractChart() {
super();
}
public String getXAxis() {
return getPropertyAsString(REPORT_CHART_X_AXIS);
}
public String getFormattedXAxis() {
String text = getXAxis();
if (text.indexOf('.') > -1) {
text = text.substring(text.indexOf('.') + 1);
text = JOrphanUtils.replaceAllChars(text,'_'," ");
}
return text;
}
public void setXAxis(String field) {
setProperty(REPORT_CHART_X_AXIS,field);
}
public String getYAxis() {
return getPropertyAsString(REPORT_CHART_Y_AXIS);
}
public void setYAxis(String scale) {
setProperty(REPORT_CHART_Y_AXIS,scale);
}
public String getXLabel() {
return getPropertyAsString(REPORT_CHART_X_LABEL);
}
/**
* The X data labels should be either the filename, date or some
* other series of values
* @param label
*/
public void setXLabel(String label) {
setProperty(REPORT_CHART_X_LABEL,label);
}
public String getYLabel() {
return getPropertyAsString(REPORT_CHART_Y_LABEL);
}
public void setYLabel(String label) {
setProperty(REPORT_CHART_Y_LABEL,label);
}
/**
* The title is a the name for the chart. A page link will
* be generated using the title. The title will also be
* used for a page index.
* @return chart title
*/
public String getTitle() {
return getPropertyAsString(REPORT_CHART_TITLE);
}
/**
* The title is a the name for the chart. A page link will
* be generated using the title. The title will also be
* used for a page index.
* @param title
*/
public void setTitle(String title) {
setProperty(REPORT_CHART_TITLE,title);
}
/**
* The caption is a description for the chart explaining
* what the chart means.
* @return caption
*/
public String getCaption() {
return getPropertyAsString(REPORT_CHART_CAPTION);
}
/**
* The caption is a description for the chart explaining
* what the chart means.
* @param caption
*/
public void setCaption(String caption) {
setProperty(REPORT_CHART_CAPTION,caption);
}
/**
* if no width is set, the default is returned
* @return width
*/
public int getWidth() {
int w = getPropertyAsInt(REPORT_CHART_WIDTH);
if (w <= 0) {
return DEFAULT_WIDTH;
} else {
return w;
}
}
/**
* set the width of the graph
* @param width
*/
public void setWidth(String width) {
setProperty(REPORT_CHART_WIDTH,String.valueOf(width));
}
/**
* if the height is not set, the default is returned
* @return height
*/
public int getHeight() {
int h = getPropertyAsInt(REPORT_CHART_HEIGHT);
if (h <= 0) {
return DEFAULT_HEIGHT;
} else {
return h;
}
}
/**
* set the height of the graph
* @param height
*/
public void setHeight(String height) {
setProperty(REPORT_CHART_HEIGHT,String.valueOf(height));
}
/**
* Subclasses will need to implement the method by doing the following:
* 1. get the x and y axis
* 2. filter the table data
* 3. pass the data to the chart library
* 4. return the generated chart
*/
public abstract JComponent renderChart(List<DataSet> data);
/**
* this makes it easy to get the bufferedImage
* @return image
*/
public BufferedImage getBufferedImage() {
return this.image;
}
/**
* in case an user wants set the bufferdImage
* @param img
*/
public void setBufferedImage(BufferedImage img) {
this.image = img;
}
/**
* convienance method for getting the selected value. Rather than use
* Method.invoke(Object,Object[]), it's simpler to just check which
* column is selected and call the method directly.
* @param stat
* @return value
*/
public double getValue(SamplingStatCalculator stat) {
if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_50_PERCENT)) {
return stat.getPercentPoint(.50).doubleValue();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_90_PERCENT)){
return stat.getPercentPoint(.90).doubleValue();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_ERROR_RATE)) {
return stat.getErrorPercentage();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MAX)) {
return stat.getMax().doubleValue();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MEAN)) {
return stat.getMean();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MEDIAN)) {
return stat.getMedian().doubleValue();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MIN)) {
return stat.getMin().doubleValue();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_RESPONSE_RATE)) {
return stat.getRate();
} else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_TRANSFER_RATE)) {
// return the pagesize divided by 1024 to get kilobytes
return stat.getKBPerSecond();
} else {
return Double.NaN;
}
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter AbstractChart.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.