| Index: third_party/buildbot_7_12/buildbot/status/web/slaves.py
|
| diff --git a/third_party/buildbot_7_12/buildbot/status/web/slaves.py b/third_party/buildbot_7_12/buildbot/status/web/slaves.py
|
| deleted file mode 100644
|
| index 244b0c34bd7fbeb553beca4d1d483650df654ac6..0000000000000000000000000000000000000000
|
| --- a/third_party/buildbot_7_12/buildbot/status/web/slaves.py
|
| +++ /dev/null
|
| @@ -1,199 +0,0 @@
|
| -
|
| -import time, urllib
|
| -from twisted.python import log
|
| -from twisted.web import html
|
| -from twisted.web.util import Redirect
|
| -from twisted.web.error import NoResource
|
| -
|
| -from buildbot.status.web.base import HtmlResource, abbreviate_age, \
|
| - OneLineMixin, path_to_slave, path_to_build
|
| -from buildbot import version, util
|
| -
|
| -# /buildslaves/$slavename
|
| -class OneBuildSlaveResource(HtmlResource, OneLineMixin):
|
| - addSlash = False
|
| - def __init__(self, slavename):
|
| - HtmlResource.__init__(self)
|
| - self.slavename = slavename
|
| -
|
| - def getTitle(self, req):
|
| - return "Buildbot: %s" % html.escape(self.slavename)
|
| -
|
| - def getChild(self, path, req):
|
| - s = self.getStatus(req)
|
| - slave = s.getSlave(self.slavename)
|
| - if path == "shutdown" and self.getControl(req):
|
| - slave.setGraceful(True)
|
| - return Redirect(path_to_slave(req, slave))
|
| -
|
| - def build_line(self, build, req):
|
| - buildnum = build.getNumber()
|
| - buildurl = path_to_build(req, build)
|
| - data = '<a href="%(builderurl)s">%(builder_name)s</a>' % self.get_line_values(req, build)
|
| - data += ' <a href="%s">#%d</a> ' % (buildurl, buildnum)
|
| -
|
| - when = build.getETA()
|
| - if when is not None:
|
| - when_time = time.strftime("%H:%M:%S",
|
| - time.localtime(time.time() + when))
|
| - data += "ETA %ds (%s) " % (when, when_time)
|
| - step = build.getCurrentStep()
|
| - if step:
|
| - data += "[%s]" % step.getName()
|
| - else:
|
| - data += "[waiting for Lock]"
|
| - # TODO: is this necessarily the case?
|
| -
|
| - builder_control = self.getControl(req)
|
| - if builder_control is not None:
|
| - stopURL = path_to_build(req, build) + '/stop'
|
| - data += '''
|
| -<form action="%s" class="command stopbuild" style="display:inline" method="post">
|
| - <input type="submit" value="Stop Build" />
|
| -</form>''' % stopURL
|
| - return data
|
| -
|
| - def body(self, req):
|
| - s = self.getStatus(req)
|
| - slave = s.getSlave(self.slavename)
|
| - 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" % html.escape(self.slavename))
|
| -
|
| - access_uri = slave.getAccessURI()
|
| - if access_uri:
|
| - data.append("<a href=\"%s\">Click to Access Slave</a>" % html.escape(access_uri))
|
| -
|
| - shutdown_url = req.childLink("shutdown")
|
| -
|
| - if not slave.isConnected():
|
| - data.append("<h2>NOT CONNECTED</h2>\n")
|
| - elif self.getControl(req):
|
| - if not slave.getGraceful():
|
| - data.append('''<form method="POST" action="%s">
|
| - <input type="submit" value="Gracefully Shutdown">
|
| - </form>''' % shutdown_url)
|
| - else:
|
| - data.append("Gracefully shutting down...\n")
|
| -
|
| - if current_builds:
|
| - data.append("<h2>Currently building:</h2>\n")
|
| - data.append("<ul>\n")
|
| - thisURL = "../../../" + path_to_slave(req, slave)
|
| - for build in current_builds:
|
| - data.append("<li>%s</li>\n" % self.build_line(build, req))
|
| - 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('numbuilds')[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")
|
| -
|
| - data.append(self.footer(s, req))
|
| - return "".join(data)
|
| -
|
| -# /buildslaves
|
| -class BuildSlavesResource(HtmlResource):
|
| - title = "BuildSlaves"
|
| - addSlash = True
|
| -
|
| - def body(self, req):
|
| - s = self.getStatus(req)
|
| - data = ""
|
| - data += "<h1>Build Slaves</h1>\n"
|
| -
|
| - used_by_builder = {}
|
| - for bname in s.getBuilderNames():
|
| - b = s.getBuilder(bname)
|
| - for bs in b.getSlaves():
|
| - slavename = bs.getName()
|
| - if slavename not in used_by_builder:
|
| - used_by_builder[slavename] = []
|
| - used_by_builder[slavename].append(bname)
|
| -
|
| - data += "<ol>\n"
|
| - for name in util.naturalSort(s.getSlaveNames()):
|
| - slave = s.getSlave(name)
|
| - slave_status = s.botmaster.slaves[name].slave_status
|
| - isBusy = len(slave_status.getRunningBuilds())
|
| - data += " <li><a href=\"%s\">%s</a>:\n" % (req.childLink(urllib.quote(name,'')), name)
|
| - data += " <ul>\n"
|
| - version = slave.getVersion()
|
| - data += "<li>Running Buildbot version: %s" % version
|
| - builder_links = ['<a href="%s">%s</a>'
|
| - % (req.childLink("../builders/%s" % bname),bname)
|
| - for bname in used_by_builder.get(name, [])]
|
| - if builder_links:
|
| - data += (" <li>Used by Builders: %s</li>\n" %
|
| - ", ".join(builder_links))
|
| - else:
|
| - data += " <li>Not used by any Builders</li>\n"
|
| - if slave.isConnected():
|
| - data += " <li>Slave is currently connected</li>\n"
|
| - admin = slave.getAdmin()
|
| - if admin:
|
| - # munge it to avoid feeding the spambot harvesters
|
| - admin = admin.replace("@", " -at- ")
|
| - data += " <li>Admin: %s</li>\n" % admin
|
| - last = slave.lastMessageReceived()
|
| - if last:
|
| - lt = time.strftime("%Y-%b-%d %H:%M:%S",
|
| - time.localtime(last))
|
| - age = abbreviate_age(time.time() - last)
|
| - data += " <li>Last heard from: %s " % age
|
| - data += '<font size="-1">(%s)</font>' % lt
|
| - data += "</li>\n"
|
| - if isBusy:
|
| - data += "<li>Slave is currently building.</li>"
|
| - else:
|
| - data += "<li>Slave is idle.</li>"
|
| - else:
|
| - data += " <li><b>Slave is NOT currently connected</b></li>\n"
|
| -
|
| - data += " </ul>\n"
|
| - data += " </li>\n"
|
| - data += "\n"
|
| -
|
| - data += "</ol>\n"
|
| -
|
| - return data
|
| -
|
| - def getChild(self, path, req):
|
| - try:
|
| - slave = self.getStatus(req).getSlave(path)
|
| - return OneBuildSlaveResource(path)
|
| - except KeyError:
|
| - return NoResource("No such slave '%s'" % html.escape(path))
|
|
|