analytics: Replace get_user_profile_by email in client_activity.

This commit is contained in:
Vishnu Ks
2017-07-14 04:18:41 +05:30
committed by Tim Abbott
parent e5c5960faa
commit b0e4cfd480

View File

@@ -4,28 +4,32 @@ from __future__ import print_function
from typing import Any from typing import Any
from argparse import ArgumentParser from argparse import ArgumentParser
from django.core.management.base import BaseCommand
from django.db.models import Count, QuerySet from django.db.models import Count, QuerySet
from django.utils.timezone import now as timezone_now from django.utils.timezone import now as timezone_now
from zerver.models import UserActivity, UserProfile, Realm, \ from zerver.lib.management import ZulipBaseCommand
get_realm, get_user_profile_by_email from zerver.models import UserActivity
import datetime import datetime
class Command(BaseCommand): class Command(ZulipBaseCommand):
help = """Report rough client activity globally, for a realm, or for a user help = """Report rough client activity globally, for a realm, or for a user
Usage examples: Usage examples:
./manage.py client_activity ./manage.py client_activity --target server
./manage.py client_activity zulip ./manage.py client_activity --target realm --realm zulip
./manage.py client_activity hamlet@zulip.com""" ./manage.py client_activity --target user --user hamlet@zulip.com --realm zulip"""
def add_arguments(self, parser): def add_arguments(self, parser):
# type: (ArgumentParser) -> None # type: (ArgumentParser) -> None
parser.add_argument('arg', metavar='<arg>', type=str, nargs='?', default=None, parser.add_argument('--target', dest='target', required=True, type=str,
help="realm or user to estimate client activity for") help="'server' will calculate client activity of the entire server. "
"'realm' will calculate client activity of realm. "
"'user' will calculate client activity of the user.")
parser.add_argument('--user', dest='user', type=str,
help="The email adress of the user you want to calculate activity.")
self.add_realm_args(parser)
def compute_activity(self, user_activity_objects): def compute_activity(self, user_activity_objects):
# type: (QuerySet) -> None # type: (QuerySet) -> None
@@ -60,22 +64,17 @@ Usage examples:
def handle(self, *args, **options): def handle(self, *args, **options):
# type: (*Any, **str) -> None # type: (*Any, **str) -> None
if options['arg'] is None: realm = self.get_realm(options)
if options["user"] is None:
if options["target"] == "server" and realm is None:
# Report global activity. # Report global activity.
self.compute_activity(UserActivity.objects.all()) self.compute_activity(UserActivity.objects.all())
elif options["target"] == "realm" and realm is not None:
self.compute_activity(UserActivity.objects.filter(user_profile__realm=realm))
else: else:
arg = options['arg'] self.print_help("./manage.py", "client_activity")
try: elif options["target"] == "user":
# Report activity for a user. user_profile = self.get_user(options["user"], realm)
user_profile = get_user_profile_by_email(arg) self.compute_activity(UserActivity.objects.filter(user_profile=user_profile))
self.compute_activity(UserActivity.objects.filter( else:
user_profile=user_profile)) self.print_help("./manage.py", "client_activity")
except UserProfile.DoesNotExist:
try:
# Report activity for a realm.
realm = get_realm(arg)
self.compute_activity(UserActivity.objects.filter(
user_profile__realm=realm))
except Realm.DoesNotExist:
print("Unknown user or realm %s" % (arg,))
exit(1)