Просмотр исходного кода

Show weekly activity for last 32 weeks.

Heikki Hokkanen 16 лет назад
Родитель
Сommit
3585ce766d
2 измененных файлов: 52 добавлений и 0 удалений
  1. 44
    0
      gitstats
  2. 8
    0
      gitstats.css

+ 44
- 0
gitstats Просмотреть файл

@@ -159,6 +159,8 @@ class GitDataCollector(DataCollector):
159 159
 		self.activity_by_hour_of_week = {} # weekday -> hour -> commits
160 160
 		self.activity_by_hour_of_day_busiest = 0
161 161
 		self.activity_by_hour_of_week_busiest = 0
162
+		self.activity_by_year_week = {} # yy_wNN -> commits
163
+		self.activity_by_year_week_peak = 0
162 164
 
163 165
 		self.authors = {} # name -> {commits, first_commit_stamp, last_commit_stamp, last_active_day, active_days}
164 166
 
@@ -265,6 +267,15 @@ class GitDataCollector(DataCollector):
265 267
 			else:
266 268
 				self.activity_by_month_of_year[month] = 1
267 269
 
270
+			# yearly/weekly activity
271
+			yyw = date.strftime('%Y-%W')
272
+			if yyw not in self.activity_by_year_week:
273
+				self.activity_by_year_week[yyw] = 1
274
+			else:
275
+				self.activity_by_year_week[yyw] += 1
276
+			if self.activity_by_year_week_peak < self.activity_by_year_week[yyw]:
277
+				self.activity_by_year_week_peak = self.activity_by_year_week[yyw]
278
+
268 279
 			# author stats
269 280
 			if author not in self.authors:
270 281
 				self.authors[author] = {}
@@ -546,6 +557,39 @@ class HTMLReportCreator(ReportCreator):
546 557
 
547 558
 		#f.write('<h2>Last 12 months</h2>')
548 559
 
560
+		# Weekly activity
561
+		WEEKS = 32
562
+		f.write(html_header(2, 'Weekly activity'))
563
+		f.write('<p>Last %d weeks</p>' % WEEKS)
564
+
565
+		# generate weeks to show (previous N weeks from now)
566
+		now = datetime.datetime.now()
567
+		deltaweek = datetime.timedelta(7)
568
+		weeks = []
569
+		stampcur = now
570
+		for i in range(0, WEEKS):
571
+			weeks.insert(0, stampcur.strftime('%Y-%W'))
572
+			stampcur -= deltaweek
573
+
574
+		# top row: commits & bar
575
+		f.write('<table class="noborders"><tr>')
576
+		for i in range(0, WEEKS):
577
+			commits = 0
578
+			if weeks[i] in data.activity_by_year_week:
579
+				commits = data.activity_by_year_week[weeks[i]]
580
+
581
+			percentage = 0
582
+			if weeks[i] in data.activity_by_year_week:
583
+				percentage = float(data.activity_by_year_week[weeks[i]]) / data.activity_by_year_week_peak
584
+			height = max(1, int(200 * percentage))
585
+			f.write('<td style="text-align: center; vertical-align: bottom">%d<div style="display: block; background-color: red; width: 20px; height: %dpx"></div></td>' % (commits, height))
586
+
587
+		# bottom row: year/week
588
+		f.write('</tr><tr>')
589
+		for i in range(0, WEEKS):
590
+			f.write('<td>%s</td>' % (WEEKS - i))
591
+		f.write('</tr></table>')
592
+
549 593
 		# Hour of Day
550 594
 		f.write(html_header(2, 'Hour of Day'))
551 595
 		hour_of_day = data.getActivityByHourOfDay()

+ 8
- 0
gitstats.css Просмотреть файл

@@ -28,6 +28,14 @@ table {
28 28
 	margin-bottom: 1em;
29 29
 }
30 30
 
31
+table.noborders {
32
+	border: none;
33
+}
34
+
35
+table.noborders td {
36
+	border: none;
37
+}
38
+
31 39
 .vtable {
32 40
 	float: right;
33 41
 	clear: both;