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

Unified Diff: appengine/cr-buildbucket/swarming/swarmbucket_api.py

Issue 2005333002: swarmbucket: add get_builders api (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: fix tests Created 4 years, 7 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: appengine/cr-buildbucket/swarming/swarmbucket_api.py
diff --git a/appengine/cr-buildbucket/swarming/swarmbucket_api.py b/appengine/cr-buildbucket/swarming/swarmbucket_api.py
new file mode 100644
index 0000000000000000000000000000000000000000..b9180a78a8bce5eda73d3e0441ed5483eebb5ac3
--- /dev/null
+++ b/appengine/cr-buildbucket/swarming/swarmbucket_api.py
@@ -0,0 +1,87 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from google.appengine.ext import ndb
+from protorpc import messages
+from protorpc import message_types
+from protorpc import remote
+
+from components import auth
+from components import utils
+import gae_ts_mon
+
+import acl
+import config
+
+
+def swarmbucket_api_method(
+ request_message_class, response_message_class, **kwargs):
+ """Defines a swarmbucket API method."""
+
+ endpoints_decorator = auth.endpoints_method(
+ request_message_class, response_message_class, **kwargs)
+
+ def decorator(fn):
+ fn = auth.public(fn)
+ fn = endpoints_decorator(fn)
+ fn = ndb.toplevel(fn)
+ def ts_mon_time():
+ return utils.datetime_to_timestamp(utils.utcnow()) / 1000000.0
+ fn = gae_ts_mon.instrument_endpoint(time_fn=ts_mon_time)(fn)
+ return fn
+
+ return decorator
+
+
+class BuilderMessage(messages.Message):
+ name = messages.StringField(1)
+ category = messages.StringField(2)
+
+
+class BucketMessage(messages.Message):
+ # Bucket name. Unique per buildbucket instance.
+ name = messages.StringField(1)
+ builders = messages.MessageField(BuilderMessage, 2, repeated=True)
+
+
+class GetBuildersResponseMessage(messages.Message):
+ buckets = messages.MessageField(BucketMessage, 1, repeated=True)
+
+
+@auth.endpoints_api(
+ name='swarmbucket', version='v1',
+ title='Buildbucket-Swarming integration')
+class SwarmbucketApi(remote.Service):
+ """API specific to swarmbucket."""
+
+ @swarmbucket_api_method(
+ message_types.VoidMessage,
+ GetBuildersResponseMessage,
+ path='builders', http_method='GET')
+ def get_builders(self, _request):
+ """Returns defined swarmbucket builders.
+
+ Can be used by code review tool to discover builders.
+ """
+ buckets = config.get_buckets_async().get_result()
+ available = acl.get_available_buckets()
+ if available is not None: # pragma: no branch
+ available = set(available)
+ buckets = [b for b in buckets if b.name in available]
+
+ res = GetBuildersResponseMessage()
+ for bucket in buckets:
+ if not bucket.swarming.builders:
+ continue
+ res.buckets.append(BucketMessage(
+ name=bucket.name,
+ builders=[
+ BuilderMessage(
+ name=builder.name,
+ category=builder.category,
+ )
+ for builder in bucket.swarming.builders
+ ],
+ ))
+ return res
« no previous file with comments | « appengine/cr-buildbucket/swarming/__init__.py ('k') | appengine/cr-buildbucket/swarming/test/swarmbucket_api_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698