Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Unified Diff: third_party/buildbot_8_4p1/buildbot/status/web/status_json.py

Issue 13619004: Only calculate slave->build mapping once in json output. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Added readme.chromium changes. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/buildbot_8_4p1/buildbot/status/web/status_json.py
diff --git a/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py b/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py
index b656563257e3b0dbe89ca0e3fe26b330c1e7d99b..054432cc6e962b6cdf7731826706071531dd5b32 100644
--- a/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py
+++ b/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py
@@ -16,6 +16,7 @@
"""Simple JSON exporter."""
+import collections
import datetime
import os
import re
@@ -635,21 +636,39 @@ class SlaveJsonResource(JsonResource):
self.builders.append(builderName)
return self.builders
+ def getSlaveBuildMap(self, buildcache, buildercache):
+ for builderName in self.getBuilders():
+ if builderName not in buildercache:
+ # This builder hasn't been processed in this request yet.
iannucci 2013/06/30 08:16:16 obvious comment is obvious? :)
+ buildercache.add(builderName)
+ builder_status = self.status.getBuilder(builderName)
+ for i in range(1, builder_status.buildCacheSize - 1):
+ build_status = builder_status.getBuild(-i)
iannucci 2013/06/30 08:16:16 This loop construction looks ugly, but I'm assumin
+ if not build_status or not build_status.isFinished():
+ # If not finished, it will appear in runningBuilds.
+ break
+ slave = buildcache[build_status.getSlavename()]
iannucci 2013/06/30 08:16:16 how is slavename guaranteed to exist in buildcache
Mike Stip (use stip instead) 2013/06/30 08:29:54 collections.defaultdict(dict)
+ slave.setdefault(builderName, []).append(
+ build_status.getNumber())
+ return buildcache[self.name]
+
def asDict(self, request):
+ if not hasattr(request, 'requestdata'):
+ request.requestdata = {}
+ if 'buildcache' not in request.requestdata:
+ # buildcache is used to cache build information across multiple
+ # invocations of SlaveJsonResource. It should be set to an empty
+ # collections.defaultdict(dict).
+ request.requestdata['buildcache'] = collections.defaultdict(dict)
+
+ # Tracks which builders have been stored in the buildcache.
+ request.requestdata['buildercache'] = set()
+
iannucci 2013/06/30 08:16:16 I think this whole block could be: if not hasattr
Mike Stip (use stip instead) 2013/06/30 08:29:54 twisted doesn't seem to have a place to stash appl
results = self.slave_status.asDict()
# Enhance it by adding more informations.
iannucci 2013/06/30 08:16:16 depluaralize information while you're at it :)
- results['builders'] = {}
- for builderName in self.getBuilders():
- builds = []
- builder_status = self.status.getBuilder(builderName)
- for i in range(1, builder_status.buildCacheSize - 1):
- build_status = builder_status.getBuild(-i)
- if not build_status or not build_status.isFinished():
- # If not finished, it will appear in runningBuilds.
- break
- if build_status.getSlavename() == self.name:
- builds.append(build_status.getNumber())
- results['builders'][builderName] = builds
+ results['builders'] = self.getSlaveBuildMap(
+ request.requestdata['buildcache'],
+ request.requestdata['buildercache'])
return results
« third_party/buildbot_8_4p1/README.chromium ('K') | « third_party/buildbot_8_4p1/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698