|
JMeter example source code file (SplineVisualizer.java)
The JMeter SplineVisualizer.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.visualizers;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
import org.apache.jorphan.gui.layout.VerticalLayout;
/**
* This class implements a statistical analyser that takes samples to process a
* Spline interpolated curve. Currently, it tries to look mostly like the
* GraphVisualizer.
*
*/
public class SplineVisualizer extends AbstractVisualizer implements ImageVisualizer, GraphListener, Clearable {
private static final long serialVersionUID = 240L;
private static final String SUFFIX_MS = " ms"; //$NON-NLS-1$
protected final Color BACKGROUND_COLOR = getBackground();
protected final Color MINIMUM_COLOR = new Color(0F, 0.5F, 0F);
protected final Color MAXIMUM_COLOR = new Color(0.9F, 0F, 0F);
protected final Color AVERAGE_COLOR = new Color(0F, 0F, 0.75F);
protected final Color INCOMING_COLOR = Color.black;
protected final int NUMBERS_TO_DISPLAY = 4;
protected final boolean FILL_UP_WITH_ZEROS = false;
private transient SplineGraph graph = null;
private JLabel minimumLabel = null;
private JLabel maximumLabel = null;
private JLabel averageLabel = null;
private JLabel incomingLabel = null;
private JLabel minimumNumberLabel = null;
private JLabel maximumNumberLabel = null;
private JLabel averageNumberLabel = null;
private JLabel incomingNumberLabel = null;
private transient SplineModel model;
public SplineVisualizer() {
super();
model = new SplineModel();
graph = new SplineGraph();
this.model.setListener(this);
setGUI();
}
public void add(SampleResult res) {
model.add(res);
}
public String getLabelResource() {
return "spline_visualizer_title"; //$NON-NLS-1$
}
public void updateGui(Sample s) {
updateGui();
}
public void clearData() {
model.clearData();
}
private void setGUI() {
Color backColor = BACKGROUND_COLOR;
this.setBackground(backColor);
this.setLayout(new BorderLayout());
// MAIN PANEL
JPanel mainPanel = new JPanel();
Border margin = new EmptyBorder(10, 10, 5, 10);
mainPanel.setBorder(margin);
mainPanel.setLayout(new VerticalLayout(5, VerticalLayout.BOTH));
// NAME
mainPanel.add(makeTitlePanel());
maximumLabel = new JLabel(JMeterUtils.getResString("spline_visualizer_maximum")); //$NON-NLS-1$
maximumLabel.setForeground(MAXIMUM_COLOR);
maximumLabel.setBackground(backColor);
averageLabel = new JLabel(JMeterUtils.getResString("spline_visualizer_average")); //$NON-NLS-1$
averageLabel.setForeground(AVERAGE_COLOR);
averageLabel.setBackground(backColor);
incomingLabel = new JLabel(JMeterUtils.getResString("spline_visualizer_incoming")); //$NON-NLS-1$
incomingLabel.setForeground(INCOMING_COLOR);
incomingLabel.setBackground(backColor);
minimumLabel = new JLabel(JMeterUtils.getResString("spline_visualizer_minimum")); //$NON-NLS-1$
minimumLabel.setForeground(MINIMUM_COLOR);
minimumLabel.setBackground(backColor);
maximumNumberLabel = new JLabel("0 ms"); //$NON-NLS-1$
maximumNumberLabel.setHorizontalAlignment(JLabel.RIGHT);
maximumNumberLabel.setForeground(MAXIMUM_COLOR);
maximumNumberLabel.setBackground(backColor);
averageNumberLabel = new JLabel("0 ms"); //$NON-NLS-1$
averageNumberLabel.setHorizontalAlignment(JLabel.RIGHT);
averageNumberLabel.setForeground(AVERAGE_COLOR);
averageNumberLabel.setBackground(backColor);
incomingNumberLabel = new JLabel("0 ms"); //$NON-NLS-1$
incomingNumberLabel.setHorizontalAlignment(JLabel.RIGHT);
incomingNumberLabel.setForeground(INCOMING_COLOR);
incomingNumberLabel.setBackground(backColor);
minimumNumberLabel = new JLabel("0 ms"); //$NON-NLS-1$
minimumNumberLabel.setHorizontalAlignment(JLabel.RIGHT);
minimumNumberLabel.setForeground(MINIMUM_COLOR);
minimumNumberLabel.setBackground(backColor);
// description Panel
JPanel labelPanel = new JPanel();
labelPanel.setLayout(new GridLayout(0, 1));
labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20));
labelPanel.setBackground(backColor);
labelPanel.add(maximumLabel);
labelPanel.add(averageLabel);
if (model.SHOW_INCOMING_SAMPLES) {
labelPanel.add(incomingLabel);
}
labelPanel.add(minimumLabel);
// number Panel
JPanel numberPanel = new JPanel();
numberPanel.setLayout(new GridLayout(0, 1));
numberPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20));
numberPanel.setBackground(backColor);
numberPanel.add(maximumNumberLabel);
numberPanel.add(averageNumberLabel);
if (model.SHOW_INCOMING_SAMPLES) {
numberPanel.add(incomingNumberLabel);
}
numberPanel.add(minimumNumberLabel);
// information display Panel
JPanel infoPanel = new JPanel();
infoPanel.setLayout(new BorderLayout());
infoPanel.add(labelPanel, BorderLayout.CENTER);
infoPanel.add(numberPanel, BorderLayout.EAST);
this.add(mainPanel, BorderLayout.NORTH);
this.add(infoPanel, BorderLayout.WEST);
this.add(graph, BorderLayout.CENTER);
// everyone is free to swing on its side :)
// add(infoPanel, BorderLayout.EAST);
}
public void updateGui() {
repaint();
synchronized (this) {
setMinimum(model.getMinimum());
setMaximum(model.getMaximum());
setAverage(model.getAverage());
setIncoming(model.getCurrent());
}
}
@Override
public String toString() {
return "Show the samples analysis as a Spline curve";
}
private String formatMeasureToDisplay(long measure) {
String numberString = String.valueOf(measure);
if (FILL_UP_WITH_ZEROS) {
for (int i = numberString.length(); i < NUMBERS_TO_DISPLAY; i++) {
numberString = "0" + numberString; //$NON-NLS-1$
}
}
return numberString;
}
private void setMinimum(long n) {
String text = this.formatMeasureToDisplay(n) + SUFFIX_MS;
this.minimumNumberLabel.setText(text);
}
private void setMaximum(long n) {
String text = this.formatMeasureToDisplay(n) + SUFFIX_MS;
this.maximumNumberLabel.setText(text);
}
private void setAverage(long n) {
String text = this.formatMeasureToDisplay(n) + SUFFIX_MS;
this.averageNumberLabel.setText(text);
}
private void setIncoming(long n) {
String text = this.formatMeasureToDisplay(n) + SUFFIX_MS;
this.incomingNumberLabel.setText(text);
}
public JPanel getControlPanel() {// TODO - is this needed?
return this;
}
public Image getImage() {
Image result = graph.createImage(graph.getWidth(), graph.getHeight());
graph.paintComponent(result.getGraphics());
return result;
}
/**
* Component showing a Spline curve.
*
*/
public class SplineGraph extends JComponent {
private static final long serialVersionUID = 240L;
private final Color WAITING_COLOR = Color.darkGray;
private int lastWidth = -1;
private int lastHeight = -1;
private int[] plot = null;
public SplineGraph() {
}
/**
* Clear the Spline graph and get ready for the next wave.
*/
public void clear() {
lastWidth = -1;
lastHeight = -1;
plot = null;
this.repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension dimension = this.getSize();
int width = dimension.width;
int height = dimension.height;
if (model.getDataCurve() == null) {
g.setColor(this.getBackground());
g.fillRect(0, 0, width, height);
g.setColor(WAITING_COLOR);
g.drawString(JMeterUtils.getResString("spline_visualizer_waitingmessage"), //$NON-NLS-1$
(width - 120) / 2, height - (height - 12) / 2);
return;
}
// boolean resized = true;
if (width == lastWidth && height == lastHeight) {
// dimension of the SplineGraph is the same
// resized = false;
} else {
// dimension changed
// resized = true;
lastWidth = width;
lastHeight = height;
}
this.plot = model.getDataCurve().getPlots(width, height); // rounds!
int n = plot.length;
int curY = plot[0];
for (int i = 1; i < n; i++) {
g.setColor(Color.black);
g.drawLine(i - 1, height - curY - 1, i, height - plot[i] - 1);
curY = plot[i];
}
}
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter SplineVisualizer.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.