package hudson.plugins.view.dashboard.test; import hudson.Extension; import hudson.model.Descriptor; import hudson.plugins.view.dashboard.DashboardPortlet; import hudson.util.ColorPalette; import hudson.util.Graph; import java.awt.Color; import java.awt.Paint; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.DefaultDrawingSupplier; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.DefaultPieDataset; import org.kohsuke.stapler.DataBoundConstructor; public class TestStatisticsChart extends DashboardPortlet { @DataBoundConstructor public TestStatisticsChart(String name) { super(name); } /** * Graph of duration of tests over time. */ public Graph getSummaryGraph() { final TestResultSummary summary = TestUtil.getTestResultSummary(getDashboard().getJobs()); return new Graph(-1, 300, 220) { @Override protected JFreeChart createGraph() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("success", summary.getSuccess()); dataset.setValue("skipped", summary.getSkipped()); dataset.setValue("failed", summary.getFailed()); JFreeChart chart = ChartFactory.createPieChart(null, dataset, false, false, false); chart.setBackgroundPaint(Color.white); final PiePlot plot = (PiePlot) chart.getPlot(); // plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 5.0, 5.0, 5.0, 5.0)); plot.setBackgroundPaint(Color.WHITE); plot.setOutlinePaint(null); plot.setForegroundAlpha(0.8f); // create arraylist of paint color, adding only color if related stat is > 0 List<Paint> paints = new ArrayList<Paint>(); if (summary.getSuccess() > 0) { paints.add(ColorPalette.BLUE); } if (summary.getSkipped() > 0) { paints.add(ColorPalette.YELLOW); } if (summary.getFailed() > 0) { paints.add(ColorPalette.RED); } DefaultDrawingSupplier ds = new DefaultDrawingSupplier( paints.toArray(new Paint[0]), DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE ); plot.setDrawingSupplier(ds); plot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0} = {1} ({2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance() )); plot.setNoDataMessage("No data available"); return chart; } }; } @Extension public static class DescriptorImpl extends Descriptor<DashboardPortlet> { @Override public String getDisplayName() { return "Test Statistics Chart"; } } }