From 424fe1b372d225d65eb42e6125b24cbb982c5969 Mon Sep 17 00:00:00 2001 From: James Moger Date: Wed, 1 Jun 2011 19:51:41 -0400 Subject: Stats -> Metrics. Docs in distribution zip. Created MetricUtils. --- src/com/gitblit/wicket/pages/MetricsPage.html | 23 +++ src/com/gitblit/wicket/pages/MetricsPage.java | 189 +++++++++++++++++++++++ src/com/gitblit/wicket/pages/RepositoryPage.html | 2 +- src/com/gitblit/wicket/pages/RepositoryPage.java | 4 +- src/com/gitblit/wicket/pages/StatsPage.html | 23 --- src/com/gitblit/wicket/pages/StatsPage.java | 189 ----------------------- src/com/gitblit/wicket/pages/SummaryPage.html | 2 +- src/com/gitblit/wicket/pages/SummaryPage.java | 7 +- 8 files changed, 220 insertions(+), 219 deletions(-) create mode 100644 src/com/gitblit/wicket/pages/MetricsPage.html create mode 100644 src/com/gitblit/wicket/pages/MetricsPage.java delete mode 100644 src/com/gitblit/wicket/pages/StatsPage.html delete mode 100644 src/com/gitblit/wicket/pages/StatsPage.java (limited to 'src/com/gitblit/wicket/pages') diff --git a/src/com/gitblit/wicket/pages/MetricsPage.html b/src/com/gitblit/wicket/pages/MetricsPage.html new file mode 100644 index 00000000..d6f23e01 --- /dev/null +++ b/src/com/gitblit/wicket/pages/MetricsPage.html @@ -0,0 +1,23 @@ + + + + + +

Commit Activity

+
+ +

Commit Activity by Day of Week

+
+ +

Commit Activity by Time of Day

+
+ +

Most Prolific Authors

