Library for using Grafana' structures in Go programs and client for Grafana REST API.
SDK for Go language offers a library for interacting with Grafana server from Go applications. It realizes many of HTTP REST API calls for administration, client, organizations. Beside of them it allows creating of Grafana objects (dashboards, panels, datasources) locally and manipulating them for constructing dashboards programmatically. It would be helpful for massive operations on a large set of Grafana objects.
It was made foremost for autograf project but later separated from it and moved to this new repository because the library is useful per se.
board := sdk.NewBoard("Sample dashboard title")
board.ID = 1
board.Time.From = "now-30m"
board.Time.To = "now"
row1 := board.AddRow("Sample row title")
row1.Add(sdk.NewGraph("Sample graph"))
graph := sdk.NewGraph("Sample graph 2")
target := sdk.Target{
RefID: "A",
Datasource: "Sample Source 1",
Expr: "sample request 1"}
graph.AddTarget(&target)
row1.Add(graph)
grafanaURL := "http://grafana.host"
c := sdk.NewClient(grafanaURL, "grafana-api-key", sdk.DefaultHTTPClient)
response, err := c.SetDashboard(context.TODO() ,*board, sdk.SetDashboardParams{
Overwrite: false,
})
if err != nil {
fmt.Printf("error on uploading dashboard %s", board.Title)
} else {
fmt.Printf("dashboard URL: %v", grafanaURL+*response.URL)
}
The library includes several demo apps for showing API usage:
You need Grafana API key with admin rights for using these utilities.
Of course Go development environment should be set up first. Then:
go get github.com/grafana-tools/sdk
Dependency packages have included into distro. govendor utility used for vendoring. The single dependency now is:
go get github.com/gosimple/slug
The "slugify" for URLs is a simple task but this package used in Grafana server so it used in the SDK for the compatibility reasons.
Work on full API implementation still in progress. Currently implemented only create/update/delete operations for dashboards and datasources. State of support for misc API parts noted below.
API | Status |
---|---|
Authorization | API tokens and Basic Auth |
Annotations | partially |
Dashboards | partially |
Datasources | + |
Alert notification channels | + |
Organization (current) | partially |
Organizations | partially |
Users | partially |
User (actual) | partially |
Snapshots | partially |
Frontend settings | - |
Admin | partially |
There is no exact roadmap. The integration tests are being run against the following Grafana versions:
With the following Go versions:
I still have interest to this library development but not always have time for it. So I gladly accept new contributions. Drop an issue or contact me.
Distributed under Apache v2.0. All rights belong to the SDK authors. There is no authors list yet, you can see the full list of the contributors in the git history. Official repository is https://github.com/grafana-tools/sdk