]>
Commit | Line | Data |
---|---|---|
f6e6ff79 MT |
1 | #!/usr/bin/python |
2 | ||
3 | import tornado.web | |
4 | ||
2c909128 | 5 | from .handlers_base import BaseHandler |
f6e6ff79 | 6 | |
9177f86a MT |
7 | class JobsIndexHandler(BaseHandler): |
8 | def get(self): | |
9 | # Filter for a certain arch. | |
a65809ec MT |
10 | arch = self.get_argument("arch", None) |
11 | if not arch or not self.backend.arches.exists(arch): | |
12 | raise tornado.web.HTTPError(400, "Architecture does not exist") | |
9177f86a MT |
13 | |
14 | # Check if we need to filter for a certain builder. | |
15 | builder_name = self.get_argument("builder", None) | |
16 | if builder_name: | |
17 | builder = self.pakfire.builders.get_by_name(builder_name) | |
18 | else: | |
19 | builder = None | |
20 | ||
21 | # Filter for a certain date. | |
22 | date = self.get_argument("date", None) | |
23 | ||
24 | # Get all jobs, that fulfill the criteria. | |
25 | jobs = self.pakfire.jobs.get_latest(limit=50, arch=arch, builder=builder, | |
26 | date=date) | |
27 | ||
28 | self.render("jobs-index.html", jobs=jobs, arch=arch, builder=builder, | |
29 | date=date) | |
30 | ||
31 | ||
32 | class JobsFilterHandler(BaseHandler): | |
33 | def get(self): | |
9177f86a MT |
34 | builders = self.pakfire.builders.get_all() |
35 | ||
a65809ec | 36 | self.render("jobs-filter.html", arches=self.backend.arches, builders=builders) |
9177f86a MT |
37 | |
38 | ||
f6e6ff79 MT |
39 | class JobDetailHandler(BaseHandler): |
40 | def get(self, uuid): | |
41 | job = self.pakfire.jobs.get_by_uuid(uuid) | |
42 | if not job: | |
43 | raise tornado.web.HTTPError(404, "No such job: %s" % job) | |
44 | ||
45 | # Cache the log. | |
46 | log = job.get_log() | |
47 | ||
48 | self.render("jobs-detail.html", job=job, build=job.build, log=log) | |
49 | ||
50 | ||
51 | class JobBuildrootHandler(BaseHandler): | |
8cfba2fb | 52 | def get(self, uuid): |
f6e6ff79 MT |
53 | job = self.pakfire.jobs.get_by_uuid(uuid) |
54 | if not job: | |
55 | raise tornado.web.HTTPError(404, "Job not found: %s" % uuid) | |
56 | ||
8cfba2fb MT |
57 | # Calculate the download size and buildroot size. |
58 | download_size = 0 | |
59 | buildroot_size = 0 | |
60 | ||
6990cac2 | 61 | for name, uuid, pkg in job.buildroot: |
8cfba2fb MT |
62 | if not pkg: |
63 | continue | |
64 | ||
65 | download_size += pkg.filesize | |
66 | buildroot_size += pkg.size | |
67 | ||
68 | self.render("jobs-buildroot.html", job=job, build=job.build, | |
3055024b | 69 | buildroot=job.buildroot, download_size=download_size, |
8cfba2fb | 70 | buildroot_size=buildroot_size) |
f6e6ff79 MT |
71 | |
72 | ||
73 | class JobScheduleHandler(BaseHandler): | |
74 | allowed_types = ("test", "rebuild",) | |
75 | ||
76 | @tornado.web.authenticated | |
77 | def get(self, uuid): | |
78 | type = self.get_argument("type") | |
79 | assert type in self.allowed_types | |
80 | ||
81 | job = self.pakfire.jobs.get_by_uuid(uuid) | |
82 | if not job: | |
83 | raise tornado.web.HTTPError(404, "Job not found: %s" % uuid) | |
84 | ||
85 | self.render("job-schedule-%s.html" % type, type=type, job=job, build=job.build) | |
86 | ||
87 | @tornado.web.authenticated | |
88 | def post(self, uuid): | |
89 | type = self.get_argument("type") | |
90 | assert type in self.allowed_types | |
91 | ||
92 | job = self.pakfire.jobs.get_by_uuid(uuid) | |
93 | if not job: | |
94 | raise tornado.web.HTTPError(404, "Job not found: %s" % uuid) | |
95 | ||
96 | # Get the start offset. | |
97 | offset = self.get_argument("offset", 0) | |
98 | try: | |
99 | offset = int(offset) | |
100 | except TypeError: | |
101 | offset = 0 | |
102 | ||
103 | # Submit the build. | |
104 | if type == "test": | |
105 | job = job.schedule_test(offset) | |
106 | ||
107 | elif type == "rebuild": | |
108 | job.schedule_rebuild(offset) | |
109 | ||
110 | self.redirect("/job/%s" % job.uuid) | |
111 | ||
112 | ||
113 | class JobAbortHandler(BaseHandler): | |
114 | def get_job(self, uuid): | |
115 | job = self.pakfire.jobs.get_by_uuid(uuid) | |
116 | if not job: | |
117 | raise tornado.web.HTTPError(404, "Job not found: %s" % uuid) | |
118 | ||
119 | return job | |
120 | ||
121 | @tornado.web.authenticated | |
122 | def get(self, uuid): | |
123 | job = self.get_job(uuid) | |
124 | ||
125 | # XXX Check if user has the right to manage the job. | |
126 | ||
127 | self.render("jobs-abort.html", job=job) | |
128 | ||
129 | @tornado.web.authenticated | |
130 | def post(self, uuid): | |
131 | job = self.get_job(uuid) | |
132 | ||
133 | # XXX Check if user has the right to manage the job. | |
134 | ||
135 | # Only running builds can be set to aborted state. | |
136 | if not job.state == "running": | |
137 | # XXX send the user a nicer error message. | |
138 | self.redirect("/job/%s" % job.uuid) | |
139 | return | |
140 | ||
141 | # Set the job into aborted state. | |
142 | job.state = "aborted" | |
143 | ||
144 | # 0 means the job was aborted by the user. | |
145 | job.aborted_state = 0 | |
146 | ||
147 | self.redirect("/job/%s" % job.uuid) |