77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package grafana
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
type DatasourcesInterface interface {
|
|
All() ([]GrafanaDatasource, error)
|
|
Create(datasourceJson io.Reader) error
|
|
Delete(id int) error
|
|
}
|
|
|
|
// DatasourcesClient is an implementation of the DatasourcesInterface. The
|
|
// datasources HTTP API of Grafana requires admin access.
|
|
type DatasourcesClient struct {
|
|
BaseUrl string
|
|
HTTPClient *http.Client
|
|
}
|
|
|
|
type GrafanaDatasource struct {
|
|
Id int `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func NewDatasourcesClient(baseUrl string, c *http.Client) DatasourcesInterface {
|
|
return &DatasourcesClient{
|
|
BaseUrl: baseUrl,
|
|
HTTPClient: c,
|
|
}
|
|
}
|
|
|
|
func (c *DatasourcesClient) All() ([]GrafanaDatasource, error) {
|
|
allUrl := c.BaseUrl + "/api/datasources"
|
|
resp, err := c.HTTPClient.Get(allUrl)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
datasources := make([]GrafanaDatasource, 0)
|
|
|
|
err = json.NewDecoder(resp.Body).Decode(&datasources)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return datasources, nil
|
|
}
|
|
|
|
func (c *DatasourcesClient) Delete(id int) error {
|
|
deleteUrl := c.BaseUrl + "/api/datasources/" + strconv.Itoa(id)
|
|
req, err := http.NewRequest("DELETE", deleteUrl, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = c.HTTPClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *DatasourcesClient) Create(datasourceJson io.Reader) error {
|
|
createUrl := c.BaseUrl + "/api/datasources"
|
|
_, err := c.HTTPClient.Post(createUrl, "application/json", datasourceJson)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|