1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from twisted.internet import defer
17 from buildbot.status.web.base import HtmlResource
18 from buildbot.status.web.base import build_get_class, path_to_builder, path_to_build
19 from buildbot.sourcestamp import SourceStamp
22
24 - def getPageTitle(self, request):
25 status = self.getStatus(request)
26 p = status.getTitle()
27 if p:
28 return "BuildBot: %s" % p
29 else:
30 return "BuildBot"
31
32
33
35 if "reload" in request.args:
36 try:
37 reload_time = int(request.args["reload"][0])
38 return max(reload_time, 15)
39 except ValueError:
40 pass
41 return None
42
63
64 @defer.deferredGenerator
92
94 """Given two source stamps, we want to assign them to the same row if
95 they are the same version of code, even if they differ in minor detail.
96
97 This function returns an appropriate comparison key for that.
98 """
99 return (ss.branch, ss.revision, ss.patch)
100
127
153
155
156 status = None
157 changemaster = None
158
159 @defer.deferredGenerator
160 - def content(self, request, cxt):
161 """This method builds the regular grid display.
162 That is, build stamps across the top, build hosts down the left side
163 """
164
165
166 numBuilds = int(request.args.get("width", [5])[0])
167 categories = request.args.get("category", [])
168 branch = request.args.get("branch", [ANYBRANCH])[0]
169 if branch == 'trunk': branch = None
170
171
172 status = self.getStatus(request)
173 stamps = self.getRecentSourcestamps(status, numBuilds, categories, branch)
174
175 cxt['refresh'] = self.get_reload_time(request)
176
177 cxt.update({'categories': categories,
178 'branch': branch,
179 'ANYBRANCH': ANYBRANCH,
180 'stamps': map(SourceStamp.asDict, stamps)
181 })
182
183 sortedBuilderNames = status.getBuilderNames()[:]
184 sortedBuilderNames.sort()
185
186 cxt['builders'] = []
187
188 for bn in sortedBuilderNames:
189 builds = [None] * len(stamps)
190
191 builder = status.getBuilder(bn)
192 if categories and builder.category not in categories:
193 continue
194
195 for build in self.getRecentBuilds(builder, numBuilds, branch):
196 ss = build.getSourceStamp(absolute=True)
197 key= self.getSourceStampKey(ss)
198 for i in range(len(stamps)):
199 if key == self.getSourceStampKey(stamps[i]) and builds[i] is None:
200 builds[i] = build
201
202 wfd = defer.waitForDeferred(
203 self.builder_cxt(request, builder))
204 yield wfd
205 b = wfd.getResult()
206
207 b['builds'] = []
208 for build in builds:
209 b['builds'].append(self.build_cxt(request, build))
210 cxt['builders'].append(b)
211
212 template = request.site.buildbot_service.templates.get_template("grid.html")
213 yield template.render(**cxt)
214
217
218 status = None
219 changemaster = None
220 default_rev_order = "asc"
221
222 @defer.deferredGenerator
223 - def content(self, request, cxt):
224 """This method builds the transposed grid display.
225 That is, build hosts across the top, build stamps down the left side
226 """
227
228
229 numBuilds = int(request.args.get("length", [5])[0])
230 categories = request.args.get("category", [])
231 branch = request.args.get("branch", [ANYBRANCH])[0]
232 if branch == 'trunk': branch = None
233
234 rev_order = request.args.get("rev_order", [self.default_rev_order])[0]
235 if rev_order not in ["asc", "desc"]:
236 rev_order = self.default_rev_order
237
238 cxt['refresh'] = self.get_reload_time(request)
239
240
241 status = self.getStatus(request)
242 stamps = self.getRecentSourcestamps(status, numBuilds, categories, branch)
243
244 cxt.update({'categories': categories,
245 'branch': branch,
246 'ANYBRANCH': ANYBRANCH,
247 'stamps': map(SourceStamp.asDict, stamps),
248 })
249
250 sortedBuilderNames = status.getBuilderNames()[:]
251 sortedBuilderNames.sort()
252
253 cxt['sorted_builder_names'] = sortedBuilderNames
254 cxt['builder_builds'] = builder_builds = []
255 cxt['builders'] = builders = []
256 cxt['range'] = range(len(stamps))
257 if rev_order == "desc":
258 cxt['range'].reverse()
259
260 for bn in sortedBuilderNames:
261 builds = [None] * len(stamps)
262
263 builder = status.getBuilder(bn)
264 if categories and builder.category not in categories:
265 continue
266
267 for build in self.getRecentBuilds(builder, numBuilds, branch):
268 ss = build.getSourceStamp(absolute=True)
269 key = self.getSourceStampKey(ss)
270 for i in range(len(stamps)):
271 if key == self.getSourceStampKey(stamps[i]) and builds[i] is None:
272 builds[i] = build
273
274 wfd = defer.waitForDeferred(
275 self.builder_cxt(request, builder))
276 yield wfd
277 builders.append(wfd.getResult())
278
279 builder_builds.append(map(lambda b: self.build_cxt(request, b), builds))
280
281 template = request.site.buildbot_service.templates.get_template('grid_transposed.html')
282 yield template.render(**cxt)
283