1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sf.jour.rt.swingmonitor;
22
23 import java.awt.BorderLayout;
24 import java.awt.Color;
25 import java.text.DecimalFormat;
26 import java.text.SimpleDateFormat;
27 import java.util.Iterator;
28
29 import javax.swing.BorderFactory;
30
31 import net.sf.jour.statistic.Accumulation;
32 import net.sf.jour.statistic.MillisecondsPeriod;
33 import net.sf.jour.statistic.TimeBaseAccumulationList;
34
35 import org.apache.log4j.Logger;
36 import org.jfree.chart.ChartFactory;
37 import org.jfree.chart.ChartPanel;
38 import org.jfree.chart.JFreeChart;
39 import org.jfree.chart.StandardLegend;
40 import org.jfree.chart.axis.NumberAxis;
41 import org.jfree.chart.axis.ValueAxis;
42 import org.jfree.chart.labels.StandardXYToolTipGenerator;
43 import org.jfree.chart.plot.XYPlot;
44 import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
45 import org.jfree.chart.renderer.xy.XYItemRenderer;
46 import org.jfree.data.time.TimeSeries;
47 import org.jfree.data.time.TimeSeriesCollection;
48 import org.jfree.data.xy.XYDataset;
49
50 /***
51 * TODO Add docs
52 *
53 * Created on 13.12.2004
54 * Contributing Author(s):
55 *
56 * Misha Lifschitz <mishalifschitz at users.sourceforge.net> (Inital implementation)
57 * Vlad Skarzhevskyy <vlads at users.sourceforge.net> (Inital implementation)
58 *
59 * @author vlads
60 * @version $Revision: 1.7 $ ($Author: vlads $) $Date: 2004/12/17 04:17:46 $
61 */
62 public class MethodsChartPanel extends MonitoringJPanel {
63
64 protected static final Logger log = Logger.getLogger(MethodsChartPanel.class);
65
66 TimeSeries timeseriesAvg;
67 TimeSeries timeseriesMax;
68 TimeSeries timeseriesMin;
69
70 TimeSeries timeseriesCalls;
71
72 Object statItem;
73
74 MethodExceutionStatistics methodStat;
75
76 String methodName;
77
78 public MethodsChartPanel(Object statItem, MethodExceutionStatistics methodStat) {
79 setLayout(new BorderLayout());
80
81 this.statItem = statItem;
82 this.methodStat = methodStat;
83
84 TimeBaseAccumulationList list = (TimeBaseAccumulationList) statItem;
85 methodName = list.getName();
86
87 timeseriesMax = new TimeSeries("Max", MillisecondsPeriod.class);
88 timeseriesAvg = new TimeSeries("AVG", MillisecondsPeriod.class);
89 timeseriesMin = new TimeSeries("Min milliseconds", MillisecondsPeriod.class);
90 timeseriesCalls = new TimeSeries("Number of calls per min", MillisecondsPeriod.class);
91
92 JFreeChart jfreechart = createChart(createDataset(statItem));
93 ChartPanel chartpanel = new ChartPanel(jfreechart);
94 chartpanel.setMouseZoomable(true, false);
95
96 chartpanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4),
97 BorderFactory.createLineBorder(Color.black)));
98 StandardLegend standardlegend = (StandardLegend) jfreechart.getLegend();
99
100 add(chartpanel);
101 }
102
103 public boolean canCloseTab() {
104 return true;
105 }
106
107 public void updateData() {
108 timeseriesAvg.clear();
109 timeseriesMin.clear();
110 timeseriesMax.clear();
111 timeseriesCalls.clear();
112 createTestTimeSeries(statItem);
113 }
114
115 public String getTabTitle() {
116 return methodName;
117 }
118
119 private void createTestTimeSeries(Object statItem) {
120 try {
121 log.debug("Got stats:" + statItem.getClass().getName());
122 synchronized (methodStat) {
123 TimeBaseAccumulationList list = (TimeBaseAccumulationList) statItem;
124
125 for (Iterator i = list.getKeys().iterator(); i.hasNext();) {
126 Object time = i.next();
127 Accumulation acc = list.getItem(time);
128 MillisecondsPeriod p = list.getPeriod(time);
129 timeseriesAvg.add(p, new Double(acc.getMean()));
130 timeseriesMax.add(p, new Double(acc.getMax()));
131 timeseriesMin.add(p, new Double(acc.getMin()));
132 timeseriesCalls.add(p, new Double(list.getCallPerMinute(time)));
133 }
134 }
135 log.debug("Items added:" +timeseriesAvg.getItemCount());
136 } catch (Exception e) {
137 log.error("Test Time Series Error", e);
138 }
139 }
140
141 private XYDataset createDataset(Object statItem) {
142 createTestTimeSeries(statItem);
143
144 TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
145 timeseriescollection.addSeries(timeseriesMax);
146 timeseriescollection.addSeries(timeseriesAvg);
147 timeseriescollection.addSeries(timeseriesMin);
148
149 return timeseriescollection;
150 }
151
152 private XYDataset createDatasetCalls() {
153 TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
154 timeseriescollection.addSeries(timeseriesCalls);
155 return timeseriescollection;
156 }
157
158 private JFreeChart createChart(XYDataset xydataset) {
159 JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(this.methodName, "When", "Call duration milliseconds", xydataset, true, true, false);
160 XYPlot xyplot = jfreechart.getXYPlot();
161
162 XYItemRenderer xyitemrenderer = xyplot.getRenderer();
163
164 ValueAxis numberaxisDuration = xyplot.getRangeAxis(0);
165 numberaxisDuration.setLabelPaint(Color.blue);
166 numberaxisDuration.setTickLabelPaint(Color.blue);
167
168 StandardXYToolTipGenerator standardxytooltipgenerator = new StandardXYToolTipGenerator("{0}: ({1}, {2})", new SimpleDateFormat("HH:mm:ss"), new DecimalFormat("0.000"));
169 xyitemrenderer.setToolTipGenerator(standardxytooltipgenerator);
170
171
172 NumberAxis numberaxis = new NumberAxis("Number of calls per min");
173 numberaxis.setAutoRangeIncludesZero(false);
174 numberaxis.setLabelPaint(Color.black);
175 numberaxis.setTickLabelPaint(Color.black);
176 xyplot.setRangeAxis(1, numberaxis);
177 xyplot.setDataset(1, createDatasetCalls());
178 xyplot.mapDatasetToRangeAxis(1, 1);
179
180
181
182
183
184
185
186
187
188
189 StandardXYItemRenderer standardxyitemrenderer1 = new StandardXYItemRenderer();
190 standardxyitemrenderer1.setSeriesPaint(0, Color.black);
191
192 standardxyitemrenderer1.setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());
193 xyplot.setRenderer(1, standardxyitemrenderer1);
194
195 return jfreechart;
196 }
197 }