Index: my_reviews.py |
diff --git a/my_reviews.py b/my_reviews.py |
index fc18b3565a2d3b19db4e7d7c21e864e6e3fa928f..32e61443f63ca02b4c66675f62f9caa3220b127a 100755 |
--- a/my_reviews.py |
+++ b/my_reviews.py |
@@ -61,31 +61,54 @@ class Stats(object): |
def __init__(self): |
self.total = 0 |
self.actually_reviewed = 0 |
- self.average_latency = 0. |
- self.number_latency = 0 |
+ self.latencies = [] |
self.lgtms = 0 |
self.multiple_lgtms = 0 |
self.drive_by = 0 |
self.not_requested = 0 |
self.self_review = 0 |
- self.percent_done = 0. |
self.percent_lgtm = 0. |
self.percent_drive_by = 0. |
self.percent_not_requested = 0. |
self.days = 0 |
- self.review_per_day = 0. |
- self.review_done_per_day = 0. |
- def add_latency(self, latency): |
- self.average_latency = ( |
- (self.average_latency * self.number_latency + latency) / |
- (self.number_latency + 1.)) |
- self.number_latency += 1 |
+ @property |
+ def average_latency(self): |
+ if not self.latencies: |
+ return 0 |
+ return sum(self.latencies) / float(len(self.latencies)) |
+ |
+ @property |
+ def median_latency(self): |
+ if not self.latencies: |
+ return 0 |
+ length = len(self.latencies) |
+ latencies = sorted(self.latencies) |
+ if (length & 1) == 0: |
+ return (latencies[length/2] + latencies[length/2+1]) / 2. |
+ else: |
+ return latencies[length/2] |
+ |
+ @property |
+ def percent_done(self): |
+ if not self.total: |
+ return 0 |
+ return self.actually_reviewed * 100. / self.total |
+ |
+ @property |
+ def review_per_day(self): |
+ if not self.days: |
+ return 0 |
+ return self.total * 1. / self.days |
+ |
+ @property |
+ def review_done_per_day(self): |
+ if not self.days: |
+ return 0 |
+ return self.actually_reviewed * 1. / self.days |
def finalize(self, first_day, last_day): |
- if self.total: |
- self.percent_done = (self.actually_reviewed * 100. / self.total) |
if self.actually_reviewed: |
self.percent_lgtm = (self.lgtms * 100. / self.actually_reviewed) |
self.percent_drive_by = (self.drive_by * 100. / self.actually_reviewed) |
@@ -93,9 +116,6 @@ class Stats(object): |
self.not_requested * 100. / self.actually_reviewed) |
if first_day and last_day: |
self.days = (to_datetime(last_day) - to_datetime(first_day)).days + 1 |
- if self.days: |
- self.review_per_day = self.total * 1. / self.days |
- self.review_done_per_day = self.actually_reviewed * 1. / self.days |
def _process_issue_lgtms(issue, reviewer, stats): |
@@ -145,7 +165,7 @@ def _process_issue_latency(issue, reviewer, stats): |
stats.not_requested += 1 |
return '<no rqst sent>' |
if latency > 0: |
- stats.add_latency(latency) |
+ stats.latencies.append(latency) |
else: |
stats.not_requested += 1 |
return to_time(latency) |
@@ -239,6 +259,9 @@ def print_reviews(reviewer, created_after, created_before, instance_url): |
print >> sys.stderr, ( |
'Average latency from request to first comment is %s.' % |
to_time(stats.average_latency)) |
+ print >> sys.stderr, ( |
+ 'Median latency from request to first comment is %s.' % |
+ to_time(stats.median_latency)) |
def print_count(reviewer, created_after, created_before, instance_url): |