mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 23:13:25 +00:00
generate-activity-metrics: Display by-week usage numbers changes.
(imported from commit 22bc1592c35c5f86ab89f7f4fc14ba7dbd2375db)
This commit is contained in:
@@ -71,31 +71,51 @@ def best_during_day(data, day):
|
|||||||
def percent_diff(prev, cur):
|
def percent_diff(prev, cur):
|
||||||
if prev is None or cur is None:
|
if prev is None or cur is None:
|
||||||
return None
|
return None
|
||||||
return ((cur - prev) / prev) * 100
|
if cur == 0 and prev == 0:
|
||||||
|
return ""
|
||||||
|
if prev == 0:
|
||||||
|
return "NaN"
|
||||||
|
return "%.02f%%" % (((cur - prev) / prev) * 100,)
|
||||||
|
|
||||||
def parse_data(data, today):
|
def parse_data(data, today):
|
||||||
|
def print_results(all_days, days, compare_with_last=False):
|
||||||
|
first_data_point = True
|
||||||
|
best_last_time = 0
|
||||||
|
for i in all_days:
|
||||||
|
day = today - timedelta(days=i)
|
||||||
|
# Ignore weekends
|
||||||
|
if day.weekday() in days:
|
||||||
|
best = best_during_day(metric['datapoints'], day)
|
||||||
|
if best is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not compare_with_last:
|
||||||
|
percent = percent_diff(best, best_today)
|
||||||
|
else:
|
||||||
|
if first_data_point:
|
||||||
|
percent = ""
|
||||||
|
first_data_point = False
|
||||||
|
else:
|
||||||
|
percent = percent_diff(best_last_time, best)
|
||||||
|
|
||||||
|
if best is not None:
|
||||||
|
print "Last %s, %s %s ago:\t%.01f\t\t%s" \
|
||||||
|
% (day.strftime("%A"), i, "days", best, percent)
|
||||||
|
best_last_time = best
|
||||||
|
|
||||||
for metric in data:
|
for metric in data:
|
||||||
# print "Got %s with data points %s" % (metric['target'], len(metric['datapoints']))
|
# print "Got %s with data points %s" % (metric['target'], len(metric['datapoints']))
|
||||||
# Calculate % between peak 2hr and 10min across each day and week
|
# Calculate % between peak 2hr and 10min across each day and week
|
||||||
metric['datapoints'].sort(key=lambda p: p[1])
|
metric['datapoints'].sort(key=lambda p: p[1])
|
||||||
|
|
||||||
best_today = best_during_day(metric['datapoints'], today)
|
best_today = best_during_day(metric['datapoints'], today)
|
||||||
print "Today, 0 days ago:\t\t(%.01f users)" % (best_today,)
|
print "Date\t\t\t\tUsers\t\tChange from then to today"
|
||||||
|
print "Today, 0 days ago:\t\t%.01f" % (best_today,)
|
||||||
|
print_results(xrange(1, 1000), [0, 1, 2, 3, 4, 7])
|
||||||
|
|
||||||
for i in xrange(1, 100):
|
print "\n\nWeekly Wednesday results"
|
||||||
day = today - timedelta(days=i)
|
print "Date\t\t\t\tUsers\t\tDelta from previous week"
|
||||||
week = today - timedelta(weeks=i*7)
|
print_results(reversed(xrange(1, 1000)), [2], True)
|
||||||
# Ignore weekends
|
|
||||||
if day.weekday() not in [5, 6]:
|
|
||||||
best = best_during_day(metric['datapoints'], day)
|
|
||||||
|
|
||||||
if best is not None:
|
|
||||||
print "Last %s, %s days ago:\t(%.01f users)\t\t%.02f%%" \
|
|
||||||
% (day.strftime("%A"), i, best, percent_diff(best, best_today))
|
|
||||||
best = best_during_day(metric['datapoints'], week)
|
|
||||||
if best is not None:
|
|
||||||
print "Weekly %% change from %s weeks ago today:\t\t%.02f" \
|
|
||||||
% (i, percent_diff(best, best_today))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user