blob: 67a368df1a52e0d0247ecece9c2af82dedc8a2c4 [file] [log] [blame]
Oleksii Petrenko99539bd2020-07-31 20:00:06 +03001import datetime
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +03002import json
3import os
4
5from django.shortcuts import render, redirect, HttpResponse
6
7from . import models
8from . import forms
Oleksii Petrenko68268172020-09-28 16:58:13 +03009from .celery_tasks.tasks import process_run, update_plot_data
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030010
11
12def index(request):
Oleksii Petrenko68268172020-09-28 16:58:13 +030013 runs = models.TestRailTestRun.objects.all()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030014 return render(request, "control/index.html", {"runs": runs})
15
16
17def redirect_to_index(request):
18 return redirect("index")
19
20
21def single_run(request, run_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030022 run = models.TestRailTestRun.objects.get(pk=run_id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030023 if request.method == "POST":
24 form = forms.TestRunForm(request.POST, instance=run)
25 if form.is_valid():
26 form.save()
27 return redirect("single_run", run_id)
28 else:
29 form = forms.TestRunForm(instance=run)
30
31 return render(request, "control/update_run.html",
32 {"form": form, "run_id": run_id})
33
34
35def create_run(request):
36 if request.method == "POST":
37 form = forms.TestRunForm(request.POST)
38 if form.is_valid():
39 obj = form.save()
40 return redirect("single_run", obj.id)
41 else:
42 form = forms.TestRunForm()
43
44 return render(request, "control/create_run.html", {"form": form})
45
46
47def list_reports(request):
Oleksii Petrenko68268172020-09-28 16:58:13 +030048 reports = models.TestRailReport.objects.order_by("-created_at").all()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030049 return render(request, "control/reports.html", {"reports": reports})
50
51
52def single_report(request, report_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030053 report = models.TestRailReport.objects.get(pk=report_id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030054 data = report.path.read().decode("utf-8")
55 if request.method == "POST" and request.is_ajax():
56 return HttpResponse(
57 json.dumps({"data": data, "finished": report.finished}),
58 content_type="application/json")
59 return render(request, "control/report.html",
60 {"report_id": report.id, "report": data})
61
62
63def submit_run(request, run_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030064 run = models.TestRailTestRun.objects.get(pk=run_id)
Oleksii Petrenko7118f8c2020-07-17 12:45:09 +030065 report_name = "{}-{}".format(
Oleksii Petrenko99539bd2020-07-31 20:00:06 +030066 run.run_name, datetime.datetime.isoformat(datetime.datetime.now()))
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030067 path = os.path.join(models.fs.location, report_name)
68 with open(path, "w"):
69 pass
Oleksii Petrenko99539bd2020-07-31 20:00:06 +030070 form = forms.TestRunForm(request.POST)
71 run_date = None
72 if form.is_valid():
73 run_date = datetime.datetime.combine(
74 form.cleaned_data["timestamp"] + datetime.timedelta(days=1),
75 datetime.datetime.min.time()).timestamp()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030076
Oleksii Petrenko68268172020-09-28 16:58:13 +030077 report = models.TestRailReport(
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030078 test_run=run,
79 report_name=report_name,
80 path=path)
81 report.save()
Oleksii Petrenko99539bd2020-07-31 20:00:06 +030082 process_run.delay(run_id, report.id, path, run_date)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030083
Oleksii Petrenko12508832020-07-10 18:13:53 +030084 return redirect("single_report", report.id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030085
86
87def show_help(request):
88 return render(request, "control/help.html")
Oleksii Petrenko68268172020-09-28 16:58:13 +030089
90
91def update_jenkins_plot(request):
92 try:
93 models.ActionLog.objects.get(name="update_plot_started")
94 return HttpResponse("Update in progress", status=403)
95 except models.ActionLog.DoesNotExist:
96 pass
97 update = models.ActionLog(
98 name="update_plot_started", date=datetime.datetime.now())
99 update.save()
100 update_plot_data.delay()
101 return HttpResponse("Started Update", status=200)
102
103
104def jenkins_plot(request):
105 try:
106 update_date = models.ActionLog.objects.get(
107 name="update_jenkins_plot").date
108 except models.ActionLog.DoesNotExist:
109 update_date = None
110 try:
111 models.ActionLog.objects.get(name="update_plot_started")
112 update_started = True
113 except models.ActionLog.DoesNotExist:
114 update_started = False
115
116 job_names_path = os.path.join(models.fs.location, "job_names.txt")
117 job_names = []
118 if os.path.exists(job_names_path):
119 try:
120 with open(job_names_path, "r") as f:
121 job_names = json.load(f)
122 except:
123 pass
124
125 return render(
126 request, "control/jenkins_plot.html",
127 {"update_date": update_date, "update_started": update_started,
128 "job_names": enumerate(job_names, 1)})