]>
Commit | Line | Data |
---|---|---|
9137135a MT |
1 | #!/usr/bin/python |
2 | ||
f6e6ff79 MT |
3 | import tornado.web |
4 | ||
0919f216 | 5 | from . import base |
9137135a | 6 | |
0919f216 | 7 | class BuilderListHandler(base.BaseHandler): |
9137135a | 8 | def get(self): |
e704b8e2 | 9 | self.render("builders/list.html", builders=self.backend.builders) |
9137135a MT |
10 | |
11 | ||
0919f216 | 12 | class 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 | 37 | class 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 | 56 | class 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 | 93 | class 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 | 104 | class 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 | 126 | class 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 | ||
143 | class BuilderEnableHander(BuilderStatusChangeHandler): | |
e704b8e2 | 144 | enabled = True |
f6e6ff79 MT |
145 | |
146 | ||
147 | class BuilderDisableHander(BuilderStatusChangeHandler): | |
e704b8e2 | 148 | enabled = False |