|
JMeter example source code file (MonitorPerformancePanel.java)
The JMeter MonitorPerformancePanel.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.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 static final long serialVersionUID = 240L; private JScrollPane TREEPANE; private JPanel GRAPHPANEL; private JTree SERVERTREE; private DefaultTreeModel TREEMODEL; private final MonitorGraph GRAPH; private DefaultMutableTreeNode ROOTNODE; private final HashMap<String, DefaultMutableTreeNode> SERVERMAP; private final MonitorAccumModel MODEL; private SampleResult ROOTSAMPLE; // Don't make these static, otherwise language change does not work private final String LEGEND_HEALTH = JMeterUtils.getResString("monitor_legend_health"); //$NON-NLS-1$ private final String LEGEND_LOAD = JMeterUtils.getResString("monitor_legend_load"); //$NON-NLS-1$ private final String LEGEND_MEM = JMeterUtils.getResString("monitor_legend_memory_per"); //$NON-NLS-1$ private final String LEGEND_THREAD = JMeterUtils.getResString("monitor_legend_thread_per"); //$NON-NLS-1$ private final ImageIcon LEGEND_HEALTH_ICON = JMeterUtils.getImage("monitor-green-legend.gif"); //$NON-NLS-1$ private final ImageIcon LEGEND_LOAD_ICON = JMeterUtils.getImage("monitor-blue-legend.gif"); //$NON-NLS-1$ private final ImageIcon LEGEND_MEM_ICON = JMeterUtils.getImage("monitor-orange-legend.gif"); //$NON-NLS-1$ private final ImageIcon LEGEND_THREAD_ICON = JMeterUtils.getImage("monitor-red-legend.gif"); //$NON-NLS-1$ private final String GRID_LABEL_TOP = JMeterUtils.getResString("monitor_label_left_top"); //$NON-NLS-1$ private final String GRID_LABEL_MIDDLE = JMeterUtils.getResString("monitor_label_left_middle"); //$NON-NLS-1$ private final String GRID_LABEL_BOTTOM = JMeterUtils.getResString("monitor_label_left_bottom"); //$NON-NLS-1$ private final String GRID_LABEL_HEALTHY = JMeterUtils.getResString("monitor_label_right_healthy"); //$NON-NLS-1$ // private final String GRID_LABEL_ACTIVE = JMeterUtils.getResString("monitor_label_right_active"); //$NON-NLS-1$ // private final String GRID_LABEL_WARNING = JMeterUtils.getResString("monitor_label_right_warning"); //$NON-NLS-1$ private final String GRID_LABEL_DEAD = JMeterUtils.getResString("monitor_label_right_dead"); //$NON-NLS-1$ private final String PERF_TITLE = JMeterUtils.getResString("monitor_performance_title"); //$NON-NLS-1$ private final String SERVER_TITLE = JMeterUtils.getResString("monitor_performance_servers"); //$NON-NLS-1$ private Font plaintext = new Font("plain", Font.TRUETYPE_FONT, 10); //$NON-NLS-1$ /** * * @deprecated Only for use in unit testing */ @Deprecated public MonitorPerformancePanel() { // log.warn("Only for use in unit testing"); SERVERMAP = null; MODEL = null; GRAPH = null; } /** * */ public MonitorPerformancePanel(MonitorAccumModel model, MonitorGraph graph) { super(); this.SERVERMAP = new HashMap<String, DefaultMutableTreeNode>(); 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. */ private void init() {// called from ctor, so must not be overridable 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 */ private JPanel createLegend() { Dimension lsize = new Dimension(130, 18); JPanel legend = new JPanel(); legend.setLayout(new FlowLayout()); 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); JLabel health = new JLabel(LEGEND_HEALTH); health.setFont(plaintext); health.setPreferredSize(lsize); health.setIcon(LEGEND_HEALTH_ICON); legend.add(health); return legend; } /** * Method is responsible for creating the left grid labels. * * @return JPanel */ private 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 */ private 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 synchronized 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(); if (node != null) { 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 clearData() { this.SERVERMAP.clear(); ROOTNODE.removeAllChildren(); SERVERTREE.updateUI(); GRAPH.clearData(); } } Other JMeter examples (source code examples)Here is a short list of links related to this JMeter MonitorPerformancePanel.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.