From 40538c57dd574d831d044cda50a8999941dc0a24 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 25 Feb 2012 08:18:22 -0500
Subject: [PATCH] Use proper timezone to generate all metrics

---
 src/com/gitblit/GitBlit.java                     |    2 +-
 src/com/gitblit/utils/ActivityUtils.java         |    9 ++++++---
 tests/com/gitblit/tests/MetricUtilsTest.java     |    4 +++-
 src/com/gitblit/utils/MetricUtils.java           |    5 ++++-
 src/com/gitblit/wicket/panels/ActivityPanel.html |    2 +-
 src/com/gitblit/wicket/pages/ActivityPage.java   |    4 +++-
 src/com/gitblit/wicket/pages/MetricsPage.java    |    4 ++--
 7 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index a57e605..e6f07e0 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -882,7 +882,7 @@
 		if (repositoryMetricsCache.hasCurrent(model.name, model.lastChange)) {
 			return new ArrayList<Metric>(repositoryMetricsCache.getObject(model.name));
 		}
-		List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null);
+		List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null, getTimezone());
 		repositoryMetricsCache.updateObject(model.name, model.lastChange, metrics);
 		return new ArrayList<Metric>(metrics);
 	}
diff --git a/src/com/gitblit/utils/ActivityUtils.java b/src/com/gitblit/utils/ActivityUtils.java
index 61b6242..d603a49 100644
--- a/src/com/gitblit/utils/ActivityUtils.java
+++ b/src/com/gitblit/utils/ActivityUtils.java
@@ -27,6 +27,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
@@ -60,10 +61,12 @@
 	 * @param objectId
 	 *            the branch to retrieve. If this value is null or empty all
 	 *            branches are queried.
