stat part 1

remotes/origin/statistics_migrate
Andrey 8 years ago
parent 6a4a5d64d5
commit d24f35f6b0
  1. 1
      finance/tasks.py
  2. 5
      lms/celery.py
  3. 52
      progress/tasks.py
  4. 2
      progress/views.py

@ -1,4 +1,3 @@
import logging
import os import os
import requests import requests

@ -21,9 +21,12 @@ register_signal(client)
app.conf.beat_schedule = { app.conf.beat_schedule = {
'periodic_billing': { 'periodic_billing': {
# 'schedule': crontab(day_of_month='1', hour='1', minute='1'), # заглушка на время отладки
'schedule': crontab(minute='0', hour='*/3',), 'schedule': crontab(minute='0', hour='*/3',),
'task': 'finance.tasks.periodic_billing' 'task': 'finance.tasks.periodic_billing'
},
'statistic_teachers': {
'schedule': crontab(hour=16, minute=0,),
'task': 'progress.tasks.statistic_teachers'
} }
} }

@ -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 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): def add_next_lesson(progress):
lesson_list = CourseProgressApi.get_next( lesson_list = CourseProgressApi.get_next(
@ -25,3 +35,43 @@ def add_next_lesson(progress):
) )
return pl 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()

@ -203,7 +203,7 @@ class TeacherUpdateProgress(APIView):
res = {"current": ProgressLessonSerializer(pv).data} res = {"current": ProgressLessonSerializer(pv).data}
if pv.status == ProgressLesson.STATUSES.done: if pv.status == ProgressLesson.STATUSES.done:
# TODO: Ассинхроннаязадача для celery # TODO: Ассинхронная задача для celery
res['next'] = ProgressLessonSerializer(add_next_lesson(p)).data res['next'] = ProgressLessonSerializer(add_next_lesson(p)).data
return Response(res, status=200) return Response(res, status=200)

Loading…
Cancel
Save