|
|
@@ -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()
|