From 2f84d5bfa4ab027d11eaf2529779c7d5b94512a9 Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Tue, 1 Feb 2022 17:28:23 -0800 Subject: [PATCH 01/13] Library Elements API returns array for GET by name --- library_panel.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/library_panel.go b/library_panel.go index df3fcd4d..3545a03e 100644 --- a/library_panel.go +++ b/library_panel.go @@ -101,16 +101,24 @@ func (c *Client) LibraryPanels() ([]LibraryPanel, error) { // LibraryPanelByUID gets a library panel by UID. func (c *Client) LibraryPanelByUID(uid string) (*LibraryPanel, error) { - return c.panel(fmt.Sprintf("/api/library-elements/%s", uid)) -} + resp := &LibraryPanelCreateResponse{} + path := fmt.Sprintf("/api/library-elements/%s", uid) -// LibraryPanelByName gets a library panel by name. -func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { - return c.panel(fmt.Sprintf("/api/library-elements/name/%s", name)) + err := c.request("GET", path, nil, nil, &resp) + if err != nil { + return nil, err + } + + return &resp.Result, err } -func (c *Client) panel(path string) (*LibraryPanel, error) { - resp := &LibraryPanelCreateResponse{} +// LibraryPanelByName gets library panels by name. +func (c *Client) LibraryPanelByName(name string) (*[]LibraryPanel, error) { + resp := &struct { + Result []LibraryPanel `json:"result"` + }{} + path := fmt.Sprintf("/api/library-elements/name/%s", name) + err := c.request("GET", path, nil, nil, &resp) if err != nil { return nil, err From 88e4160579b70b400f203681582726ec76692d3f Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Tue, 1 Feb 2022 17:33:51 -0800 Subject: [PATCH 02/13] replace module declaration with fork --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 89711271..661f7c5e 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/grafana/grafana-api-golang-client +module github.com/justinTM/grafana-api-golang-client go 1.14 From 4d65aac357292dda7ab45bf3f8905699c276399e Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Tue, 1 Feb 2022 18:38:33 -0800 Subject: [PATCH 03/13] return single element from LibraryPanelByName --- library_panel.go | 4 +-- library_panel_test.go | 63 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/library_panel.go b/library_panel.go index 3545a03e..0224d206 100644 --- a/library_panel.go +++ b/library_panel.go @@ -113,7 +113,7 @@ func (c *Client) LibraryPanelByUID(uid string) (*LibraryPanel, error) { } // LibraryPanelByName gets library panels by name. -func (c *Client) LibraryPanelByName(name string) (*[]LibraryPanel, error) { +func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { resp := &struct { Result []LibraryPanel `json:"result"` }{} @@ -124,7 +124,7 @@ func (c *Client) LibraryPanelByName(name string) (*[]LibraryPanel, error) { return nil, err } - return &resp.Result, err + return &(resp.Result[0]), err } // PatchLibraryPanel updates one or more properties of an existing panel that matches the specified UID. diff --git a/library_panel_test.go b/library_panel_test.go index 81ecb03a..fcfacdd5 100644 --- a/library_panel_test.go +++ b/library_panel_test.go @@ -7,7 +7,42 @@ import ( ) const ( - getLibraryPanelResponse = `{ + getLibraryPanelNameResponse = `{ + "result": [ + { + "id": 25, + "orgId": 1, + "folderId": 0, + "uid": "V--OrYHnz", + "name": "API docs Example", + "kind": 1, + "model": { + "description": "", + "type": "" + }, + "version": 1, + "meta": { + "folderName": "General", + "folderUid": "", + "connectedDashboards": 1, + "created": "2021-09-27T09:56:17+02:00", + "updated": "2021-09-27T09:56:17+02:00", + "createdBy": { + "id": 1, + "name": "admin", + "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56" + }, + "updatedBy": { + "id": 1, + "name": "admin", + "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56" + } + } + } + ] + }` + + getLibraryPanelUIDResponse = `{ "result": { "id": 25, "orgId": 1, @@ -120,7 +155,7 @@ const ( ) func TestLibraryPanelCreate(t *testing.T) { - server, client := gapiTestTools(t, 200, getLibraryPanelResponse) + server, client := gapiTestTools(t, 200, getLibraryPanelUIDResponse) defer server.Close() panel := LibraryPanel{ @@ -149,8 +184,8 @@ func TestLibraryPanelCreate(t *testing.T) { } } -func TestLibraryPanelGet(t *testing.T) { - server, client := gapiTestTools(t, 200, getLibraryPanelResponse) +func TestLibraryPanelGetByName(t *testing.T) { + server, client := gapiTestTools(t, 200, getLibraryPanelNameResponse) defer server.Close() resp, err := client.LibraryPanelByName("API docs Example") @@ -161,7 +196,20 @@ func TestLibraryPanelGet(t *testing.T) { t.Errorf("Invalid uid - %s, Expected %s", resp.UID, "V--OrYHnz") } - resp, err = client.LibraryPanelByUID("V--OrYHnz") + for _, code := range []int{401, 403, 404} { + server.code = code + _, err = client.LibraryPanelByName("test") + if err == nil { + t.Errorf("%d not detected", code) + } + } +} + +func TestLibraryPanelGetByUID(t *testing.T) { + server, client := gapiTestTools(t, 200, getLibraryPanelUIDResponse) + defer server.Close() + + resp, err := client.LibraryPanelByUID("V--OrYHnz") if err != nil { t.Fatal(err) } @@ -171,11 +219,6 @@ func TestLibraryPanelGet(t *testing.T) { for _, code := range []int{401, 403, 404} { server.code = code - _, err = client.LibraryPanelByName("test") - if err == nil { - t.Errorf("%d not detected", code) - } - _, err = client.LibraryPanelByUID("V--OrYHnz") if err == nil { t.Errorf("%d not detected", code) From ef7a8bfcfc0451e5160c99b8ac5d7740e6bbe584 Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Wed, 2 Feb 2022 19:32:34 -0800 Subject: [PATCH 04/13] fix GET LibraryPanelConnections from POST --- library_panel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library_panel.go b/library_panel.go index 0224d206..97c02e4d 100644 --- a/library_panel.go +++ b/library_panel.go @@ -176,7 +176,7 @@ func (c *Client) LibraryPanelConnections(uid string) (*[]LibraryPanelConnection, Result []LibraryPanelConnection `json:"result"` }{} - err := c.request("POST", path, nil, bytes.NewBuffer(nil), &resp) + err := c.request("GET", path, nil, bytes.NewBuffer(nil), &resp) if err != nil { return nil, err } From 619c469caa59b9581727e4ebedc7849d67b6a46a Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:50:48 -0800 Subject: [PATCH 05/13] error if LibraryPanelByName returns not 1 result --- library_panel.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library_panel.go b/library_panel.go index 97c02e4d..b3f7ccec 100644 --- a/library_panel.go +++ b/library_panel.go @@ -124,6 +124,10 @@ func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { return nil, err } + if len(resp.Result) != 1 { + return nil, fmt.Errorf("error: expected 1 panel from GET library panel by name, got: %v", resp.Result) + } + return &(resp.Result[0]), err } From 01c6da1ab29f5dfe66c9d0679a1360e0092935ae Mon Sep 17 00:00:00 2001 From: JM Date: Thu, 3 Feb 2022 06:51:49 -0800 Subject: [PATCH 06/13] var resp struct{} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Leandro López --- library_panel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library_panel.go b/library_panel.go index 97c02e4d..46096b3b 100644 --- a/library_panel.go +++ b/library_panel.go @@ -114,9 +114,9 @@ func (c *Client) LibraryPanelByUID(uid string) (*LibraryPanel, error) { // LibraryPanelByName gets library panels by name. func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { - resp := &struct { + var resp struct { Result []LibraryPanel `json:"result"` - }{} + } path := fmt.Sprintf("/api/library-elements/name/%s", name) err := c.request("GET", path, nil, nil, &resp) From 9bffaa40d14f7252c78c238842d38b6a23c0def9 Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:54:31 -0800 Subject: [PATCH 07/13] remove server.code = code --- library_panel_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/library_panel_test.go b/library_panel_test.go index fcfacdd5..6a2270e2 100644 --- a/library_panel_test.go +++ b/library_panel_test.go @@ -176,7 +176,6 @@ func TestLibraryPanelCreate(t *testing.T) { } for _, code := range []int{400, 401, 403} { - server.code = code _, err = client.NewLibraryPanel(panel) if err == nil { t.Errorf("%d not detected", code) @@ -197,7 +196,6 @@ func TestLibraryPanelGetByName(t *testing.T) { } for _, code := range []int{401, 403, 404} { - server.code = code _, err = client.LibraryPanelByName("test") if err == nil { t.Errorf("%d not detected", code) @@ -218,7 +216,6 @@ func TestLibraryPanelGetByUID(t *testing.T) { } for _, code := range []int{401, 403, 404} { - server.code = code _, err = client.LibraryPanelByUID("V--OrYHnz") if err == nil { t.Errorf("%d not detected", code) @@ -248,8 +245,6 @@ func TestPatchLibraryPanel(t *testing.T) { } for _, code := range []int{401, 403, 404} { - server.code = code - _, err := client.LibraryPanelByUID("V--OrYHnz") if err == nil { t.Errorf("%d not detected", code) From a98caddd34c34de827925bc1ee46c9685923a860 Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:55:02 -0800 Subject: [PATCH 08/13] remove unneeded parentheses --- library_panel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library_panel.go b/library_panel.go index b3f7ccec..eaf295e4 100644 --- a/library_panel.go +++ b/library_panel.go @@ -128,7 +128,7 @@ func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { return nil, fmt.Errorf("error: expected 1 panel from GET library panel by name, got: %v", resp.Result) } - return &(resp.Result[0]), err + return &resp.Result[0], err } // PatchLibraryPanel updates one or more properties of an existing panel that matches the specified UID. From 0e2947e4e75a9c0fe664ab59d588bc745d09f744 Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:55:36 -0800 Subject: [PATCH 09/13] fix code comment --- library_panel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library_panel.go b/library_panel.go index eaf295e4..e3116c7f 100644 --- a/library_panel.go +++ b/library_panel.go @@ -112,7 +112,7 @@ func (c *Client) LibraryPanelByUID(uid string) (*LibraryPanel, error) { return &resp.Result, err } -// LibraryPanelByName gets library panels by name. +// LibraryPanelByName gets a library panel by name. func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { resp := &struct { Result []LibraryPanel `json:"result"` From 97fa6d8c2e586d7d12011bf87fbb6679cce7ccec Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:56:08 -0800 Subject: [PATCH 10/13] revert module declaration go.mod --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 661f7c5e..89711271 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/justinTM/grafana-api-golang-client +module github.com/grafana/grafana-api-golang-client go 1.14 From 2d400ae9a00d7ae3e54300cf30f164cbbd4db6de Mon Sep 17 00:00:00 2001 From: Justin Mai Date: Thu, 3 Feb 2022 06:59:49 -0800 Subject: [PATCH 11/13] Revert "remove server.code = code" This reverts commit 9bffaa40d14f7252c78c238842d38b6a23c0def9. --- library_panel_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library_panel_test.go b/library_panel_test.go index 6a2270e2..fcfacdd5 100644 --- a/library_panel_test.go +++ b/library_panel_test.go @@ -176,6 +176,7 @@ func TestLibraryPanelCreate(t *testing.T) { } for _, code := range []int{400, 401, 403} { + server.code = code _, err = client.NewLibraryPanel(panel) if err == nil { t.Errorf("%d not detected", code) @@ -196,6 +197,7 @@ func TestLibraryPanelGetByName(t *testing.T) { } for _, code := range []int{401, 403, 404} { + server.code = code _, err = client.LibraryPanelByName("test") if err == nil { t.Errorf("%d not detected", code) @@ -216,6 +218,7 @@ func TestLibraryPanelGetByUID(t *testing.T) { } for _, code := range []int{401, 403, 404} { + server.code = code _, err = client.LibraryPanelByUID("V--OrYHnz") if err == nil { t.Errorf("%d not detected", code) @@ -245,6 +248,8 @@ func TestPatchLibraryPanel(t *testing.T) { } for _, code := range []int{401, 403, 404} { + server.code = code + _, err := client.LibraryPanelByUID("V--OrYHnz") if err == nil { t.Errorf("%d not detected", code) From b5c9ab4bd971e9ac3192fc0d4192d1610d27bbb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leandro=20L=C3=B3pez?= Date: Fri, 4 Feb 2022 10:18:30 -0300 Subject: [PATCH 12/13] Return nil in an explicit way --- library_panel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library_panel.go b/library_panel.go index c6e657e0..be5fc172 100644 --- a/library_panel.go +++ b/library_panel.go @@ -109,7 +109,7 @@ func (c *Client) LibraryPanelByUID(uid string) (*LibraryPanel, error) { return nil, err } - return &resp.Result, err + return &resp.Result, nil } // LibraryPanelByName gets a library panel by name. From c45f9c239a765edebe02a4783e100e4a85e50ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leandro=20L=C3=B3pez?= Date: Fri, 4 Feb 2022 10:18:48 -0300 Subject: [PATCH 13/13] Remove unnecessary prefix in error --- library_panel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library_panel.go b/library_panel.go index be5fc172..21cf2af6 100644 --- a/library_panel.go +++ b/library_panel.go @@ -125,7 +125,7 @@ func (c *Client) LibraryPanelByName(name string) (*LibraryPanel, error) { } if len(resp.Result) != 1 { - return nil, fmt.Errorf("error: expected 1 panel from GET library panel by name, got: %v", resp.Result) + return nil, fmt.Errorf("expected 1 panel from GET library panel by name, got: %v", resp.Result) } return &resp.Result[0], err