Index: milo/buildsource/buildbucket/builder.go |
diff --git a/milo/buildsource/buildbucket/builder.go b/milo/buildsource/buildbucket/builder.go |
index 4bbfee914bfd96f5e03a0c997fc77b544d0aee40..fc9e5f2911615d2eb81b5b7b14eed34c3a788485 100644 |
--- a/milo/buildsource/buildbucket/builder.go |
+++ b/milo/buildsource/buildbucket/builder.go |
@@ -231,15 +231,24 @@ func getDebugBuilds(c context.Context, bucket, builder string, maxCompletedBuild |
return nil |
} |
-type builderQuery struct { |
- Bucket string |
- Builder string |
- Limit int |
+// parseTimestamp converts buildbucket timestamp in microseconds to time.Time |
+func parseTimestamp(microseconds int64) time.Time { |
+ if microseconds == 0 { |
+ return time.Time{} |
+ } |
+ return time.Unix(microseconds/1e6, microseconds%1e6*1000).UTC() |
} |
-// builderImpl is the implementation for getting a milo builder page from buildbucket. |
-// if maxCompletedBuilds < 0, 25 is used. |
-func builderImpl(c context.Context, q builderQuery) (*resp.Builder, error) { |
+type newBuildsFirst []*resp.BuildSummary |
+ |
+func (a newBuildsFirst) Len() int { return len(a) } |
+func (a newBuildsFirst) Swap(i, j int) { a[i], a[j] = a[j], a[i] } |
+func (a newBuildsFirst) Less(i, j int) bool { |
+ return a[i].PendingTime.Started.After(a[j].PendingTime.Started) |
+} |
+ |
+// GetBuilder is used by buildsource.BuilderID.Get to obtain the resp.Builder. |
+func GetBuilder(c context.Context, bucket, builder string, limit int) (*resp.Builder, error) { |
settings := common.GetSettings(c) |
if settings.Buildbucket == nil || settings.Buildbucket.Host == "" { |
logging.Errorf(c, "missing buildbucket settings") |
@@ -247,15 +256,15 @@ func builderImpl(c context.Context, q builderQuery) (*resp.Builder, error) { |
} |
host := settings.Buildbucket.Host |
- if q.Limit < 0 { |
- q.Limit = 20 |
+ if limit < 0 { |
+ limit = 20 |
} |
result := &resp.Builder{ |
- Name: q.Builder, |
+ Name: builder, |
} |
if host == "debug" { |
- return result, getDebugBuilds(c, q.Bucket, q.Builder, q.Limit, result) |
+ return result, getDebugBuilds(c, bucket, builder, limit, result) |
} |
client, err := newBuildbucketClient(c, host) |
if err != nil { |
@@ -263,7 +272,7 @@ func builderImpl(c context.Context, q builderQuery) (*resp.Builder, error) { |
} |
fetch := func(target *[]*resp.BuildSummary, status string, count int) error { |
- builds, err := fetchBuilds(c, client, q.Bucket, q.Builder, status, count) |
+ builds, err := fetchBuilds(c, client, bucket, builder, status, count) |
if err != nil { |
logging.Errorf(c, "Could not fetch builds with status %s: %s", status, err) |
return err |
@@ -285,23 +294,7 @@ func builderImpl(c context.Context, q builderQuery) (*resp.Builder, error) { |
return fetch(&result.CurrentBuilds, StatusStarted, -1) |
} |
work <- func() error { |
- return fetch(&result.FinishedBuilds, StatusCompleted, q.Limit) |
+ return fetch(&result.FinishedBuilds, StatusCompleted, limit) |
} |
}) |
} |
- |
-// parseTimestamp converts buildbucket timestamp in microseconds to time.Time |
-func parseTimestamp(microseconds int64) time.Time { |
- if microseconds == 0 { |
- return time.Time{} |
- } |
- return time.Unix(microseconds/1e6, microseconds%1e6*1000).UTC() |
-} |
- |
-type newBuildsFirst []*resp.BuildSummary |
- |
-func (a newBuildsFirst) Len() int { return len(a) } |
-func (a newBuildsFirst) Swap(i, j int) { a[i], a[j] = a[j], a[i] } |
-func (a newBuildsFirst) Less(i, j int) bool { |
- return a[i].PendingTime.Started.After(a[j].PendingTime.Started) |
-} |