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

Unified Diff: appengine/cr-buildbucket/service.py

Issue 2170673002: buildbucket: add longest_pending_time API (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: nits Created 4 years, 5 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
« no previous file with comments | « appengine/cr-buildbucket/index.yaml ('k') | appengine/cr-buildbucket/test/api_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/cr-buildbucket/service.py
diff --git a/appengine/cr-buildbucket/service.py b/appengine/cr-buildbucket/service.py
index 9678ef0b18eff6adbea2f3e0d0e222b685108d68..9749d7a04456bece0786eeb8837cd83e03afcae7 100644
--- a/appengine/cr-buildbucket/service.py
+++ b/appengine/cr-buildbucket/service.py
@@ -833,3 +833,30 @@ def parse_identity(identity):
except ValueError as ex:
raise errors.InvalidInputError('Invalid identity identity: %s' % ex)
return identity
+
+
+def longest_pending_time(bucket, builder):
+ """Returns longest waiting time among SCHEDULED builds of a builder.
+
+ |builder| is a value of "builder" tag.
+
+ Returns a datetime.timedelta.
+ """
+ if not bucket:
+ raise errors.InvalidInputError('no bucket')
+ if not acl.can_access_bucket(bucket):
+ raise acl.current_identity_cannot('access bucket %s', bucket)
+ if not builder:
+ raise errors.InvalidInputError('no builder')
+
+ # Find the oldest, still SCHEDULED build in this builder.
+ q = model.Build.query(
+ model.Build.bucket == bucket,
+ model.Build.tags == ('builder:%s' % builder),
+ model.Build.status == model.BuildStatus.SCHEDULED,
+ projection=[model.Build.create_time])
+ q = q.order(model.Build.create_time)
+ result = q.fetch(1)
+ if not result:
+ return datetime.timedelta(0)
+ return utils.utcnow() - result[0].create_time
« no previous file with comments | « appengine/cr-buildbucket/index.yaml ('k') | appengine/cr-buildbucket/test/api_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698