Mercurial > hg > release > thermostat-0.4
changeset 530:261373495057
Show the actual GC duration if user clicks on chart
Show the GC duration for the gc cycle closest to the point where the
user clicked on the chart.
Reviewed-by: neugens
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-August/002646.html
PR960
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Fri, 10 Aug 2012 19:12:50 -0400 |
parents | 2e73d3ad800e |
children | 1afd8713fc6f |
files | client/core/src/main/java/com/redhat/thermostat/client/ui/RecentTimeSeriesChartPanel.java client/core/src/main/java/com/redhat/thermostat/client/ui/VmGcPanel.java distribution/config/osgi-export.properties |
diffstat | 3 files changed, 91 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/client/core/src/main/java/com/redhat/thermostat/client/ui/RecentTimeSeriesChartPanel.java Wed Aug 08 15:32:23 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/ui/RecentTimeSeriesChartPanel.java Fri Aug 10 19:12:50 2012 -0400 @@ -38,18 +38,23 @@ import java.awt.BorderLayout; import java.awt.Component; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent.TimeUnit; +import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; +import javax.swing.SwingUtilities; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.BadLocationException; import javax.swing.text.Document; +import javax.swing.text.JTextComponent; import org.jfree.chart.ChartPanel; @@ -63,12 +68,15 @@ private final RecentTimeSeriesChartController controller; + private JPanel labelContainer; + private JTextComponent label; + public RecentTimeSeriesChartPanel(RecentTimeSeriesChartController controller) { this.controller = controller; this.setLayout(new BorderLayout()); - ChartPanel cp = controller.getChartPanel(); + final ChartPanel cp = controller.getChartPanel(); cp.setDisplayToolTips(false); cp.setDoubleBuffered(true); @@ -86,15 +94,28 @@ cp.setMinimumDrawWidth(MINIMUM_DRAW_SIZE); cp.setMaximumDrawWidth(Integer.MAX_VALUE); - add(cp); - add(getChartControls(), BorderLayout.SOUTH); + add(getControlsAndAdditionalDisplay(), BorderLayout.SOUTH); + + add(cp, BorderLayout.CENTER); + } + + private Component getControlsAndAdditionalDisplay() { + JPanel container = new JPanel(); + + container.setLayout(new BorderLayout()); + + container.add(getChartControls(), BorderLayout.LINE_START); + container.add(getAdditionalDataDisplay(), BorderLayout.LINE_END); + + return container; } private Component getChartControls() { JPanel container = new JPanel(); final JTextField durationSelector = new JTextField(5); - final JComboBox<TimeUnit> unitSelector = new JComboBox<>(controller.getTimeUnits()); + final JComboBox<TimeUnit> unitSelector = new JComboBox<>(); + unitSelector.setModel(new DefaultComboBoxModel<>(controller.getTimeUnits())); int defaultValue = controller.getTimeValue(); TimeUnit defaultUnit = controller.getTimeUnit(); @@ -114,6 +135,30 @@ return container; } + private Component getAdditionalDataDisplay() { + JPanel panel = new JPanel(new GridBagLayout()); + labelContainer = new JPanel(); + GridBagConstraints constraints = new GridBagConstraints(); + constraints.fill = GridBagConstraints.BOTH; + constraints.anchor = GridBagConstraints.CENTER; + panel.add(labelContainer, constraints); + return panel; + } + + public void setDataInformationLabel(final String text) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (label == null) { + label = new ValueField(text); + labelContainer.add(label); + } + + label.setText(text); + } + }); + } + private static class TimeUnitChangeListener implements DocumentListener, ActionListener { private final RecentTimeSeriesChartController controller;
--- a/client/core/src/main/java/com/redhat/thermostat/client/ui/VmGcPanel.java Wed Aug 08 15:32:23 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/ui/VmGcPanel.java Fri Aug 10 19:12:50 2012 -0400 @@ -54,7 +54,10 @@ import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.event.ChartProgressEvent; +import org.jfree.chart.event.ChartProgressListener; import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYBarPainter; import org.jfree.chart.renderer.xy.XYBarRenderer; import org.jfree.data.RangeType; @@ -66,7 +69,7 @@ import com.redhat.thermostat.common.model.IntervalTimeData; public class VmGcPanel extends VmGcView implements SwingComponent { - + private JPanel visiblePanel; private final Map<String, SampledDataset> dataset = new HashMap<>(); @@ -118,7 +121,7 @@ visiblePanel.setLayout(new GridBagLayout()); } - private JPanel createCollectorDetailsPanel(IntervalXYDataset timeSeriesCollection, String title, String units) { + private JPanel createCollectorDetailsPanel(IntervalXYDataset collectorData, String title, String units) { JPanel detailsPanel = new JPanel(); detailsPanel.setBorder(Components.smallBorder()); detailsPanel.setLayout(new BorderLayout()); @@ -129,27 +132,56 @@ null, localize(LocaleResources.VM_GC_COLLECTOR_CHART_REAL_TIME_LABEL), localize(LocaleResources.VM_GC_COLLECTOR_CHART_GC_TIME_LABEL, units), - timeSeriesCollection, + collectorData, PlotOrientation.VERTICAL, false, false, false); ((XYBarRenderer)(chart.getXYPlot().getRenderer())).setBarPainter(new StandardXYBarPainter()); - chart.getXYPlot().setDomainAxis(new DateAxis()); - JPanel chartPanel = new RecentTimeSeriesChartPanel(new RecentTimeSeriesChartController(chart)); + + setupPlotAxes(chart.getXYPlot()); + + chart.getXYPlot().setDomainCrosshairLockedOnData(true); + chart.getXYPlot().setDomainCrosshairVisible(true); + + final RecentTimeSeriesChartPanel chartPanel = new RecentTimeSeriesChartPanel(new RecentTimeSeriesChartController(chart)); + + chart.addProgressListener(new ChartProgressListener() { - NumberAxis axis = (NumberAxis) chart.getXYPlot().getRangeAxis(); + @Override + public void chartProgress(ChartProgressEvent event) { + if (event.getType() != ChartProgressEvent.DRAWING_FINISHED) { + return; + } - axis.setRangeType(RangeType.POSITIVE); - axis.setAutoRange(true); - axis.setAutoRangeMinimumSize(1); + double rangeCrossHairValue = event.getChart().getXYPlot().getRangeCrosshairValue(); + chartPanel.setDataInformationLabel(String.valueOf(rangeCrossHairValue)); + } + }); detailsPanel.add(chartPanel, BorderLayout.CENTER); return detailsPanel; } + private void setupPlotAxes(XYPlot plot) { + setupDomainAxis(plot); + setupRangeAxis(plot); + } + + private void setupDomainAxis(XYPlot plot) { + plot.setDomainAxis(new DateAxis()); + } + + private void setupRangeAxis(XYPlot plot) { + NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); + + rangeAxis.setRangeType(RangeType.POSITIVE); + rangeAxis.setAutoRange(true); + rangeAxis.setAutoRangeMinimumSize(1); + } + @Override public void addChart(final String tag, final String title, final String units) { SwingUtilities.invokeLater(new Runnable() {
--- a/distribution/config/osgi-export.properties Wed Aug 08 15:32:23 2012 -0400 +++ b/distribution/config/osgi-export.properties Fri Aug 10 19:12:50 2012 -0400 @@ -40,6 +40,7 @@ org.bson.types org.jfree.chart org.jfree.chart.axis +org.jfree.chart.event org.jfree.chart.labels org.jfree.chart.plot org.jfree.chart.renderer.xy