Package org.apache.jmeter.visualizers

Source Code of org.apache.jmeter.visualizers.MonitorPerformancePanel

// $Header: /home/cvs/jakarta-jmeter/src/monitor/components/org/apache/jmeter/visualizers/MonitorPerformancePanel.java,v 1.5.2.1 2004/10/11 00:55:46 sebb Exp $
/*
* Copyright 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.visualizers;

import java.util.HashMap;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;


import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.util.JMeterUtils;

public class MonitorPerformancePanel extends JSplitPane
  implements TreeSelectionListener, MonitorListener, Clearable
{

  private JScrollPane TREEPANE;
  private JPanel GRAPHPANEL;
  private JTree SERVERTREE;
  private DefaultTreeModel TREEMODEL;
  private MonitorGraph GRAPH;
  private DefaultMutableTreeNode ROOTNODE;
  private HashMap SERVERMAP;
  private MonitorAccumModel MODEL;
  private SampleResult ROOTSAMPLE;
 
  public static final String LEGEND_HEALTH =
    JMeterUtils.getResString("monitor_legend_health");
  public static final String LEGEND_LOAD =
    JMeterUtils.getResString("monitor_legend_load");
  public static final String LEGEND_MEM =
    JMeterUtils.getResString("monitor_legend_memory_per");
  public static final String LEGEND_THREAD =
    JMeterUtils.getResString("monitor_legend_thread_per");
  public static final ImageIcon LEGEND_HEALTH_ICON =
    JMeterUtils.getImage("monitor-green-legend.gif");
  public static final ImageIcon LEGEND_LOAD_ICON =
    JMeterUtils.getImage("monitor-blue-legend.gif");
  public static final ImageIcon LEGEND_MEM_ICON =
    JMeterUtils.getImage("monitor-orange-legend.gif");
  public static final ImageIcon LEGEND_THREAD_ICON =
    JMeterUtils.getImage("monitor-red-legend.gif");
  public static final String GRID_LABEL_TOP =
    JMeterUtils.getResString("monitor_label_left_top");
  public static final String GRID_LABEL_MIDDLE =
    JMeterUtils.getResString("monitor_label_left_middle");
  public static final String GRID_LABEL_BOTTOM =
    JMeterUtils.getResString("monitor_label_left_bottom");
  public static final String GRID_LABEL_HEALTHY =
    JMeterUtils.getResString("monitor_label_right_healthy");
  public static final String GRID_LABEL_ACTIVE =
    JMeterUtils.getResString("monitor_label_right_active");
  public static final String GRID_LABEL_WARNING =
    JMeterUtils.getResString("monitor_label_right_warning");
  public static final String GRID_LABEL_DEAD =
    JMeterUtils.getResString("monitor_label_right_dead");
 
  public static final String PERF_TITLE =
    JMeterUtils.getResString("monitor_performance_title");
  public static final String SERVER_TITLE =
    JMeterUtils.getResString("monitor_performance_servers");

  protected Font plaintext = new Font("plain", Font.TRUETYPE_FONT, 10);

  /**
     *
     * @deprecated Only for use in unit testing
     */
    public MonitorPerformancePanel()
  {
      //log.warn("Only for use in unit testing");
    }

    /**
     *
     */
    public MonitorPerformancePanel(MonitorAccumModel model, MonitorGraph graph)
    {
        super();
        this.SERVERMAP = new HashMap();
        this.MODEL = model;
        this.MODEL.addListener(this);
        this.GRAPH = graph;
        init();
    }

  /**
   * init() will create all the necessary swing panels,
   * labels and icons for the performance panel.
   */
  protected void init(){
    ROOTSAMPLE = new SampleResult();
    ROOTSAMPLE.setSampleLabel(SERVER_TITLE);
    ROOTSAMPLE.setSuccessful(true);
    ROOTNODE = new DefaultMutableTreeNode(ROOTSAMPLE);
    TREEMODEL = new DefaultTreeModel(ROOTNODE);
    SERVERTREE = new JTree(TREEMODEL);
    SERVERTREE.getSelectionModel().setSelectionMode(
      TreeSelectionModel.SINGLE_TREE_SELECTION);
    SERVERTREE.addTreeSelectionListener(this);
    SERVERTREE.setShowsRootHandles(true);
    TREEPANE = new JScrollPane(SERVERTREE);
    TREEPANE.setPreferredSize(new Dimension(150,200));
    this.add(TREEPANE,JSplitPane.LEFT);
    this.setDividerLocation(0.18);
 
    JPanel right = new JPanel();
    right.setLayout(new BorderLayout());
    JLabel title = new JLabel(" " + PERF_TITLE);
    title.setPreferredSize(new Dimension(200,40));
    GRAPHPANEL = new JPanel();
    GRAPHPANEL.setLayout(new BorderLayout());
    GRAPHPANEL.setMaximumSize(
      new Dimension(MODEL.getBufferSize(),MODEL.getBufferSize()));
    GRAPHPANEL.setBackground(Color.white);
    GRAPHPANEL.add(GRAPH,BorderLayout.CENTER);
    right.add(GRAPHPANEL,BorderLayout.CENTER);
   
    right.add(title,BorderLayout.NORTH);
    right.add(createLegend(),BorderLayout.SOUTH);
    right.add(createLeftGridLabels(),BorderLayout.WEST);
    right.add(createRightGridLabels(),BorderLayout.EAST);
    this.add(right,JSplitPane.RIGHT);   
  }
 
  /**
   * Method will create the legends at the bottom of
   * the performance tab explaining the meaning of
   * each line.
   * @return JPanel
   */
  public JPanel createLegend(){
    Dimension lsize = new Dimension(130,18);
   
    JPanel legend = new JPanel();
    legend.setLayout(new FlowLayout());
    JLabel health = new JLabel(LEGEND_HEALTH);
    health.setFont(plaintext);
    health.setPreferredSize(lsize);
    health.setIcon(LEGEND_HEALTH_ICON);
    legend.add(health);
   
    JLabel load = new JLabel(LEGEND_LOAD);
    load.setFont(plaintext);
    load.setPreferredSize(lsize);
    load.setIcon(LEGEND_LOAD_ICON);
    legend.add(load);
   
    JLabel mem = new JLabel(LEGEND_MEM);
    mem.setFont(plaintext);
    mem.setPreferredSize(lsize);
    mem.setIcon(LEGEND_MEM_ICON);
    legend.add(mem);
   
    JLabel thd = new JLabel(LEGEND_THREAD);
    thd.setFont(plaintext);
    thd.setPreferredSize(lsize);
    thd.setIcon(LEGEND_THREAD_ICON);
    legend.add(thd);
    return legend;
  }

  /**
   * Method is responsible for creating the left
   * grid labels.
   * @return JPanel
   */ 
  public JPanel createLeftGridLabels(){
    Dimension lsize = new Dimension(33,20);
    JPanel labels = new JPanel();
    labels.setLayout(new BorderLayout());
   
    JLabel top = new JLabel(" " + GRID_LABEL_TOP);
    top.setFont(plaintext);
    top.setPreferredSize(lsize);
    labels.add(top,BorderLayout.NORTH);
   
    JLabel mid = new JLabel(" " + GRID_LABEL_MIDDLE);
    mid.setFont(plaintext);
    mid.setPreferredSize(lsize);
    labels.add(mid,BorderLayout.CENTER);
   
    JLabel bottom = new JLabel(" " + GRID_LABEL_BOTTOM);
    bottom.setFont(plaintext);
    bottom.setPreferredSize(lsize);
    labels.add(bottom,BorderLayout.SOUTH);
    return labels;
  }
 
  /**
   * Method is responsible for creating the grid labels
   * on the right for "healthy" and "dead"
   * @return JPanel
   */
  public JPanel createRightGridLabels(){
    JPanel labels = new JPanel();
    labels.setLayout(new BorderLayout());
    labels.setPreferredSize(new Dimension(40,GRAPHPANEL.getWidth() - 100));
    Dimension lsize = new Dimension(40,20);
    JLabel h = new JLabel(GRID_LABEL_HEALTHY);
    h.setFont(plaintext);
    h.setPreferredSize(lsize);
    labels.add(h,BorderLayout.NORTH);
   
    JLabel d = new JLabel(GRID_LABEL_DEAD);
    d.setFont(plaintext);
    d.setPreferredSize(lsize);
    labels.add(d,BorderLayout.SOUTH);
    return labels;
  }
 
  /**
   * MonitorAccumModel will call this method to notify
   * the component data has changed.
   */
  public void addSample(MonitorModel model){
    if (!SERVERMAP.containsKey(model.getURL())){
      DefaultMutableTreeNode newnode =
        new DefaultMutableTreeNode(model);
      newnode.setAllowsChildren(false);
      SERVERMAP.put(model.getURL(),newnode);
      ROOTNODE.add(newnode);
      this.TREEPANE.updateUI();
    }
    DefaultMutableTreeNode node =
      (DefaultMutableTreeNode) SERVERTREE.getLastSelectedPathComponent();
    Object usrobj = node.getUserObject();
    if (usrobj instanceof MonitorModel){
      GRAPH.updateGui((MonitorModel)usrobj);
    }
  }
 
  /**
   * When the user selects a different node in the
   * tree, we get the selected node. From the node,
   * we get the UserObject used to create the
   * treenode in the constructor.
   */
  public void valueChanged(TreeSelectionEvent e)
  {
    // we check to see if the lastSelectedPath is null
    // after we clear, it would return null
    if (SERVERTREE.getLastSelectedPathComponent() != null){
      DefaultMutableTreeNode node =
        (DefaultMutableTreeNode) SERVERTREE.getLastSelectedPathComponent();
      Object usrobj = node.getUserObject();
      if ( usrobj != null && usrobj instanceof MonitorModel){
        MonitorModel mo = (MonitorModel)usrobj;
        GRAPH.updateGui(mo);
        this.updateUI();
      }
      TREEPANE.updateUI();
    }
  }
 
  /**
   * clear will remove all child nodes from the ROOTNODE,
   * clear the HashMap, update the graph and jpanel for
   * the server tree.
   */
  public void clear(){
    this.SERVERMAP.clear();
    ROOTNODE.removeAllChildren();
    SERVERTREE.updateUI();
    GRAPH.clear();
  }
}
TOP

Related Classes of org.apache.jmeter.visualizers.MonitorPerformancePanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.