From 28111853212dac30ef69deda7842a967efa7d25a Mon Sep 17 00:00:00 2001 From: Laszlo Fogas Date: Tue, 9 Jul 2019 14:57:08 +0200 Subject: [PATCH] Queue stats in drone-go --- drone-go/drone/client.go | 8 ++++++ drone-go/drone/client_test.go | 46 +++++++++++++++++++++++++++++++++++ drone-go/drone/interface.go | 3 +++ drone-go/drone/types.go | 11 +++++++++ 4 files changed, 68 insertions(+) create mode 100644 drone-go/drone/client_test.go diff --git a/drone-go/drone/client.go b/drone-go/drone/client.go index 3326c0b64..2d9f9efa2 100644 --- a/drone-go/drone/client.go +++ b/drone-go/drone/client.go @@ -35,6 +35,7 @@ const ( pathUsers = "%s/api/users" pathUser = "%s/api/users/%s" pathBuildQueue = "%s/api/builds" + pathQueue = "%s/api/queue" pathVersion = "%s/version" ) @@ -354,6 +355,13 @@ func (c *client) SecretDelete(owner, name, secret string) error { return c.delete(uri) } +func (c *client) QueueInfo() (*Info, error) { + out := new(Info) + uri := fmt.Sprintf(pathQueue+"/info", c.addr) + err := c.get(uri, out) + return out, err +} + // // http request helper functions // diff --git a/drone-go/drone/client_test.go b/drone-go/drone/client_test.go new file mode 100644 index 000000000..0e3b6d640 --- /dev/null +++ b/drone-go/drone/client_test.go @@ -0,0 +1,46 @@ +package drone + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" +) + +func Test_QueueInfo(t *testing.T) { + fixtureHandler := func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{ + "pending": null, + "running": [ + { + "id": "4696", + "data": "", + "labels": { + "platform": "linux/amd64", + "repo": "laszlocph/drone-oss-08" + }, + "Dependencies": [], + "DepStatus": {}, + "RunOn": null + } + ], + "stats": { + "worker_count": 3, + "pending_count": 0, + "running_count": 1, + "completed_count": 0 + }, + "Paused": false + }`) + } + + ts := httptest.NewServer(http.HandlerFunc(fixtureHandler)) + defer ts.Close() + + client := NewClient(ts.URL, http.DefaultClient) + + info, err := client.QueueInfo() + if info.Stats.Workers != 3 { + t.Errorf("Unexpected worker count: %v, %v", info, err) + } +} diff --git a/drone-go/drone/interface.go b/drone-go/drone/interface.go index 10dd0034f..1682bd339 100644 --- a/drone-go/drone/interface.go +++ b/drone-go/drone/interface.go @@ -122,4 +122,7 @@ type Client interface { // SecretDelete deletes a secret. SecretDelete(owner, name, secret string) error + + // QueueInfo returns the queue state. + QueueInfo() (*Info, error) } diff --git a/drone-go/drone/types.go b/drone-go/drone/types.go index 8bbc76e43..7919a8748 100644 --- a/drone-go/drone/types.go +++ b/drone-go/drone/types.go @@ -146,4 +146,15 @@ type ( Version string `json:"version,omitempty"` Commit string `json:"commit,omitempty"` } + + // Info provides queue stats. + Info struct { + Stats struct { + Workers int `json:"worker_count"` + Pending int `json:"pending_count"` + Running int `json:"running_count"` + Complete int `json:"completed_count"` + } `json:"stats"` + Paused bool `json:"paused,omitempty"` + } )