def get_user_activity(request: HttpRequest, email: str) -> HttpResponse: records = get_user_activity_records_for_email(email) data: List[Tuple[str, str]] = [] user_summary = get_user_activity_summary(records) content = user_activity_summary_table(user_summary) data += [("Summary", content)] content = raw_user_activity_table(records) data += [("Info", content)] title = email return render( request, "analytics/activity.html", context=dict(data=data, title=title), )
def get_user_activity(request: HttpRequest, user_profile_id: int) -> HttpResponse: user_profile = get_user_profile_by_id(user_profile_id) records = get_user_activity_records(user_profile) data: List[Tuple[str, str]] = [] user_summary = get_user_activity_summary(records) content = user_activity_summary_table(user_summary) data += [("Summary", content)] content = raw_user_activity_table(records) data += [("Info", content)] title = user_profile.delivery_email return render( request, "analytics/activity.html", context=dict(data=data, title=title), )
def realm_user_summary_table( all_records: List[QuerySet], admin_emails: Set[str]) -> Tuple[Dict[str, Dict[str, Any]], str]: user_records = {} def by_email(record: QuerySet) -> str: return record.user_profile.delivery_email for email, records in itertools.groupby(all_records, by_email): user_records[email] = get_user_activity_summary(list(records)) def get_last_visit(user_summary: Dict[str, Dict[str, datetime]], k: str) -> Optional[datetime]: if k in user_summary: return user_summary[k]["last_visit"] else: return None def get_count(user_summary: Dict[str, Dict[str, str]], k: str) -> str: if k in user_summary: return user_summary[k]["count"] else: return "" def is_recent(val: Optional[datetime]) -> bool: age = timezone_now() - val return age.total_seconds() < 5 * 60 rows = [] for email, user_summary in user_records.items(): email_link = user_activity_link(email) sent_count = get_count(user_summary, "send") cells = [user_summary["name"], email_link, sent_count] row_class = "" for field in [ "use", "send", "pointer", "desktop", "ZulipiOS", "Android" ]: visit = get_last_visit(user_summary, field) if field == "use": if visit and is_recent(visit): row_class += " recently_active" if email in admin_emails: row_class += " admin" val = format_date_for_activity_reports(visit) cells.append(val) row = dict(cells=cells, row_class=row_class) rows.append(row) def by_used_time(row: Dict[str, Any]) -> str: return row["cells"][3] rows = sorted(rows, key=by_used_time, reverse=True) cols = [ "Name", "Email", "Total sent", "Heard from", "Message sent", "Pointer motion", "Desktop", "ZulipiOS", "Android", ] title = "Summary" content = make_table(title, cols, rows, has_row_class=True) return user_records, content