+	 * @param timezone
+	 *            the timezone for aggregating commits
 	 * @return
 	 */
 	public static List<Activity> getRecentActivity(List<RepositoryModel> models, int daysBack,
-			String objectId) {
+			String objectId, TimeZone timezone) {
 
 		// Activity panel shows last daysBack of activity across all
 		// repositories.
@@ -72,9 +75,9 @@
 		// Build a map of DailyActivity from the available repositories for the
 		// specified threshold date.
 		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-		df.setTimeZone(GitBlit.getTimezone());
+		df.setTimeZone(timezone);
 		Calendar cal = Calendar.getInstance();
-		cal.setTimeZone(GitBlit.getTimezone());
+		cal.setTimeZone(timezone);
 
 		Map<String, Activity> activity = new HashMap<String, Activity>();
 		for (RepositoryModel model : models) {
diff --git a/src/com/gitblit/utils/MetricUtils.java b/src/com/gitblit/utils/MetricUtils.java
index 2919b15..e9e1fa5 100644
--- a/src/com/gitblit/utils/MetricUtils.java
+++ b/src/com/gitblit/utils/MetricUtils.java
@@ -24,6 +24,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
@@ -84,10 +85,11 @@
 	 *            if null or empty, HEAD is assumed.
 	 * @param includeTotal
 	 * @param dateFormat
+	 * @param timezone
 	 * @return list of metrics
 	 */
 	public static List<Metric> getDateMetrics(Repository repository, String objectId,
-			boolean includeTotal, String dateFormat) {
+			boolean includeTotal, String dateFormat, TimeZone timezone) {
 		Metric total = new Metric("TOTAL");
 		final Map<String, Metric> metricMap = new HashMap<String, Metric>();
 
@@ -130,6 +132,7 @@
 					// use specified date format
 					df = new SimpleDateFormat(dateFormat);
 				}
+				df.setTimeZone(timezone);
 
 				Iterable<RevCommit> revlog = revWalk;
 				for (RevCommit rev : revlog) {
diff --git a/src/com/gitblit/wicket/pages/ActivityPage.java b/src/com/gitblit/wicket/pages/ActivityPage.java
index e59e68e..bceac8f 100644
--- a/src/com/gitblit/wicket/pages/ActivityPage.java
+++ b/src/com/gitblit/wicket/pages/ActivityPage.java
@@ -67,7 +67,8 @@
 
 		// determine repositories to view and retrieve the activity
 		List<RepositoryModel> models = getRepositories(params);
-		List<Activity> recentActivity = ActivityUtils.getRecentActivity(models, daysBack, objectId);
+		List<Activity> recentActivity = ActivityUtils.getRecentActivity(models, 
+				daysBack, objectId, getTimeZone());
 
 		if (recentActivity.size() == 0) {
 			// no activity, skip graphs and activity panel
@@ -173,6 +174,7 @@
 		GoogleChart chart = new GoogleLineChart("chartDaily", getString("gb.dailyActivity"), "day",
 				getString("gb.commits"));
 		SimpleDateFormat df = new SimpleDateFormat("MMM dd");
+		df.setTimeZone(getTimeZone());
 		for (Activity metric : recentActivity) {
 			chart.addValue(df.format(metric.startDate), metric.getCommitCount());
 		}
diff --git a/src/com/gitblit/wicket/pages/MetricsPage.java b/src/com/gitblit/wicket/pages/MetricsPage.java
index 8fce27a..7a84f76 100644
--- a/src/com/gitblit/wicket/pages/MetricsPage.java
+++ b/src/com/gitblit/wicket/pages/MetricsPage.java
@@ -55,7 +55,7 @@
 			add(new Label("branchTitle", objectId));
 		}
 		Metric metricsTotal = null;
-		List<Metric> metrics = MetricUtils.getDateMetrics(r, objectId, true, null);
+		List<Metric> metrics = MetricUtils.getDateMetrics(r, objectId, true, null, getTimeZone());
 		metricsTotal = metrics.remove(0);
 		if (metricsTotal == null) {
 			add(new Label("branchStats", ""));
@@ -135,7 +135,7 @@
 	}
 
 	private List<Metric> getDayOfWeekMetrics(Repository repository, String objectId) {
-		List<Metric> list = MetricUtils.getDateMetrics(repository, objectId, false, "E");
+		List<Metric> list = MetricUtils.getDateMetrics(repository, objectId, false, "E", getTimeZone());
 		SimpleDateFormat sdf = new SimpleDateFormat("E");
 		Calendar cal = Calendar.getInstance();
 
diff --git a/src/com/gitblit/wicket/panels/ActivityPanel.html b/src/com/gitblit/wicket/panels/ActivityPanel.html
index 3827dc4..4c0566c 100644
--- a/src/com/gitblit/wicket/panels/ActivityPanel.html
+++ b/src/com/gitblit/wicket/panels/ActivityPanel.html
@@ -15,7 +15,7 @@
 	</div>
 	
 	<wicket:fragment wicket:id="commitFragment">
-		<td class="date" style="width:50px; vertical-align: middle;" ><span wicket:id="time">[time of day]</span></td>
+		<td class="date" style="width:60px; vertical-align: middle;text-align: right;padding-right:10px;" ><span wicket:id="time">[time of day]</span></td>
 		<td style="width:10em;text-align:left;vertical-align: middle;">
 			<span wicket:id="repository" class="repositorySwatch">[repository link]</span>
 		</td>
diff --git a/tests/com/gitblit/tests/MetricUtilsTest.java b/tests/com/gitblit/tests/MetricUtilsTest.java
index 43d02eb..bb8261a 100644
--- a/tests/com/gitblit/tests/MetricUtilsTest.java
+++ b/tests/com/gitblit/tests/MetricUtilsTest.java
@@ -19,6 +19,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
+import java.util.TimeZone;
 
 import org.eclipse.jgit.lib.Repository;
 import org.junit.Test;
@@ -35,7 +36,8 @@
 	}
 
 	private void testMetrics(Repository repository) throws Exception {
-		List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null);
+		List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null,
+				TimeZone.getDefault());
 		repository.close();
 		assertTrue("No date metrics found!", metrics.size() > 0);
 	}

--
Gitblit v1.9.1