Bug 472931 - per-slave status on buildbot waterfalls r=bhearsum
This patch adds /buildslaves/SLAVENAME to see the per-slave build history on buildbot. Upstream ticket is http://buildbot.net/trac/ticket/110 git-svn-id: svn://10.0.0.236/trunk@255806 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -170,6 +170,11 @@ def path_to_step(request, stepstatus):
|
||||
return (path_to_build(request, stepstatus.getBuild()) +
|
||||
"/steps/%s" % urllib.quote(stepstatus.getName(), safe=''))
|
||||
|
||||
def path_to_slave(request, slave):
|
||||
return (path_to_root(request) +
|
||||
"buildslaves/" +
|
||||
urllib.quote(slave.getName(), safe=''))
|
||||
|
||||
class Box:
|
||||
# a Box wraps an Event. The Box has HTML <td> parameters that Events
|
||||
# lack, and it has a base URL to which each File's name is relative.
|
||||
|
||||
@@ -6,7 +6,7 @@ from twisted.internet import defer, reactor
|
||||
import urllib, time
|
||||
from twisted.python import log
|
||||
from buildbot.status.web.base import HtmlResource, make_row, make_stop_form, \
|
||||
css_classes, path_to_builder
|
||||
css_classes, path_to_builder, path_to_slave
|
||||
|
||||
from buildbot.status.web.tests import TestsResource
|
||||
from buildbot.status.web.step import StepsResource
|
||||
@@ -90,7 +90,11 @@ class StatusResourceBuild(HtmlResource):
|
||||
|
||||
# TODO: turn this into a table, or some other sort of definition-list
|
||||
# that doesn't take up quite so much vertical space
|
||||
data += "<h2>Buildslave:</h2>\n %s\n" % html.escape(b.getSlavename())
|
||||
try:
|
||||
slaveurl = path_to_slave(req, status.getSlave(b.getSlavename()))
|
||||
data += "<h2>Buildslave:</h2>\n <a href=\"%s\">%s</a>\n" % (html.escape(slaveurl), html.escape(b.getSlavename()))
|
||||
except KeyError:
|
||||
data += "<h2>Buildslave:</h2>\n %s\n" % html.escape(b.getSlavename())
|
||||
data += "<h2>Reason:</h2>\n%s\n" % html.escape(b.getReason())
|
||||
|
||||
data += "<h2>Steps and Logfiles:</h2>\n"
|
||||
|
||||
@@ -7,7 +7,7 @@ import re, urllib, time
|
||||
from twisted.python import log
|
||||
from buildbot import interfaces
|
||||
from buildbot.status.web.base import HtmlResource, make_row, \
|
||||
make_force_build_form, OneLineMixin
|
||||
make_force_build_form, OneLineMixin, path_to_slave
|
||||
from buildbot.process.base import BuildRequest
|
||||
from buildbot.sourcestamp import SourceStamp
|
||||
from buildbot import version, util
|
||||
@@ -93,7 +93,8 @@ class StatusResourceBuilder(HtmlResource, OneLineMixin):
|
||||
data += "<h2>Buildslaves:</h2>\n"
|
||||
data += "<ol>\n"
|
||||
for slave in slaves:
|
||||
data += "<li><b>%s</b>: " % html.escape(slave.getName())
|
||||
slaveurl = path_to_slave(req, slave)
|
||||
data += "<li><b><a href=\"%s\">%s</a></b>: " % (html.escape(slaveurl), html.escape(slave.getName()))
|
||||
if slave.isConnected():
|
||||
data += "CONNECTED\n"
|
||||
if slave.getAdmin():
|
||||
|
||||
@@ -1,10 +1,96 @@
|
||||
|
||||
import time
|
||||
from buildbot.status.web.base import HtmlResource, abbreviate_age
|
||||
import time, urllib
|
||||
from twisted.python import log
|
||||
from twisted.web import html
|
||||
|
||||
from buildbot.status.web.base import HtmlResource, abbreviate_age, OneLineMixin
|
||||
from buildbot import version, util
|
||||
|
||||
# /buildslaves/$slavename
|
||||
class OneBuildSlaveResource(HtmlResource):
|
||||
pass # TODO
|
||||
class OneBuildSlaveResource(HtmlResource, OneLineMixin):
|
||||
def __init__(self, slavename):
|
||||
self.slavename = slavename
|
||||
|
||||
def getTitle(self, req):
|
||||
return "Buildbot: %s" % html.escape(self.slavename)
|
||||
|
||||
def body(self, req):
|
||||
s = self.getStatus(req)
|
||||
my_builders = []
|
||||
for bname in s.getBuilderNames():
|
||||
b = s.getBuilder(bname)
|
||||
for bs in b.getSlaves():
|
||||
slavename = bs.getName()
|
||||
if bs.getName() == self.slavename:
|
||||
my_builders.append(b)
|
||||
|
||||
# Current builds
|
||||
current_builds = []
|
||||
for b in my_builders:
|
||||
for cb in b.getCurrentBuilds():
|
||||
if cb.getSlavename() == self.slavename:
|
||||
current_builds.append(cb)
|
||||
|
||||
data = []
|
||||
|
||||
projectName = s.getProjectName()
|
||||
|
||||
data.append("<a href=\"%s\">%s</a>\n" % (self.path_to_root(req), projectName))
|
||||
|
||||
data.append("<h1>Build Slave: %s</h1>\n" % self.slavename)
|
||||
|
||||
if current_builds:
|
||||
data.append("<h2>Currently building:</h2>\n")
|
||||
data.append("<ul>\n")
|
||||
for build in current_builds:
|
||||
data.append("<li>%s</li>\n" % self.make_line(req, build, True))
|
||||
data.append("</ul>\n")
|
||||
|
||||
else:
|
||||
data.append("<h2>no current builds</h2>\n")
|
||||
|
||||
|
||||
# Recent builds
|
||||
data.append("<h2>Recent builds:</h2>\n")
|
||||
data.append("<ul>\n")
|
||||
n = 0
|
||||
try:
|
||||
max_builds = int(req.args.get('builds')[0])
|
||||
except:
|
||||
max_builds = 10
|
||||
for build in s.generateFinishedBuilds(builders=[b.getName() for b in my_builders]):
|
||||
if build.getSlavename() == self.slavename:
|
||||
n += 1
|
||||
data.append("<li>%s</li>\n" % self.make_line(req, build, True))
|
||||
if n > max_builds:
|
||||
break
|
||||
data.append("</ul>\n")
|
||||
|
||||
projectURL = s.getProjectURL()
|
||||
projectName = s.getProjectName()
|
||||
data.append('<hr /><div class="footer">\n')
|
||||
|
||||
welcomeurl = self.path_to_root(req) + "index.html"
|
||||
data.append("[<a href=\"%s\">welcome</a>]\n" % welcomeurl)
|
||||
data.append("<br />\n")
|
||||
|
||||
data.append('<a href="http://buildbot.sourceforge.net/">Buildbot</a>')
|
||||
data.append("-%s " % version)
|
||||
if projectName:
|
||||
data.append("working for the ")
|
||||
if projectURL:
|
||||
data.append("<a href=\"%s\">%s</a> project." % (projectURL,
|
||||
projectName))
|
||||
else:
|
||||
data.append("%s project." % projectName)
|
||||
data.append("<br />\n")
|
||||
data.append("Page built: " +
|
||||
time.strftime("%a %d %b %Y %H:%M:%S",
|
||||
time.localtime(util.now()))
|
||||
+ "\n")
|
||||
data.append("</div>\n")
|
||||
|
||||
return "".join(data)
|
||||
|
||||
# /buildslaves
|
||||
class BuildSlavesResource(HtmlResource):
|
||||
@@ -30,7 +116,7 @@ class BuildSlavesResource(HtmlResource):
|
||||
slave = s.getSlave(name)
|
||||
slave_status = s.botmaster.slaves[name].slave_status
|
||||
isBusy = len(slave_status.getRunningBuilds())
|
||||
data += " <li>%s:\n" % name
|
||||
data += " <li><a href=\"%s\">%s</a>:\n" % (req.childLink(urllib.quote(name,'')), name)
|
||||
data += " <ul>\n"
|
||||
builder_links = ['<a href="%s">%s</a>'
|
||||
% (req.childLink("../builders/%s" % bname),bname)
|
||||
@@ -69,3 +155,6 @@ class BuildSlavesResource(HtmlResource):
|
||||
data += "</ol>\n"
|
||||
|
||||
return data
|
||||
|
||||
def getChild(self, path, req):
|
||||
return OneBuildSlaveResource(path)
|
||||
|
||||
Reference in New Issue
Block a user