From 1e2d2f2495e8409b4be31ff947864167a67fd6bb Mon Sep 17 00:00:00 2001 From: tryan <tim@theryanfamily.info> Date: Wed, 09 Apr 2014 20:55:29 -0400 Subject: [PATCH] Switch to self-hosted flotr2 graphs from Google Charts --- src/main/java/com/gitblit/wicket/pages/MetricsPage.java | 123 +++++++++++++++++++--------------------- 1 files changed, 58 insertions(+), 65 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java index d4cfc8e..7ae4e4e 100644 --- a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java @@ -15,27 +15,20 @@ */ package com.gitblit.wicket.pages; -import java.awt.Color; -import java.awt.Dimension; import java.text.MessageFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; import org.apache.wicket.PageParameters; +import org.apache.wicket.behavior.HeaderContributor; import org.apache.wicket.markup.html.basic.Label; import org.eclipse.jgit.lib.Repository; -import org.wicketstuff.googlecharts.ChartAxis; -import org.wicketstuff.googlecharts.ChartAxisType; -import org.wicketstuff.googlecharts.ChartProvider; -import org.wicketstuff.googlecharts.ChartType; -import org.wicketstuff.googlecharts.IChartData; -import org.wicketstuff.googlecharts.LineStyle; -import org.wicketstuff.googlecharts.MarkerType; -import org.wicketstuff.googlecharts.ShapeMarker; import com.gitblit.models.Metric; import com.gitblit.utils.MetricUtils; @@ -43,7 +36,9 @@ import com.gitblit.wicket.CacheControl; import com.gitblit.wicket.CacheControl.LastModified; import com.gitblit.wicket.WicketUtils; -import com.gitblit.wicket.charting.SecureChart; +import com.gitblit.wicket.charting.Chart; +import com.gitblit.wicket.charting.Charts; +import com.gitblit.wicket.charting.Flotr2Charts; @CacheControl(LastModified.REPOSITORY) public class MetricsPage extends RepositoryPage { @@ -66,73 +61,71 @@ MessageFormat.format(getString("gb.branchStats"), metricsTotal.count, metricsTotal.tag, getTimeUtils().duration(metricsTotal.duration)))); } - insertLinePlot("commitsChart", metrics); - insertBarPlot("dayOfWeekChart", getDayOfWeekMetrics(r, objectId)); - insertPieChart("authorsChart", getAuthorMetrics(r, objectId)); + + Charts charts = new Flotr2Charts(); + + add(WicketUtils.newBlankImage("commitsChart")); + add(WicketUtils.newBlankImage("dayOfWeekChart")); + add(WicketUtils.newBlankImage("authorsChart")); + + createLineChart(charts, "commitsChart", metrics); + createBarChart(charts, "dayOfWeekChart", getDayOfWeekMetrics(r, objectId)); + createPieChart(charts, "authorsChart", getAuthorMetrics(r, objectId)); + + add(new HeaderContributor(charts)); + } - private void insertLinePlot(String wicketId, List<Metric> metrics) { + private void createLineChart(Charts charts, String id, List<Metric> metrics) { if ((metrics != null) && (metrics.size() > 0)) { - IChartData data = WicketUtils.getChartData(metrics); - - ChartProvider provider = new ChartProvider(new Dimension(400, 100), ChartType.LINE, - data); - ChartAxis dateAxis = new ChartAxis(ChartAxisType.BOTTOM); - dateAxis.setLabels(new String[] { metrics.get(0).name, - metrics.get(metrics.size() / 2).name, metrics.get(metrics.size() - 1).name }); - provider.addAxis(dateAxis); - - ChartAxis commitAxis = new ChartAxis(ChartAxisType.LEFT); - commitAxis.setLabels(new String[] { "", - String.valueOf((int) WicketUtils.maxValue(metrics)) }); - provider.addAxis(commitAxis); - - provider.setLineStyles(new LineStyle[] { new LineStyle(2, 4, 0), new LineStyle(0, 4, 1) }); - provider.addShapeMarker(new ShapeMarker(MarkerType.CIRCLE, Color.decode("#002060"), 1, -1, 5)); - - add(new SecureChart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); + + Chart chart = charts.createLineChart(id, "", "day", + getString("gb.commits")); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String displayFormat = "MMM dd"; + if(metrics.size() > 0 && metrics.get(0).name.length() == 7){ + df = new SimpleDateFormat("yyyy-MM"); + displayFormat = "yyyy MMM"; + } + df.setTimeZone(getTimeZone()); + chart.setDateFormat(displayFormat); + for (Metric metric : metrics) { + Date date; + try { + date = df.parse(metric.name); + } catch (ParseException e) { + logger.error("Unable to parse date: " + metric.name); + return; + } + chart.addValue(date, (int)metric.count); + if(metric.tag > 0 ){ + chart.addHighlight(date, (int)metric.count); + } + } + charts.addChart(chart); } } - - private void insertBarPlot(String wicketId, List<Metric> metrics) { + + private void createPieChart(Charts charts, String id, List<Metric> metrics) { if ((metrics != null) && (metrics.size() > 0)) { - IChartData data = WicketUtils.getChartData(metrics); - - ChartProvider provider = new ChartProvider(new Dimension(400, 100), - ChartType.BAR_VERTICAL_SET, data); - ChartAxis dateAxis = new ChartAxis(ChartAxisType.BOTTOM); - List<String> labels = new ArrayList<String>(); + + Chart chart = charts.createPieChart(id, "", "day", + getString("gb.commits")); for (Metric metric : metrics) { - labels.add(metric.name); + chart.addValue(metric.name, (int)metric.count); } - dateAxis.setLabels(labels.toArray(new String[labels.size()])); - provider.addAxis(dateAxis); - - ChartAxis commitAxis = new ChartAxis(ChartAxisType.LEFT); - commitAxis.setLabels(new String[] { "", - String.valueOf((int) WicketUtils.maxValue(metrics)) }); - provider.addAxis(commitAxis); - - add(new SecureChart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); + charts.addChart(chart); } } - - private void insertPieChart(String wicketId, List<Metric> metrics) { + + private void createBarChart(Charts charts, String id, List<Metric> metrics) { if ((metrics != null) && (metrics.size() > 0)) { - IChartData data = WicketUtils.getChartData(metrics); - List<String> labels = new ArrayList<String>(); + Chart chart = charts.createBarChart(id, "", "day", + getString("gb.commits")); for (Metric metric : metrics) { - labels.add(metric.name); + chart.addValue(metric.name, (int)metric.count); } - ChartProvider provider = new ChartProvider(new Dimension(800, 200), ChartType.PIE, data); - provider.setPieLabels(labels.toArray(new String[labels.size()])); - add(new SecureChart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); + charts.addChart(chart); } } -- Gitblit v1.9.1