]> git.ipfire.org Git - people/jschlag/pbs.git/blame - src/web/handlers_jobs.py
Merge branch 'master' of git://git.ipfire.org/pbs
[people/jschlag/pbs.git] / src / web / handlers_jobs.py
CommitLineData
f6e6ff79
MT
1#!/usr/bin/python
2
3import tornado.web
4
2c909128 5from .handlers_base import BaseHandler
f6e6ff79 6
9177f86a
MT
7class 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
32class 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
39class 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
51class 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
73class 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
113class 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)