]> git.ipfire.org Git - pbs.git/blame - src/web/builders.py
builders: Show correct job queue
[pbs.git] / src / web / builders.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
f6e6ff79
MT
3import tornado.web
4
0919f216 5from . import base
9137135a 6
0919f216 7class BuilderListHandler(base.BaseHandler):
9137135a 8 def get(self):
e704b8e2 9 self.render("builders/list.html", builders=self.backend.builders)
9137135a
MT
10
11
0919f216 12class BuilderDetailHandler(base.BaseHandler):
9137135a 13 def get(self, hostname):
47130fc1 14 builder = self.backend.builders.get_by_name(hostname)
9137135a 15
163d9d8b 16 # Get running and pending jobs.
3e5c8637 17 jobs = builder.active_jobs + list(builder.jobqueue)
163d9d8b
MT
18
19 # Get log.
20 log = builder.get_history(limit=5)
21
2ae27978 22 self.render("builders/detail.html", builder=builder, jobs=jobs, log=log)
9137135a 23
f6e6ff79
MT
24 @tornado.web.authenticated
25 def post(self, hostname):
26 if not self.current_user.has_perm("maintain_mirrors"):
27 raise tornado.web.HTTPError(403, "User is not allowed to do this.")
28
47130fc1 29 builder = self.backend.builders.get_by_name(hostname)
f6e6ff79 30
3e990438
MT
31 with self.db.transaction():
32 builder.description = self.get_argument("description", None)
f6e6ff79
MT
33
34 self.redirect("/builder/%s" % builder.hostname)
35
9137135a 36
0919f216 37class BuilderNewHandler(base.BaseHandler):
9137135a 38 def get(self):
2ae27978 39 self.render("builders/new.html")
9137135a 40
f6e6ff79 41 @tornado.web.authenticated
9137135a 42 def post(self):
f6e6ff79
MT
43 if not self.current_user.has_perm("maintain_builders"):
44 raise tornado.web.HTTPError(403)
45
9137135a
MT
46 name = self.get_argument("name")
47
48 # Create a new builder.
f6e6ff79 49 builder, passphrase = \
e704b8e2 50 self.backend.builders.create(name, user=self.current_user)
9137135a 51
2ae27978 52 self.render("builders/pass.html", action="new", builder=builder,
f6e6ff79 53 passphrase=passphrase)
9137135a
MT
54
55
0919f216 56class BuilderEditHandler(base.BaseHandler):
9137135a
MT
57 @tornado.web.authenticated
58 def get(self, hostname):
47130fc1 59 builder = self.backend.builders.get_by_name(hostname)
9137135a
MT
60 if not builder:
61 raise tornado.web.HTTPError(404, "Builder not found")
62
2ae27978 63 self.render("builders/edit.html", builder=builder)
9137135a
MT
64
65 @tornado.web.authenticated
66 def post(self, hostname):
47130fc1 67 builder = self.backend.builders.get_by_name(hostname)
9137135a 68 if not builder:
f6e6ff79
MT
69 raise tornado.web.HTTPError(404, "Builder not found: %s" % hostname)
70
71 # Check for sufficient right to edit things.
72 if not self.current_user.has_perm("maintain_builders"):
73 raise tornado.web.HTTPError(403)
9137135a 74
fd43d5e1
MT
75 with self.db.transaction():
76 builder.enabled = self.get_argument("enabled", False)
77 builder.testmode = self.get_argument("testmode", True)
78
79 # Save max_jobs.
80 max_jobs = self.get_argument("max_jobs", builder.max_jobs)
81 try:
82 max_jobs = int(max_jobs)
83 except TypeError:
84 max_jobs = 1
85
86 if not max_jobs in range(1, 100):
87 max_jobs = 1
88 builder.max_jobs = max_jobs
9137135a
MT
89
90 self.redirect("/builder/%s" % builder.hostname)
91
92
0919f216 93class BuilderRenewPassphraseHandler(base.BaseHandler):
f6e6ff79 94 @tornado.web.authenticated
9137135a 95 def get(self, name):
47130fc1 96 builder = self.backend.builders.get_by_name(name)
9137135a 97
f6e6ff79 98 passphrase = builder.regenerate_passphrase()
9137135a 99
2ae27978 100 self.render("builders/pass.html", action="update", builder=builder,
f6e6ff79 101 passphrase=passphrase)
9137135a
MT
102
103
0919f216 104class BuilderDeleteHandler(base.BaseHandler):
f6e6ff79 105 @tornado.web.authenticated
9137135a 106 def get(self, name):
47130fc1 107 builder = self.backend.builders.get_by_name(name)
f6e6ff79
MT
108 if not builder:
109 raise tornado.web.HTTPError(404, "Builder not found: %s" % name)
110
111 # Check for sufficient right to delete this builder.
112 if not self.current_user.has_perm("maintain_builders"):
113 raise tornado.web.HTTPError(403)
9137135a
MT
114
115 confirmed = self.get_argument("confirmed", None)
116 if confirmed:
e704b8e2
MT
117 with self.db.transaction():
118 builder.deleted = True
f6e6ff79 119
9137135a
MT
120 self.redirect("/builders")
121 return
122
2ae27978 123 self.render("builders/delete.html", builder=builder)
f6e6ff79
MT
124
125
0919f216 126class BuilderStatusChangeHandler(base.BaseHandler):
e704b8e2 127 enabled = None
f6e6ff79
MT
128
129 @tornado.web.authenticated
130 def get(self, hostname):
47130fc1 131 builder = self.backend.builders.get_by_name(hostname)
f6e6ff79
MT
132 if not builder:
133 raise tornado.web.HTTPError(404, "Builder not found: %s" % hostname)
134
135 # Check for sufficient right to edit things.
136 if self.current_user.has_perm("maintain_builders"):
e704b8e2
MT
137 with self.db.transaction():
138 builder.enabled = self.enabled
f6e6ff79
MT
139
140 self.redirect("/builder/%s" % builder.name)
141
142
143class BuilderEnableHander(BuilderStatusChangeHandler):
e704b8e2 144 enabled = True
f6e6ff79
MT
145
146
147class BuilderDisableHander(BuilderStatusChangeHandler):
e704b8e2 148 enabled = False