|
JMeter example source code file (MonitorHealthVisualizer.java)
The JMeter MonitorHealthVisualizer.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.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.Image;
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.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
import org.apache.jorphan.gui.JLabeledTextField;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
/**
* For performance reasons, I am using tabs for the visualizers. Since a
* visualizer is heavy weight, I don not want to have two separate result
* collectors rather the same information. Instead, I would rather have the
* visualizer be the container for the data and simply pass the data to child
* JComponents. In the future, we may want to add email alerts as a third tab.
*/
public class MonitorHealthVisualizer extends AbstractVisualizer implements ImageVisualizer, ItemListener,
GraphListener, Clearable {
private static final long serialVersionUID = 240L;
private static final Logger log = LoggingManager.getLoggerForClass();
private static final String CONNECTOR_PREFIX = "connector.prefix"; // $NON-NLS-1$
private static final String CONNECTOR_PREFIX_DEFAULT = ""; // $NON-NLS-1$
private static final String BUFFER = "monitor.buffer.size"; // $NON-NLS-1$
private MonitorTabPane tabPane;
private MonitorHealthPanel healthPane;
private MonitorPerformancePanel perfPane;
private MonitorAccumModel model;
private MonitorGraph graph;
private JLabeledTextField prefixField;
/**
* Constructor for the GraphVisualizer object.
*/
public MonitorHealthVisualizer() {
this.isStats = true;
initModel();
init();
}
@Override
public void configure(TestElement el) {
super.configure(el);
prefixField.setText(el.getPropertyAsString(CONNECTOR_PREFIX, CONNECTOR_PREFIX_DEFAULT));
model.setPrefix(prefixField.getText());
}
@Override
public void modifyTestElement(TestElement c) {
super.modifyTestElement(c);
c.setProperty(CONNECTOR_PREFIX,prefixField.getText(),CONNECTOR_PREFIX_DEFAULT);
model.setPrefix(prefixField.getText());
}
private void initModel() {
model = new MonitorAccumModel();
graph = new MonitorGraph(model);
model.setBufferSize(JMeterUtils.getPropDefault(BUFFER, 800));
}
public String getLabelResource() {
return "monitor_health_title"; // $NON-NLS-1$
}
/**
* Because of the unique requirements of a monitor We have to handle the
* results differently than normal GUI components. A monitor should be able
* to run for a very long time without eating up all the memory.
*/
public void add(SampleResult res) {
model.addSample(res);
try {
collector.recordStats(this.model.getLastSample().cloneMonitorStats());
} catch (Exception e) {
// for now just swallow the exception
log.debug("StatsModel was null", e);
}
}
public Image getImage() {
Image result = graph.createImage(this.getWidth(), this.getHeight());
Graphics image = result.getGraphics();
graph.paintComponent(image);
return result;
}
public void itemStateChanged(ItemEvent e) {
}
public synchronized void updateGui() {
this.repaint();
}
public synchronized void updateGui(Sample s) {
this.repaint();
}
/**
* Initialize the GUI.
*/
private void init() {
this.setLayout(new BorderLayout());
// MAIN PANEL
Border margin = new EmptyBorder(10, 10, 5, 10);
this.setBorder(margin);
// Add the main panel and the graph
this.add(this.makeTitlePanel(), BorderLayout.NORTH);
this.createTabs();
prefixField = new JLabeledTextField(JMeterUtils.getResString("monitor_label_prefix")); // $NON-NLS-1$
add(prefixField, BorderLayout.SOUTH);
}
private void createTabs() {
tabPane = new MonitorTabPane();
createHealthPane(tabPane);
createPerformancePane(tabPane);
this.add(tabPane, BorderLayout.CENTER);
}
/**
* Create the JPanel
*
* @param pane
*/
private void createHealthPane(MonitorTabPane pane) {
healthPane = new MonitorHealthPanel(model);
pane.addTab(JMeterUtils.getResString("monitor_health_tab_title"), healthPane); // $NON-NLS-1$
}
/**
* Create the JSplitPane for the performance history
*
* @param pane
*/
private void createPerformancePane(MonitorTabPane pane) {
perfPane = new MonitorPerformancePanel(model, graph);
pane.addTab(JMeterUtils.getResString("monitor_performance_tab_title"), perfPane); // $NON-NLS-1$
}
/**
* Clears the MonitorAccumModel.
*/
public void clearData() {
this.model.clearData();
this.healthPane.clearData();
this.perfPane.clearData();
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter MonitorHealthVisualizer.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.