|
What this is
Other links
The source code// $Header: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/reporters/FileReporter.java,v 1.15 2004/02/19 00:12:34 sebb Exp $ /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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.reporters; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.text.DecimalFormat; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger; /** * This class loads data from a saved file and displays * statistics about it. * * * @author Tom Schneider * @version $Revision: 1.15 $ */ public class FileReporter extends JPanel { transient private static Logger log = LoggingManager.getLoggerForClass(); Hashtable data = new Hashtable(); /** initalize a file reporter from a file */ public void init(String file) throws IOException { File datafile = new File(file); BufferedReader reader = null; try { if (datafile.canRead()) { reader = new BufferedReader(new FileReader(datafile)); } else { JOptionPane.showMessageDialog( null, "The file you specified cannot be read.", "Information", JOptionPane.INFORMATION_MESSAGE); return; } String line; while ((line = reader.readLine()) != null) { try { line = line.trim(); if (line.startsWith("#") || line.length() == 0) { continue; } int splitter = line.lastIndexOf(' '); String key = line.substring(0, splitter); int len = line.length() - 1; Integer value = null; if (line.charAt(len) == ',') { value = new Integer( line.substring(splitter + 1, len)); } else { value = new Integer( line.substring(splitter + 1)); } Vector v = getData(key); if (v == null) { v = new Vector(); this.data.put(key, v); } v.addElement(value); } catch (NumberFormatException nfe) { log.error("This line could not be parsed: " + line, nfe); } catch (Exception e) { log.error("This line caused a problem: " + line, e); } } } finally { if (reader != null) reader.close(); } showPanel(); } public Vector getData(String key) { return (Vector) data.get(key); } /** * Show main panel with length, graph, and stats. */ public void showPanel() { JFrame f = new JFrame("Data File Report"); setLayout(new BorderLayout()); graphPanel gp = new graphPanel(data); add(gp, "Center"); add(gp.getStats(), BorderLayout.EAST); add(gp.getLegend(), BorderLayout.NORTH); f.setSize(500, 300); f.getContentPane().add(this); f.show(); } } /** * Graph panel generates all the panels for this reporter. * Data is organized based on thread name in a hashtable. * The data itself is a Vector of Integer objects */ class graphPanel extends JPanel { //boolean autoScale = true; Hashtable data; Vector keys = new Vector(); Vector colorList = new Vector(); public graphPanel() {} public graphPanel(Hashtable data) { this.data = data; Enumeration e = data.keys(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); keys.addElement(key); } for (int a = 0x33; a < 0xFF; a += 0x66) { for (int b = 0x33; b < 0xFF; b += 0x66) { for (int c = 0x33; c < 0xFF; c += 0x66) { colorList.addElement(new Color(a, b, c)); } } } } /** * Get the maximum for all the data. */ public float getMax() { float maxValue = 0; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); Vector temp = (Vector) data.get(key); for (int j = 0; j < temp.size(); j++) { float f = ((Integer) temp.elementAt(j)).intValue(); maxValue = Math.max(f, maxValue); } } return (float) (maxValue + maxValue * 0.1); } /** * Get the minimum for all the data. */ public float getMin() { float minValue = 9999999; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); Vector temp = (Vector) data.get(key); for (int j = 0; j < temp.size(); j++) { float f = ((Integer) temp.elementAt(j)).intValue(); minValue = Math.min(f, minValue); } } return (float) (minValue - minValue * 0.1); } /** * Get the legend panel. */ public JPanel getLegend() { JPanel main = new JPanel(); GridBagLayout g = new GridBagLayout(); main.setLayout(g); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(3, 3, 3, 3); c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; c.gridheight = 1; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); JLabel colorSwatch = new JLabel(" "); colorSwatch.setBackground( (Color) colorList.elementAt(t % colorList.size())); colorSwatch.setOpaque(true); c.gridx = 1; c.gridy = t; g.setConstraints(colorSwatch, c); main.add(colorSwatch); JLabel name = new JLabel(key); c.gridx = 2; c.gridy = t; g.setConstraints(name, c); main.add(name); } return main; } /** * Get the stats panel. */ public JPanel getStats() { int total = 0; float totalValue = 0; float maxValue = 0; float minValue = 999999; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); Vector temp = (Vector) data.get(key); for (int j = 0; j < temp.size(); j++) { float f = ((Integer) temp.elementAt(j)).intValue(); minValue = Math.min(f, minValue); maxValue = Math.max(f, maxValue); totalValue += f; total++; } } float averageValue = totalValue / total; JPanel main = new JPanel(); GridBagLayout g = new GridBagLayout(); main.setLayout(g); DecimalFormat df = new DecimalFormat("#0.0"); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(3, 6, 3, 6); c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; c.gridheight = 1; JLabel count = new JLabel("Count: " + total); c.gridx = 1; c.gridy = 1; g.setConstraints(count, c); JLabel min = new JLabel("Min: " + df.format(new Float(minValue))); c.gridx = 1; c.gridy = 2; g.setConstraints(min, c); JLabel max = new JLabel("Max: " + df.format(new Float(maxValue))); c.gridx = 1; c.gridy = 3; g.setConstraints(max, c); JLabel average = new JLabel("Average: " + df.format(new Float(averageValue))); c.gridx = 1; c.gridy = 4; g.setConstraints(average, c); main.add(count); main.add(min); main.add(max); main.add(average); return main; } /** * Gets the size of the biggest Vector. */ public int getDataWidth() { int size = 0; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); Vector v = (Vector) data.get(key); size = Math.max(size, v.size()); } return size; } /** * Draws the graph. */ public void update(Graphics g) { // setup drawing area int base = 10; g.setColor(Color.white); g.fillRect(0, 0, getSize().width, getSize().height); int width = getSize().width; int height = getSize().height; float maxValue = getMax(); float minValue = getMin(); // draw grid g.setColor(Color.gray); int dataWidth = getDataWidth(); int increment = Math.round((width - 1) / (dataWidth - 1)); /* for (int t = 0; t < dataWidth; t++) { g.drawLine(t * increment, 0, t * increment, height); }*/ int yIncrement = Math.round(((float) height - (1 + base)) / (10 - 1)); /* for (int t = 0; t < 10; t++) { g.drawLine(0, height - t * yIncrement, width, height - t * yIncrement); }*/ // draw axis for (int t = 1; t < dataWidth; t += (dataWidth / 25 + 1)) { g.drawString( (new Integer(t)).toString(), t * increment + 2, height - 2); } float incrementValue = (maxValue - minValue) / (10 - 1); for (int t = 0; t < 10; t++) { g.drawString( new Integer(Math.round(minValue + (t * incrementValue))) .toString(), 2, height - t * yIncrement - 2 - base); } // draw data lines int start = 0; for (int t = 0; t < keys.size(); t++) { String key = (String) keys.elementAt(t); Vector v = (Vector) data.get(key); start = 0; g.setColor((Color) colorList.elementAt(t % colorList.size())); for (int i = 0; i < v.size() - 1; i++) { float y1 = (float) ((Integer) v.elementAt(i)).intValue(); float y2 = (float) ((Integer) v.elementAt(i + 1)).intValue(); y1 = y1 - minValue; y2 = y2 - minValue; int Y1 = Math.round((height * y1) / (maxValue - minValue)); int Y2 = Math.round((height * y2) / (maxValue - minValue)); Y1 = height - Y1 - base; Y2 = height - Y2 - base; g.drawLine(start, Y1, start + increment, Y2); start += increment; } } } public void paint(Graphics g) { update(g); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 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.