From d24f35f6b0485599fc8212f53738d3832eb474ee Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 27 Apr 2018 15:49:40 +0300 Subject: [PATCH] stat part 1 --- finance/tasks.py | 1 - lms/celery.py | 5 ++++- progress/tasks.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++- progress/views.py | 2 +- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/finance/tasks.py b/finance/tasks.py index a85c55f..23919e3 100644 --- a/finance/tasks.py +++ b/finance/tasks.py @@ -1,4 +1,3 @@ -import logging import os import requests diff --git a/lms/celery.py b/lms/celery.py index 4f9d66d..69ccdf8 100644 --- a/lms/celery.py +++ b/lms/celery.py @@ -21,9 +21,12 @@ register_signal(client) app.conf.beat_schedule = { 'periodic_billing': { - # 'schedule': crontab(day_of_month='1', hour='1', minute='1'), # заглушка на время отладки 'schedule': crontab(minute='0', hour='*/3',), 'task': 'finance.tasks.periodic_billing' + }, + 'statistic_teachers': { + 'schedule': crontab(hour=16, minute=0,), + 'task': 'progress.tasks.statistic_teachers' } } diff --git a/progress/tasks.py b/progress/tasks.py index 4a9a363..5505c4a 100644 --- a/progress/tasks.py +++ b/progress/tasks.py @@ -1,6 +1,16 @@ -from courses.api import CourseProgressApi +from dateutil.relativedelta import relativedelta + +from courses.api import CourseProgressApi, CourseParamsApi from progress.models import ProgressLesson +from django.utils import timezone +import os +import csv + +from lms import celery_app +from django.conf import settings +from django.core.mail import EmailMessage + def add_next_lesson(progress): lesson_list = CourseProgressApi.get_next( @@ -25,3 +35,43 @@ def add_next_lesson(progress): ) return pl + + +@celery_app.task +def statistic_teachers(): + file_dir = "%s/analytics/teachers/" % (settings.MEDIA_ROOT,) + os.makedirs(os.path.dirname(file_dir), exist_ok=True) + path = '%s%s' % (file_dir, timezone.now().strftime('%Y-%m-%d__%H-%M')) + + progresses = ProgressLesson.objects.filter(status='wait') + + with open(path, 'w') as csv_file: + csv_writer = csv.writer(csv_file) + csv_writer.writerow( + ['Курс', 'Препод', 'Ранее', '6 Дней', '5 Дней', "4 Дня", "3 Дня", "2 Дня", "Вчера", "Сегодня"]) + for i in progresses.values('progress__teacher__email', 'progress__course_token').distinct(): + row = [] + course_token = i['progress__course_token'] + teacher_email = i['progress__teacher__email'] + progresses_sub = progresses.filter(progress__course_token=course_token, progress__teacher__email=teacher_email) + + row.append(CourseParamsApi(course_token).get_slug_and_title()['title']) + row.append(teacher_email) + row.append(progresses_sub.filter(last_update__lt=(timezone.now() - relativedelta(days=7))).count()) + for j in range(7): + from_d = timezone.now() - relativedelta(days=(7 - j)) + to_d = timezone.now() - relativedelta(days=(6 - j)) + row.append(progresses_sub.filter(last_update__gte=from_d, last_update__lt=to_d).count()) + + csv_writer.writerow(row) + + message = EmailMessage( + 'Выгрузка по преподам.', + 'Файл приложен', + 'robo@skillbox.ru', + [settings.SUPPORT_EMAIL,], + ['andrey.korolev@skillbox.ru',], + reply_to=['andrey.korolev@skillbox.ru'], + ) + message.attach_file(path) + message.send() diff --git a/progress/views.py b/progress/views.py index e70e22e..3073fce 100644 --- a/progress/views.py +++ b/progress/views.py @@ -203,7 +203,7 @@ class TeacherUpdateProgress(APIView): res = {"current": ProgressLessonSerializer(pv).data} if pv.status == ProgressLesson.STATUSES.done: - # TODO: Ассинхроннаязадача для celery + # TODO: Ассинхронная задача для celery res['next'] = ProgressLessonSerializer(add_next_lesson(p)).data return Response(res, status=200)