Index: third_party/buildbot_7_12/buildbot/status/web/xmlrpc.py |
diff --git a/third_party/buildbot_7_12/buildbot/status/web/xmlrpc.py b/third_party/buildbot_7_12/buildbot/status/web/xmlrpc.py |
deleted file mode 100644 |
index 41e6bc1fd671c734456028bf810713e1022f66fd..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/status/web/xmlrpc.py |
+++ /dev/null |
@@ -1,237 +0,0 @@ |
-from twisted.python import log |
-from twisted.web import xmlrpc |
-from buildbot.status.builder import Results |
-from itertools import count |
- |
-class XMLRPCServer(xmlrpc.XMLRPC): |
- def __init__(self): |
- xmlrpc.XMLRPC.__init__(self) |
- |
- def render(self, req): |
- # extract the IStatus and IControl objects for later use, since they |
- # come from the request object. They'll be the same each time, but |
- # they aren't available until the first request arrives. |
- self.status = req.site.buildbot_service.getStatus() |
- self.control = req.site.buildbot_service.getControl() |
- return xmlrpc.XMLRPC.render(self, req) |
- |
- def xmlrpc_getAllBuilders(self): |
- """Return a list of all builder names |
- """ |
- log.msg("getAllBuilders") |
- return self.status.getBuilderNames() |
- |
- def xmlrpc_getLastBuildResults(self, builder_name): |
- """Return the result of the last build for the given builder |
- """ |
- builder = self.status.getBuilder(builder_name) |
- lastbuild = builder.getBuild(-1) |
- return Results[lastbuild.getResults()] |
- |
- def xmlrpc_getLastBuildsAllBuilders(self, num_builds): |
- """Return the last N completed builds for all builders. |
- |
- 'num_builds' is the number of builds for each builder to |
- return |
- |
- """ |
- all_builds = [] |
- for name in self.status.getBuilderNames(): |
- all_builds.extend(self.xmlrpc_getLastBuilds(name, num_builds)) |
- return all_builds |
- |
- def xmlrpc_getLastBuilds(self, builder_name, num_builds): |
- """Return the last N completed builds for the given builder. |
- 'builder_name' is the name of the builder to query |
- 'num_builds' is the number of builds to return |
- |
- Each build is returned in the same form as xmlrpc_getAllBuildsInInterval |
- """ |
- log.msg("getLastBuilds: %s - %d" % (builder_name, num_builds)) |
- builder = self.status.getBuilder(builder_name) |
- all_builds = [] |
- for build_number in range(1, num_builds+1): |
- build = builder.getBuild(-build_number) |
- if not build: |
- break |
- if not build.isFinished(): |
- continue |
- (build_start, build_end) = build.getTimes() |
- |
- ss = build.getSourceStamp() |
- branch = ss.branch |
- if branch is None: |
- branch = "" |
- try: |
- revision = build.getProperty("got_revision") |
- except KeyError: |
- revision = "" |
- revision = str(revision) |
- |
- result = Results[build.getResults()] |
- if result == 'failure': |
- fail_names = result = build.getText()[1:] |
- reasons = [] |
- for s in build.getSteps(): |
- if s.getName() in fail_names: |
- reasons.append(s.getText()) |
- else: |
- result = build.getText() |
- reasons = [] |
- answer = (builder_name, |
- build.getNumber(), |
- build_start, |
- build_end, |
- branch, |
- revision, |
- Results[build.getResults()], |
- result, |
- reasons, |
- ) |
- all_builds.append((build_end, answer)) |
- |
- # now we've gotten all the builds we're interested in. Sort them by |
- # end time. |
- all_builds.sort(lambda a,b: cmp(a[0], b[0])) |
- # and remove the timestamps |
- all_builds = [t[1] for t in all_builds] |
- |
- log.msg("ready to go: %s" % (all_builds,)) |
- |
- return all_builds |
- |
- |
- def xmlrpc_getAllBuildsInInterval(self, start, stop): |
- """Return a list of builds that have completed after the 'start' |
- timestamp and before the 'stop' timestamp. This looks at all |
- Builders. |
- |
- The timestamps are integers, interpreted as standard unix timestamps |
- (seconds since epoch). |
- |
- Each Build is returned as a tuple in the form:: |
- (buildername, buildnumber, build_end, branchname, revision, |
- results, text) |
- |
- The buildnumber is an integer. 'build_end' is an integer (seconds |
- since epoch) specifying when the build finished. |
- |
- The branchname is a string, which may be an empty string to indicate |
- None (i.e. the default branch). The revision is a string whose |
- meaning is specific to the VC system in use, and comes from the |
- 'got_revision' build property. The results are expressed as a string, |
- one of ('success', 'warnings', 'failure', 'exception'). The text is a |
- list of short strings that ought to be joined by spaces and include |
- slightly more data about the results of the build. |
- """ |
- #log.msg("start: %s %s %s" % (start, type(start), start.__class__)) |
- log.msg("getAllBuildsInInterval: %d - %d" % (start, stop)) |
- all_builds = [] |
- |
- for builder_name in self.status.getBuilderNames(): |
- builder = self.status.getBuilder(builder_name) |
- for build_number in count(1): |
- build = builder.getBuild(-build_number) |
- if not build: |
- break |
- if not build.isFinished(): |
- continue |
- (build_start, build_end) = build.getTimes() |
- # in reality, builds are mostly ordered by start time. For |
- # the purposes of this method, we pretend that they are |
- # strictly ordered by end time, so that we can stop searching |
- # when we start seeing builds that are outside the window. |
- if build_end > stop: |
- continue # keep looking |
- if build_end < start: |
- break # stop looking |
- |
- ss = build.getSourceStamp() |
- branch = ss.branch |
- if branch is None: |
- branch = "" |
- try: |
- revision = build.getProperty("got_revision") |
- except KeyError: |
- revision = "" |
- revision = str(revision) |
- |
- answer = (builder_name, |
- build.getNumber(), |
- build_end, |
- branch, |
- revision, |
- Results[build.getResults()], |
- build.getText(), |
- ) |
- all_builds.append((build_end, answer)) |
- # we've gotten all the builds that we care about from this |
- # particular builder, so now we can continue on the next builder |
- |
- # now we've gotten all the builds we're interested in. Sort them by |
- # end time. |
- all_builds.sort(lambda a,b: cmp(a[0], b[0])) |
- # and remove the timestamps |
- all_builds = [t[1] for t in all_builds] |
- |
- log.msg("ready to go: %s" % (all_builds,)) |
- |
- return all_builds |
- |
- def xmlrpc_getBuild(self, builder_name, build_number): |
- """Return information about a specific build. |
- |
- """ |
- builder = self.status.getBuilder(builder_name) |
- build = builder.getBuild(build_number) |
- info = {} |
- info['builder_name'] = builder.getName() |
- info['url'] = self.status.getURLForThing(build) or '' |
- info['reason'] = build.getReason() |
- info['slavename'] = build.getSlavename() |
- info['results'] = build.getResults() |
- info['text'] = build.getText() |
- info['reasons'] = [] |
- # Added to help out requests for build -N |
- info['number'] = build.number |
- ss = build.getSourceStamp() |
- branch = ss.branch |
- if branch is None: |
- branch = "" |
- info['branch'] = str(branch) |
- try: |
- revision = str(build.getProperty("got_revision")) |
- except KeyError: |
- revision = "" |
- info['revision'] = str(revision) |
- info['start'], info['end'] = build.getTimes() |
- |
- step_names = {} |
- |
- info_steps = [] |
- for s in build.getSteps(): |
- stepinfo = {} |
- stepinfo['name'] = s.getName() |
- stepinfo['start'], stepinfo['end'] = s.getTimes() |
- stepinfo['results'] = s.getResults() |
- stepinfo['text'] = s.getText() |
- info_steps.append(stepinfo) |
- if info['text'][0] == 'failed' and stepinfo['name'] in info['text']: |
- info['reasons'].append(stepinfo['text']) |
- step_names[stepinfo['name']] = stepinfo |
- info['steps'] = info_steps |
- |
- info_logs = [] |
- info['full_error'] = {} |
- for l in build.getLogs(): |
- loginfo = {} |
- name = l.getStep().getName() |
- loginfo['name'] = name + "/" + l.getName() |
- #loginfo['text'] = l.getText() |
- loginfo['text'] = "HUGE" |
- if step_names.get(name): |
- if step_names[name]['text'][-1] == 'failed': |
- info['full_error'][name] = l.getText() |
- info_logs.append(loginfo) |
- info['logs'] = info_logs |
- return info |