PRODX-39509 Implementing auto-triggering the analyzing of today's run
Added time enums for easy controlling of time duration in code
Added clock to the nav bar
Changed default created_after to more proper way of definition through the Django's timedelta,
because standard datetime library can't pass it's value to the model
Change-Id: I8411853dfc3c420a96254a1091f093c24a4217ae
diff --git a/testrail_bot/control/views.py b/testrail_bot/control/views.py
index bff73e0..8d5f692 100644
--- a/testrail_bot/control/views.py
+++ b/testrail_bot/control/views.py
@@ -4,6 +4,7 @@
from .celery_tasks import test_rail_api
from django.shortcuts import render, redirect, HttpResponse
+from django_celery_beat.models import CrontabSchedule, PeriodicTasks
from . import models
from . import forms
@@ -240,3 +241,79 @@
"report2": report.report2,
"is_finished": report.report1.finished and report.report2.finished,
"diff_table": diff_table})
+
+
+def schedulers(request):
+
+ return render(
+ request, "control/schedulers.html",
+ {"schedulers": models.CronPeriodicTask.objects.all()})
+
+
+def scheduler(request, pk=None):
+ if request.method == "POST":
+ return save_scheduler(request)
+
+ if pk:
+ task_pk = models.CronPeriodicTask.objects.get(pk=pk)
+ form = forms.PeriodicTaskForm(instance=task_pk)
+ else:
+ form = forms.PeriodicTaskForm()
+
+ return render(
+ request, "control/scheduler.html",
+ {
+ "form": form,
+ "pk": pk,
+ "TASK_CHOICES": models.TASK_CHOICES
+ }
+ )
+
+
+def save_scheduler(request, pk=None):
+ minute, hour, day_of_month, month_of_year, day_of_week = \
+ request.POST.get("cron", "* * * * *").split(" ")
+ if pk is None:
+ sch = CrontabSchedule.objects.create(
+ minute=minute,
+ hour=hour,
+ day_of_month=day_of_month,
+ month_of_year=month_of_year,
+ day_of_week=day_of_week
+ )
+ task = models.CronPeriodicTask.objects.create(
+ crontab=sch,
+ cron=request.POST.get("cron"),
+ name=request.POST.get("name"),
+ task="control.celery_tasks.tasks.check_today_testplan",
+ enabled=request.POST.get("enabled") == 'on',
+ # TODO(harhipova): uncomment when implemented tasks with arguments
+ # args=args,
+ # kwargs=kwargs,
+ )
+ else:
+ task = models.CronPeriodicTask.objects.get(pk=pk)
+ form = forms.PeriodicTaskForm(request.POST, instance=task)
+ CrontabSchedule.objects.filter(id=task.crontab.id).update(
+ minute=minute,
+ hour=hour,
+ day_of_month=day_of_month,
+ month_of_year=month_of_year,
+ day_of_week=day_of_week
+ )
+ form.save()
+ PeriodicTasks.update_changed()
+ return render(
+ request, "control/scheduler.html",
+ {
+ "form": form,
+ "pk": task.id,
+ "TASK_CHOICES": models.TASK_CHOICES
+ }
+ )
+
+
+def delete_scheduler(request, pk):
+ task = models.CronPeriodicTask.objects.get(pk=pk)
+ task.delete()
+ return redirect("schedulers")