+
+ +
+ + \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/MetricsPage.java b/src/com/gitblit/wicket/pages/MetricsPage.java new file mode 100644 index 00000000..2186ae37 --- /dev/null +++ b/src/com/gitblit/wicket/pages/MetricsPage.java @@ -0,0 +1,189 @@ +/* + * Copyright 2011 gitblit.com. + * + * Licensed 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 com.gitblit.wicket.pages; + +import java.awt.Color; +import java.awt.Dimension; +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.eclipse.jgit.lib.Repository; +import org.wicketstuff.googlecharts.Chart; +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; +import com.gitblit.wicket.WicketUtils; + +public class MetricsPage extends RepositoryPage { + + public MetricsPage(PageParameters params) { + super(params); + Repository r = getRepository(); + insertLinePlot("commitsChart", MetricUtils.getDateMetrics(r, false)); + insertBarPlot("dayOfWeekChart", getDayOfWeekMetrics(r)); + insertLinePlot("timeOfDayChart", getTimeOfDayMetrics(r)); + insertPieChart("authorsChart", getAuthorMetrics(r)); + } + + private void insertLinePlot(String wicketId, List 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.BLUE, 1, -1, 5)); + + add(new Chart(wicketId, provider)); + } else { + add(WicketUtils.newBlankImage(wicketId)); + } + } + + private void insertBarPlot(String wicketId, List 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 labels = new ArrayList(); + for (Metric metric : metrics) { + labels.add(metric.name); + } + 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 Chart(wicketId, provider)); + } else { + add(WicketUtils.newBlankImage(wicketId)); + } + } + + private void insertPieChart(String wicketId, List metrics) { + if ((metrics != null) && (metrics.size() > 0)) { + IChartData data = WicketUtils.getChartData(metrics); + List labels = new ArrayList(); + for (Metric metric : metrics) { + labels.add(metric.name); + } + ChartProvider provider = new ChartProvider(new Dimension(400, 200), ChartType.PIE, data); + provider.setPieLabels(labels.toArray(new String[labels.size()])); + add(new Chart(wicketId, provider)); + } else { + add(WicketUtils.newBlankImage(wicketId)); + } + } + + private List getDayOfWeekMetrics(Repository repository) { + List list = MetricUtils.getDateMetrics(repository, false, "E"); + SimpleDateFormat sdf = new SimpleDateFormat("E"); + Calendar cal = Calendar.getInstance(); + + List sorted = new ArrayList(7); + int firstDayOfWeek = cal.getFirstDayOfWeek(); + int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); + + // rewind date to first day of week + cal.add(Calendar.DATE, firstDayOfWeek - dayOfWeek); + for (int i = 0; i < 7; i++) { + String day = sdf.format(cal.getTime()); + for (Metric metric : list) { + if (metric.name.equals(day)) { + sorted.add(i, metric); + list.remove(metric); + break; + } + } + cal.add(Calendar.DATE, 1); + } + return sorted; + } + + private List getTimeOfDayMetrics(Repository repository) { + SimpleDateFormat ndf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + List list = MetricUtils.getDateMetrics(repository, false, "yyyy-MM-dd HH:mm"); + Calendar cal = Calendar.getInstance(); + + for (Metric metric : list) { + try { + Date date = sdf.parse(metric.name); + cal.setTime(date); + double y = cal.get(Calendar.HOUR_OF_DAY) + (cal.get(Calendar.MINUTE) / 60d); + metric.duration = (int) (date.getTime() / 60000L); + metric.count = y; + metric.name = ndf.format(date); + } catch (ParseException p) { + } + } + return list; + } + + private List getAuthorMetrics(Repository repository) { + List authors = MetricUtils.getAuthorMetrics(repository); + Collections.sort(authors, new Comparator() { + @Override + public int compare(Metric o1, Metric o2) { + if (o1.count > o2.count) { + return -1; + } else if (o1.count < o2.count) { + return 1; + } + return 0; + } + }); + if (authors.size() > 10) { + return authors.subList(0, 9); + } + return authors; + } + + @Override + protected String getPageName() { + return getString("gb.metrics"); + } +} diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.html b/src/com/gitblit/wicket/pages/RepositoryPage.html index 0f245eff..ffb484f1 100644 --- a/src/com/gitblit/wicket/pages/RepositoryPage.html +++ b/src/com/gitblit/wicket/pages/RepositoryPage.html @@ -18,7 +18,7 @@ diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.java b/src/com/gitblit/wicket/pages/RepositoryPage.java index 2610c4c6..143d885a 100644 --- a/src/com/gitblit/wicket/pages/RepositoryPage.java +++ b/src/com/gitblit/wicket/pages/RepositoryPage.java @@ -75,7 +75,7 @@ public abstract class RepositoryPage extends BasePage { put("branches", "gb.branches"); put("tags", "gb.tags"); put("tree", "gb.tree"); - put("stats", "gb.stats"); + put("metrics", "gb.metrics"); put("tickets", "gb.tickets"); put("edit", "gb.edit"); } @@ -104,7 +104,7 @@ public abstract class RepositoryPage extends BasePage { WicketUtils.newRepositoryParameter(repositoryName))); add(new BookmarkablePageLink("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName))); - add(new BookmarkablePageLink("stats", StatsPage.class, + add(new BookmarkablePageLink("metrics", MetricsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); // per-repository extra page links diff --git a/src/com/gitblit/wicket/pages/StatsPage.html b/src/com/gitblit/wicket/pages/StatsPage.html deleted file mode 100644 index d6f23e01..00000000 --- a/src/com/gitblit/wicket/pages/StatsPage.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -

Commit Activity

-
- -

Commit Activity by Day of Week

-
- -

Commit Activity by Time of Day

-
- -

Most Prolific Authors

-
- -
- - \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/StatsPage.java b/src/com/gitblit/wicket/pages/StatsPage.java deleted file mode 100644 index 0b16211e..00000000 --- a/src/com/gitblit/wicket/pages/StatsPage.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright 2011 gitblit.com. - * - * Licensed 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 com.gitblit.wicket.pages; - -import java.awt.Color; -import java.awt.Dimension; -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.eclipse.jgit.lib.Repository; -import org.wicketstuff.googlecharts.Chart; -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.JGitUtils; -import com.gitblit.wicket.WicketUtils; - -public class StatsPage extends RepositoryPage { - - public StatsPage(PageParameters params) { - super(params); - Repository r = getRepository(); - insertLinePlot("commitsChart", JGitUtils.getDateMetrics(r, false)); - insertBarPlot("dayOfWeekChart", getDayOfWeekMetrics(r)); - insertLinePlot("timeOfDayChart", getTimeOfDayMetrics(r)); - insertPieChart("authorsChart", getAuthorMetrics(r)); - } - - private void insertLinePlot(String wicketId, List 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.BLUE, 1, -1, 5)); - - add(new Chart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); - } - } - - private void insertBarPlot(String wicketId, List 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 labels = new ArrayList(); - for (Metric metric : metrics) { - labels.add(metric.name); - } - 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 Chart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); - } - } - - private void insertPieChart(String wicketId, List metrics) { - if ((metrics != null) && (metrics.size() > 0)) { - IChartData data = WicketUtils.getChartData(metrics); - List labels = new ArrayList(); - for (Metric metric : metrics) { - labels.add(metric.name); - } - ChartProvider provider = new ChartProvider(new Dimension(400, 200), ChartType.PIE, data); - provider.setPieLabels(labels.toArray(new String[labels.size()])); - add(new Chart(wicketId, provider)); - } else { - add(WicketUtils.newBlankImage(wicketId)); - } - } - - private List getDayOfWeekMetrics(Repository repository) { - List list = JGitUtils.getDateMetrics(repository, false, "E"); - SimpleDateFormat sdf = new SimpleDateFormat("E"); - Calendar cal = Calendar.getInstance(); - - List sorted = new ArrayList(7); - int firstDayOfWeek = cal.getFirstDayOfWeek(); - int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); - - // rewind date to first day of week - cal.add(Calendar.DATE, firstDayOfWeek - dayOfWeek); - for (int i = 0; i < 7; i++) { - String day = sdf.format(cal.getTime()); - for (Metric metric : list) { - if (metric.name.equals(day)) { - sorted.add(i, metric); - list.remove(metric); - break; - } - } - cal.add(Calendar.DATE, 1); - } - return sorted; - } - - private List getTimeOfDayMetrics(Repository repository) { - SimpleDateFormat ndf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - List list = JGitUtils.getDateMetrics(repository, false, "yyyy-MM-dd HH:mm"); - Calendar cal = Calendar.getInstance(); - - for (Metric metric : list) { - try { - Date date = sdf.parse(metric.name); - cal.setTime(date); - double y = cal.get(Calendar.HOUR_OF_DAY) + (cal.get(Calendar.MINUTE) / 60d); - metric.duration = (int) (date.getTime() / 60000L); - metric.count = y; - metric.name = ndf.format(date); - } catch (ParseException p) { - } - } - return list; - } - - private List getAuthorMetrics(Repository repository) { - List authors = JGitUtils.getAuthorMetrics(repository); - Collections.sort(authors, new Comparator() { - @Override - public int compare(Metric o1, Metric o2) { - if (o1.count > o2.count) { - return -1; - } else if (o1.count < o2.count) { - return 1; - } - return 0; - } - }); - if (authors.size() > 10) { - return authors.subList(0, 9); - } - return authors; - } - - @Override - protected String getPageName() { - return getString("gb.stats"); - } -} diff --git a/src/com/gitblit/wicket/pages/SummaryPage.html b/src/com/gitblit/wicket/pages/SummaryPage.html index 1a90c998..ed94192a 100644 --- a/src/com/gitblit/wicket/pages/SummaryPage.html +++ b/src/com/gitblit/wicket/pages/SummaryPage.html @@ -19,7 +19,7 @@ [description][repository description] [owner][repository owner] [last change][repository last change] - [stats][repository stats] + [metrics][repository metrics] [URL][repository clone url] diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java index 1157d30c..f8206941 100644 --- a/src/com/gitblit/wicket/pages/SummaryPage.java +++ b/src/com/gitblit/wicket/pages/SummaryPage.java @@ -43,6 +43,7 @@ import com.gitblit.GitBlit; import com.gitblit.Keys; import com.gitblit.models.Metric; import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.MetricUtils; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; import com.gitblit.wicket.WicketUtils; @@ -72,7 +73,7 @@ public class SummaryPage extends RepositoryPage { List metrics = null; Metric metricsTotal = null; if (GitBlit.getBoolean(Keys.web.generateActivityGraph, true)) { - metrics = JGitUtils.getDateMetrics(r, true); + metrics = MetricUtils.getDateMetrics(r, true); metricsTotal = metrics.remove(0); } @@ -83,9 +84,9 @@ public class SummaryPage extends RepositoryPage { add(WicketUtils.createTimestampLabel("repositoryLastChange", JGitUtils.getLastChange(r), getTimeZone())); if (metricsTotal == null) { - add(new Label("repositoryStats", "")); + add(new Label("repositoryMetrics", "")); } else { - add(new Label("repositoryStats", MessageFormat.format( + add(new Label("repositoryMetrics", MessageFormat.format( "{0} commits and {1} tags in {2}", metricsTotal.count, metricsTotal.tag, TimeUtils.duration(metricsTotal.duration)))); } -- cgit v1.2.3