|
JMeter example source code file (MonitorGraph.java)
The JMeter MonitorGraph.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.Color; import java.awt.Graphics; import java.util.Iterator; import java.util.List; import javax.swing.JComponent; import org.apache.jmeter.samplers.Clearable; /** * MonitorGraph will draw the performance history of a given server. It displays * 4 lines: * <p> */ public class MonitorGraph extends JComponent implements MonitorGuiListener, Clearable { private static final long serialVersionUID = 240L; private final MonitorAccumModel model; private MonitorModel current; private boolean drawHealth = true; private boolean drawLoad = true; private boolean drawMemory = true; private boolean drawThread = true; private boolean drawYgrid = true; private boolean drawXgrid = true; /** * Needed for Serialization tests. * @deprecated Only for use in unit testing */ @Deprecated public MonitorGraph() { // log.warn("Only for use in unit testing"); model = null; } public MonitorGraph(MonitorAccumModel model) { this.model = model; repaint(); } public void setHealth(boolean health) { this.drawHealth = health; } public void setLoad(boolean load) { this.drawLoad = load; } public void setMem(boolean mem) { this.drawMemory = mem; } public void setThread(boolean thread) { this.drawThread = thread; } /** * The method will first check to see if the graph is visible. If it is, it * will repaint the graph. */ public void updateGui(final MonitorModel model) { if (this.isShowing()) { this.current = model; repaint(); } } /** * painComponent is responsible for drawing the actual graph. This is * because of how screen works. Tried to use clipping, but I don't * understand it well enough to get the desired effect. */ @Override public void paintComponent(Graphics g) { super.paintComponent(g); if (this.current != null) { synchronized (model) { List<MonitorModel> samples = model.getAllSamples(this.current.getURL()); int size = samples.size(); synchronized (samples) { Iterator<MonitorModel> e; if (size > getWidth()) { e = samples.listIterator(size - getWidth()); } else { e = samples.iterator(); } MonitorModel last = null; for (int i = 0; e.hasNext(); i++) { MonitorModel s = e.next(); if (last == null) { last = s; } drawSample(i, s, g, last); last = s; } } } } } /** * updateGui() will call repaint */ public void updateGui() { repaint(); } /** * clear will repaint the graph */ public void clearData() { paintComponent(getGraphics()); this.repaint(); } private void drawSample(int x, MonitorModel model, Graphics g, MonitorModel last) { double width = getWidth(); double height = getHeight() - 10.0; int xaxis = (int) (width * (x / width)); int lastx = (int) (width * ((x - 1) / width)); // draw grid only when x is 1. If we didn't // the grid line would draw over the data // lines making it look bad. if (drawYgrid && x == 1) { int q1 = (int) (height * 0.25); int q2 = (int) (height * 0.50); int q3 = (int) (height * 0.75); g.setColor(Color.lightGray); g.drawLine(0, q1, getWidth(), q1); g.drawLine(0, q2, getWidth(), q2); g.drawLine(0, q3, getWidth(), q3); } if (drawXgrid && x == 1) { int x1 = (int) (width * 0.25); int x2 = (int) (width * 0.50); int x3 = (int) (width * 0.75); g.drawLine(x1, 0, x1, getHeight()); g.drawLine(x2, 0, x2, getHeight()); g.drawLine(x3, 0, x3, getHeight()); g.drawLine(getWidth(), 0, getWidth(), getHeight()); } if (drawHealth) { int hly = (int) (height - (height * (model.getHealth() / 3.0))); int lasty = (int) (height - (height * (last.getHealth() / 3.0))); g.setColor(Color.green); g.drawLine(lastx, lasty, xaxis, hly); } if (drawLoad) { int ldy = (int) (height - (height * (model.getLoad() / 100.0))); int lastldy = (int) (height - (height * (last.getLoad() / 100.0))); g.setColor(Color.blue); g.drawLine(lastx, lastldy, xaxis, ldy); } if (drawMemory) { int mmy = (int) (height - (height * (model.getMemload() / 100.0))); int lastmmy = (int) (height - (height * (last.getMemload() / 100.0))); g.setColor(Color.orange); g.drawLine(lastx, lastmmy, xaxis, mmy); } if (drawThread) { int thy = (int) (height - (height * (model.getThreadload() / 100.0))); int lastthy = (int) (height - (height * (last.getThreadload() / 100.0))); g.setColor(Color.red); g.drawLine(lastx, lastthy, xaxis, thy); } } } Other JMeter examples (source code examples)Here is a short list of links related to this JMeter MonitorGraph.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.