From ea8f667beeff7b4648125fb301188506741c0991 Mon Sep 17 00:00:00 2001 From: Hamza Khchine Date: Wed, 13 Apr 2022 14:09:50 +0000 Subject: [PATCH] feat: Add management command for updating discussion user stats for all users in a course (#29973) Adds a management command to trigger an update to generate user stats for all users in a course. --- .../commands/update_user_discussion_stats.py | 30 +++++++++++++++++++ .../comment_client/course.py | 23 ++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 lms/djangoapps/discussion/management/commands/update_user_discussion_stats.py diff --git a/lms/djangoapps/discussion/management/commands/update_user_discussion_stats.py b/lms/djangoapps/discussion/management/commands/update_user_discussion_stats.py new file mode 100644 index 0000000000..ee2509f90f --- /dev/null +++ b/lms/djangoapps/discussion/management/commands/update_user_discussion_stats.py @@ -0,0 +1,30 @@ +""" +Management command to update user stats for all users in a course. +""" +import logging + +from django.core.management.base import BaseCommand +from opaque_keys.edx.keys import CourseKey + +import openedx.core.djangoapps.django_comment_common.comment_client.course as cc + +log = logging.getLogger(__name__) + + +class Command(BaseCommand): + """ + Invoke with: + + python manage.py lms update_user_discussion_stats + + """ + help = 'Update the user stats for all users for a particular course.' + + def add_arguments(self, parser): + parser.add_argument('course_id', help="ID of the Course to update user stats for") + + def handle(self, *args, **options): + course_id = options['course_id'] + course_key = CourseKey.from_string(course_id) + data = cc.update_course_users_stats(course_key) + log.info(f"Updated user stats for {data['user_count']} users in {course_key}") diff --git a/openedx/core/djangoapps/django_comment_common/comment_client/course.py b/openedx/core/djangoapps/django_comment_common/comment_client/course.py index f1f9afc69d..67d7efd228 100644 --- a/openedx/core/djangoapps/django_comment_common/comment_client/course.py +++ b/openedx/core/djangoapps/django_comment_common/comment_client/course.py @@ -87,3 +87,26 @@ def get_course_user_stats(course_key: CourseKey, params: Optional[Dict] = None) "function:get_course_user_stats", ], ) + + +@function_trace("update_course_users_stats") +def update_course_users_stats(course_key: CourseKey) -> Dict: + """ + Update the user stats for all users for a particular course. + + Args: + course_key (str|CourseKey): course key for which stats are needed. + + Returns: + dict: data returned by API. Contains count of users updated. + """ + url = f"{settings.PREFIX}/users/{course_key}/update_stats" + return perform_request( + 'post', + url, + metric_action='user.update_course_stats', + metric_tags=[ + f"course_key:{course_key}", + "function:update_course_users_stats", + ], + )