sdk

package module
v0.0.0-...-f8acf31 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2021 License: Apache-2.0 Imports: 13 Imported by: 0

README

Grafana SDK Go Report Card

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 dashboards for example.

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.

Grafana operates with Javascript objects on client side so on first view Go language looks alien thing here. And Grafana has GUI with detailed options for panel customization so in many cases you don't need additional automatization. But in situations when you operates on hundreds of dashboards programming generation of them become not bad idea. And SDK that allow you import/export, create, modify and validate Grafana structures is very helpful. Golang is good enough choice for operations with JSON though it may be subject of discuss. Positives of this choice is strong typization in Go that help validate objects alongside with high speed of execution and nice concurrency patterns. Negative aspect the same: the strong typization that add more verbosity to JSON parsing in comparing with Javascript or for an example with scripting languages like Python. But with SDK you already have ready for use structures and methods so generation of JSONs become simple. Anyway Grafana server made in Golang that prove concept for applicability of Go for that kind of tasks.

And of course if you write applications in Golang and integrate them with Grafana then client SDK for Go will be uniquely useful.

Library design principles

  1. SDK offers client functionality so it covers Grafana REST API with its requests and responses as close as possible.
  2. SDK maps Grafana objects (dashboard, row, panel, datasource) to similar Go structures but not follows exactly all Grafana abstractions.
  3. It doesn't use logging, instead API functions can return errors where it need.
  4. No external deps except Go stdlib. Another exception is URL slugify, SDK uses external lib "slug" for algorithm compatibility — that is the same package that Grafana server uses.

Examples GoDoc

	board := sdk.NewBoard("Sample dashboard title")
	board.ID = 1
	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)
	c := sdk.NewClient("http://grafana.host", "grafana-api-key", sdk.DefaultHTTPClient)	
	if err = c.SetDashboard(board, false); err != nil {
		fmt.Printf("error on uploading dashboard %s", board.Title)
	}

The library includes several demo apps for showing API usage:

You need Grafana API key with admin rights for using these utilities.

Installation Build Status

Of course Go development environment should be set up first. Then:

go get github.com/huangjiuyuan/grafana-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.

Grafana server compability

Made mostly for Grafana 3.x, works with Grafana 4.x but need more tests. Full support for Grafana 4.x is on the way.

Status of REST API realization Coverage Status

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 only API tokens
Dashboards partially
Datasources +
Organization (current) partially
Organizations -
Users partially
User (actual) partially
Snapshots -
Frontend settings -
Admin -

Roadmap

  • [DONE] Realize data structures used in a default Grafana installation for data visualizing (dashboards, datasources, panels, variables, annotations).
  • [PROGRESS] Support all functions of Grafana REST API for manipulating dashboards and datasources.
  • Support functions of Grafana REST API for manipulating users and organizations.

Collection of Grafana tools in Golang

Documentation

Index

Examples

Constants

View Source
const (
	TemplatingHideNone = iota
	TemplatingHideLabel
	TemplatingHideVariable
)

Constants for templating

View Source
const (
	CustomType panelType = iota
	DashlistType
	GraphType
	TableType
	TextType
	PluginlistType
	SinglestatType
	RowType
)

Each panel may be one of these types.

View Source
const MixedSource = "-- Mixed --"

Variables

View Source
var DefaultHTTPClient = http.DefaultClient

DefaultHTTPClient initialized Grafana with appropriate conditions. It allows you globally redefine HTTP client.

View Source
var FolderMap = make(map[string]int)

Functions

This section is empty.

Types

type Annotation

type Annotation struct {
	Name       string  `json:"name"`
	Datasource *string `json:"datasource"`
	ShowLine   bool    `json:"showLine"`
	IconColor  string  `json:"iconColor"`
	LineColor  string  `json:"lineColor"`
	IconSize   uint    `json:"iconSize"`
	Enable     bool    `json:"enable"`
	Query      string  `json:"query"`
	TextField  string  `json:"textField"`
	Hide       bool    `json:"hide"`
	Limit      int     `json:"limit"`
	ShowIn     int     `json:"showIn"`
	BuiltIn    int     `json:"builtIn"`
	Type       string  `json:"type"`
}

type Axis

type Axis struct {
	Format  string       `json:"format"`
	LogBase int          `json:"logBase"`
	Max     *FloatString `json:"max,omitempty"`
	Min     *FloatString `json:"min,omitempty"`
	Show    bool         `json:"show"`
}

for a graph panel

type Board

type Board struct {
	ID              uint       `json:"id,omitempty"`
	UID             string     `json:"uid,omitempty"`
	Slug            string     `json:"slug"`
	Title           string     `json:"title"`
	OriginalTitle   string     `json:"originalTitle"`
	Tags            []string   `json:"tags"`
	Style           string     `json:"style"`
	Timezone        string     `json:"timezone"`
	Editable        bool       `json:"editable"`
	HideControls    bool       `json:"hideControls" graf:"hide-controls"`
	SharedCrosshair bool       `json:"sharedCrosshair" graf:"shared-crosshair"`
	Panels          []*Panel   `json:"panels"`
	Rows            []*Row     `json:"rows"`
	Templating      Templating `json:"templating"`
	Annotations     struct {
		List []Annotation `json:"list"`
	} `json:"annotations"`
	Refresh       *BoolString `json:"refresh,omitempty"`
	SchemaVersion uint        `json:"schemaVersion"`
	Version       uint        `json:"version"`
	Links         []link      `json:"links"`
	Time          Time        `json:"time"`
	Timepicker    Timepicker  `json:"timepicker"`

	GraphTooltip int `json:"graphTooltip,omitempty"`
	// contains filtered or unexported fields
}

Board represents Grafana dashboard.

func NewBoard

func NewBoard(title string) *Board
Example
package main

import (
	"encoding/json"
	"fmt"

	sdk "github.com/szhongchao/grafana-sdk"
)

func main() {
	board := sdk.NewBoard("Sample dashboard title")
	board.ID = 1
	row1 := board.AddRow("Sample row title")
	row1.Add(sdk.NewGraph("Sample graph"))
	graphWithDs := sdk.NewGraph("Sample graph 2")
	target := sdk.Target{
		RefID:      "A",
		Datasource: "Sample Source 1",
		Expr:       "sample request 1"}
	graphWithDs.AddTarget(&target)
	row1.Add(graphWithDs)
	data, _ := json.MarshalIndent(board, "", "    ")
	fmt.Printf("%s", data)
}
Output:

{
    "id": 1,
    "slug": "",
    "title": "Sample dashboard title",
    "originalTitle": "",
    "tags": null,
    "style": "dark",
    "timezone": "browser",
    "editable": true,
    "hideControls": false,
    "sharedCrosshair": false,
    "panels": null,
    "rows": [
        {
            "title": "Sample row title",
            "showTitle": false,
            "collapse": false,
            "editable": true,
            "height": "250px",
            "panels": [
                {
                    "editable": false,
                    "error": false,
                    "gridPos": {},
                    "id": 1,
                    "isNew": true,
                    "renderer": "flot",
                    "span": 12,
                    "title": "Sample graph",
                    "transparent": false,
                    "type": "graph",
                    "aliasColors": null,
                    "bars": false,
                    "fill": 0,
                    "legend": {
                        "alignAsTable": false,
                        "avg": false,
                        "current": false,
                        "hideEmpty": false,
                        "hideZero": false,
                        "max": false,
                        "min": false,
                        "rightSide": false,
                        "show": false,
                        "total": false,
                        "values": false
                    },
                    "lines": false,
                    "linewidth": 0,
                    "nullPointMode": "connected",
                    "percentage": false,
                    "pointradius": 5,
                    "points": false,
                    "stack": false,
                    "steppedLine": false,
                    "tooltip": {
                        "shared": false,
                        "value_type": ""
                    },
                    "x-axis": true,
                    "y-axis": true,
                    "xaxis": {
                        "format": "",
                        "logBase": 0,
                        "show": false
                    },
                    "yaxes": null
                },
                {
                    "editable": false,
                    "error": false,
                    "gridPos": {},
                    "id": 2,
                    "isNew": true,
                    "renderer": "flot",
                    "span": 12,
                    "title": "Sample graph 2",
                    "transparent": false,
                    "type": "graph",
                    "aliasColors": null,
                    "bars": false,
                    "fill": 0,
                    "legend": {
                        "alignAsTable": false,
                        "avg": false,
                        "current": false,
                        "hideEmpty": false,
                        "hideZero": false,
                        "max": false,
                        "min": false,
                        "rightSide": false,
                        "show": false,
                        "total": false,
                        "values": false
                    },
                    "lines": false,
                    "linewidth": 0,
                    "nullPointMode": "connected",
                    "percentage": false,
                    "pointradius": 5,
                    "points": false,
                    "stack": false,
                    "steppedLine": false,
                    "targets": [
                        {
                            "refId": "A",
                            "datasource": "Sample Source 1",
                            "expr": "sample request 1"
                        }
                    ],
                    "tooltip": {
                        "shared": false,
                        "value_type": ""
                    },
                    "x-axis": true,
                    "y-axis": true,
                    "xaxis": {
                        "format": "",
                        "logBase": 0,
                        "show": false
                    },
                    "yaxes": null
                }
            ],
            "repeat": null
        }
    ],
    "templating": {
        "list": null
    },
    "annotations": {
        "list": null
    },
    "schemaVersion": 0,
    "version": 0,
    "links": null,
    "time": {
        "from": "",
        "to": ""
    },
    "timepicker": {
        "refresh_intervals": null,
        "time_options": null
    }
}

func (*Board) AddRow

func (b *Board) AddRow(title string) *Row

func (*Board) AddTags

func (b *Board) AddTags(tags ...string)

func (*Board) HasTag

func (b *Board) HasTag(tag string) bool

func (*Board) RemoveTags

func (b *Board) RemoveTags(tags ...string)

func (*Board) UpdateSlug

func (b *Board) UpdateSlug() string

type BoardProperties

type BoardProperties struct {
	IsStarred  bool      `json:"isStarred,omitempty"`
	IsHome     bool      `json:"isHome,omitempty"`
	IsSnapshot bool      `json:"isSnapshot,omitempty"`
	Type       string    `json:"type,omitempty"`
	CanSave    bool      `json:"canSave"`
	CanEdit    bool      `json:"canEdit"`
	CanStar    bool      `json:"canStar"`
	Slug       string    `json:"slug"`
	Expires    time.Time `json:"expires"`
	Created    time.Time `json:"created"`
	Updated    time.Time `json:"updated"`
	UpdatedBy  string    `json:"updatedBy"`
	CreatedBy  string    `json:"createdBy"`
	Version    int       `json:"version"`
}

BoardProperties keeps metadata of a dashboard.

type BoolInt

type BoolInt struct {
	Flag  bool
	Value *int64
}

func (BoolInt) MarshalJSON

func (s BoolInt) MarshalJSON() ([]byte, error)

func (*BoolInt) UnmarshalJSON

func (s *BoolInt) UnmarshalJSON(raw []byte) error

type BoolString

type BoolString struct {
	Flag  bool
	Value string
}

func (BoolString) MarshalJSON

func (s BoolString) MarshalJSON() ([]byte, error)

func (*BoolString) UnmarshalJSON

func (s *BoolString) UnmarshalJSON(raw []byte) error

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client uses Grafana REST API for interacting with Grafana server.

func NewClient

func NewClient(apiURL, apiKeyOrBasicAuth string, client *http.Client) *Client

NewClient initializes client for interacting with an instance of Grafana server; apiKeyOrBasicAuth accepts either 'username:password' basic authentication credentials, or a Grafana API key

func (*Client) CreateDatasource

func (r *Client) CreateDatasource(ds Datasource) (StatusMessage, error)

CreateDatasource creates a new datasource. It reflects POST /api/datasources API call.

func (*Client) CreateUser

func (r *Client) CreateUser(user User) (StatusMessage, error)

CreateUser creates a new global user Only work with Basic Authentication It reflects POST /api/admin/users

func (*Client) DeleteDashboardBySlug

func (r *Client) DeleteDashboardBySlug(slug string) (StatusMessage, error)

DeleteDashboardBySlug deletes dashboard that selected by slug string. Deprecated since Grafana v5

Grafana only can delete a dashboard in a database. File dashboards may be only loaded with HTTP API but not deteled.

func (*Client) DeleteDashboardByUID

func (r *Client) DeleteDashboardByUID(uid string) (StatusMessage, error)

DeleteDashboardByUID deletes dashboard that selected by uid string.

func (*Client) DeleteDatasource

func (r *Client) DeleteDatasource(id uint) (StatusMessage, error)

DeleteDatasource deletes an existing datasource by ID. It reflects DELETE /api/datasources/:datasourceId API call.

func (*Client) DeleteDatasourceByName

func (r *Client) DeleteDatasourceByName(name string) (StatusMessage, error)

DeleteDatasourceByName deletes an existing datasource by Name. It reflects DELETE /api/datasources/name/:datasourceName API call.

func (*Client) DeleteUser

func (r *Client) DeleteUser(id uint) (StatusMessage, error)

DeleteUser deletes an user by ID.

func (*Client) GetActualUser

func (r *Client) GetActualUser() (User, error)

GetActualUser gets an actual user.

func (*Client) GetAllDatasources

func (r *Client) GetAllDatasources() ([]Datasource, error)

GetAllDatasources loads all datasources. It reflects GET /api/datasources API call.

func (*Client) GetAllUsers

func (r *Client) GetAllUsers() ([]User, error)

GetAllUsers gets all users.

func (*Client) GetDashboardBySlug

func (r *Client) GetDashboardBySlug(slug string) (Board, BoardProperties, error)

GetDashboardBySlug loads a dashboard and its metadata from Grafana by dashboard slug. Deprecated since Grafana v5

For dashboards from a filesystem set "file/" prefix for slug. By default dashboards from a database assumed. Database dashboards may have "db/" prefix or may have not, it will be appended automatically.

func (*Client) GetDashboardByUID

func (r *Client) GetDashboardByUID(uid string) (Board, BoardProperties, error)

GetDashboardByUID loads a dashboard and its metadata from Grafana by dashboard uid.

func (*Client) GetDashboardPermissions

func (r *Client) GetDashboardPermissions(id uint) ([]Permission, error)

GetDashboardPermissions gets all existing permissions for the dashboard with the given id.

func (*Client) GetDatasource

func (r *Client) GetDatasource(id uint) (Datasource, error)

GetDatasource gets an datasource by ID. It reflects GET /api/datasources/:datasourceId API call.

func (*Client) GetDatasourceByName

func (r *Client) GetDatasourceByName(name string) (Datasource, error)

GetDatasourceByName gets an datasource by Name. It reflects GET /api/datasources/name/:datasourceName API call.

func (*Client) GetDatasourceTypes

func (r *Client) GetDatasourceTypes() (map[string]DatasourceType, error)

GetDatasourceTypes gets all available plugins for the datasources. It reflects GET /api/datasources/plugins API call.

func (*Client) GetFolders

func (r *Client) GetFolders() ([]Folder, error)

func (*Client) GetRawDashboard

func (r *Client) GetRawDashboard(slug string) ([]byte, BoardProperties, error)

GetRawDashboard loads a dashboard JSON from Grafana instance along with metadata for a dashboard. Contrary to GetDashboardByUID() it not unpack loaded JSON to Board structure. Instead it returns it as byte slice. It guarantee that data of dashboard returned untouched by conversion with Board so no matter how properly fields from a current version of Grafana mapped to our Board fields. It useful for backuping purposes when you want a dashboard exactly with same data as it exported by Grafana.

For dashboards from a filesystem set "file/" prefix for slug. By default dashboards from a database assumed. Database dashboards may have "db/" prefix or may have not, it will be appended automatically.

func (*Client) GetUser

func (r *Client) GetUser(id uint) (User, error)

GetUser gets an user by ID.

func (*Client) SearchDashboards

func (r *Client) SearchDashboards(query string, starred bool, tags ...string) ([]FoundBoard, error)

SearchDashboards search dashboards by substring of their title. It allows restrict the result set with only starred dashboards and only for tags (logical OR applied to multiple tags).

func (*Client) SearchUsersWithPaging

func (r *Client) SearchUsersWithPaging(query *string, perpage, page *int) (PageUsers, error)

SearchUsersWithPaging search users with paging query optional. query value is contained in one of the name, login or email fields. Query values with spaces need to be url encoded e.g. query=Jane%20Doe perpage optional. default 1000 page optional. default 1 http://docs.grafana.org/http_api/user/#search-users http://docs.grafana.org/http_api/user/#search-users-with-paging

func (*Client) SetDashboard

func (r *Client) SetDashboard(board Board, overwrite bool) (StatusMessage, error)

SetDashboard updates existing dashboard or creates a new one. Set dasboard ID to nil to create a new dashboard. Set overwrite to true if you want to overwrite existing dashboard with newer version or with same dashboard title. Grafana only can create or update a dashboard in a database. File dashboards may be only loaded with HTTP API but not created or updated.

func (*Client) SetDashboardWithFolderId

func (r *Client) SetDashboardWithFolderId(board Board, overwrite bool, folderId int) (StatusMessage, error)

func (*Client) SetDashboardWithFolderName

func (r *Client) SetDashboardWithFolderName(board Board, overwrite bool, folderName string) (StatusMessage, error)

func (*Client) SetRawDashboard

func (r *Client) SetRawDashboard(raw []byte) (StatusMessage, error)

SetRawDashboard updates existing dashboard or creates a new one. Contrary to SetDashboard() it accepts raw JSON instead of Board structure. Grafana only can create or update a dashboard in a database. File dashboards may be only loaded with HTTP API but not created or updated.

func (*Client) SwitchUserContext

func (r *Client) SwitchUserContext(uid uint, oid uint) (StatusMessage, error)

func (*Client) UpdateDashboardPermissions

func (r *Client) UpdateDashboardPermissions(permissions Permissions, id uint) (StatusMessage, error)

UpdateDashboardPermissions gets all existing permissions for the dashboard with the given id.

func (*Client) UpdateDatasource

func (r *Client) UpdateDatasource(ds Datasource) (StatusMessage, error)

UpdateDatasource updates a datasource from data passed in argument. It reflects PUT /api/datasources/:datasourceId API call.

type Current

type Current struct {
	Tags  []*string   `json:"tags,omitempty"`
	Text  string      `json:"text"`
	Value interface{} `json:"value"` // TODO select more precise type
}

for templateVar

type CustomPanel

type CustomPanel map[string]interface{}

type DashlistPanel

type DashlistPanel struct {
	Mode  string   `json:"mode"`
	Limit uint     `json:"limit"`
	Query string   `json:"query"`
	Tags  []string `json:"tags"`
}

type Datasource

type Datasource struct {
	ID                uint        `json:"id"`
	OrgID             uint        `json:"orgId"`
	Name              string      `json:"name"`
	Type              string      `json:"type"`
	Access            string      `json:"access"` // direct or proxy
	URL               string      `json:"url"`
	Password          *string     `json:"password,omitempty"`
	User              *string     `json:"user,omitempty"`
	Database          *string     `json:"database,omitempty"`
	BasicAuth         *bool       `json:"basicAuth,omitempty"`
	BasicAuthUser     *string     `json:"basicAuthUser,omitempty"`
	BasicAuthPassword *string     `json:"basicAuthPassword,omitempty"`
	IsDefault         bool        `json:"isDefault"`
	JSONData          interface{} `json:"jsonData"`
}

Datasource as described in the doc http://docs.grafana.org/reference/http_api/#get-all-datasources

type DatasourceType

type DatasourceType struct {
	Metrics  bool   `json:"metrics"`
	Module   string `json:"module"`
	Name     string `json:"name"`
	Partials struct {
		Query string `json:"query"`
	} `json:"datasource"`
	PluginType  string `json:"pluginType"`
	ServiceName string `json:"serviceName"`
	Type        string `json:"type"`
}

Datasource type as described in http://docs.grafana.org/reference/http_api/#available-data-source-types

type FloatString

type FloatString struct {
	Value float64
	Valid bool
}

FloatString represents special type for json values that could be strings or ints: 100 or "100"

func NewFloatString

func NewFloatString(i float64) *FloatString

func (*FloatString) MarshalJSON

func (v *FloatString) MarshalJSON() ([]byte, error)

MarshalJSON implements custom marshalling for FloatString type

func (*FloatString) UnmarshalJSON

func (v *FloatString) UnmarshalJSON(raw []byte) error

UnmarshalJSON implements custom unmarshalling for FloatString type

type Folder

type Folder struct {
	ID    int    `json:"id"`
	Title string `json:"title"`
}

type FoundBoard

type FoundBoard struct {
	ID        uint     `json:"id"`
	UID       string   `json:"uid,omitempty"`
	Title     string   `json:"title"`
	URI       string   `json:"uri"`
	URL       string   `json:"url,omitempty"`
	Type      string   `json:"type"`
	Tags      []string `json:"tags"`
	IsStarred bool     `json:"isStarred"`
}

FoundBoard keeps result of search with metadata of a dashboard.

type GraphPanel

type GraphPanel struct {
	AliasColors interface{} `json:"aliasColors"` // XXX
	Bars        bool        `json:"bars"`
	DashLength  *uint       `json:"dashLength,omitempty"`
	Dashes      *bool       `json:"dashes,omitempty"`
	Decimals    *uint       `json:"decimals,omitempty"`
	Fill        int         `json:"fill"`

	Legend struct {
		AlignAsTable bool  `json:"alignAsTable"`
		Avg          bool  `json:"avg"`
		Current      bool  `json:"current"`
		HideEmpty    bool  `json:"hideEmpty"`
		HideZero     bool  `json:"hideZero"`
		Max          bool  `json:"max"`
		Min          bool  `json:"min"`
		RightSide    bool  `json:"rightSide"`
		Show         bool  `json:"show"`
		SideWidth    *uint `json:"sideWidth,omitempty"`
		Total        bool  `json:"total"`
		Values       bool  `json:"values"`
	} `json:"legend,omitempty"`
	LeftYAxisLabel  *string          `json:"leftYAxisLabel,omitempty"`
	Lines           bool             `json:"lines"`
	Linewidth       uint             `json:"linewidth"`
	NullPointMode   string           `json:"nullPointMode"`
	Percentage      bool             `json:"percentage"`
	Pointradius     int              `json:"pointradius"`
	Points          bool             `json:"points"`
	RightYAxisLabel *string          `json:"rightYAxisLabel,omitempty"`
	SeriesOverrides []SeriesOverride `json:"seriesOverrides,omitempty"`
	SpaceLength     *uint            `json:"spaceLength,omitempty"`
	Stack           bool             `json:"stack"`
	SteppedLine     bool             `json:"steppedLine"`
	Targets         []Target         `json:"targets,omitempty"`
	Thresholds      []Threshold      `json:"thresholds,omitempty"`
	TimeFrom        *string          `json:"timeFrom,omitempty"`
	TimeShift       *string          `json:"timeShift,omitempty"`
	Tooltip         Tooltip          `json:"tooltip"`
	XAxis           bool             `json:"x-axis,omitempty"`
	YAxis           bool             `json:"y-axis,omitempty"`
	YFormats        []string         `json:"y_formats,omitempty"`
	Xaxis           Axis             `json:"xaxis"` // was added in Grafana 4.x?
	Yaxes           []Axis           `json:"yaxes"` // was added in Grafana 4.x?
}

type Height

type Height string

Height of rows maybe passed as number (ex 200) or as string (ex "200px") or empty string

func (*Height) UnmarshalJSON

func (h *Height) UnmarshalJSON(raw []byte) error

type IntString

type IntString struct {
	Value int64
	Valid bool
}

IntString represents special type for json values that could be strings or ints: 100 or "100"

func NewIntString

func NewIntString(i int64) *IntString

func (*IntString) MarshalJSON

func (v *IntString) MarshalJSON() ([]byte, error)

MarshalJSON implements custom marshalling for IntString type

func (*IntString) UnmarshalJSON

func (v *IntString) UnmarshalJSON(raw []byte) error

UnmarshalJSON implements custom unmarshalling for IntString type

type MapType

type MapType struct {
	Name  *string `json:"name,omitempty"`
	Value *int    `json:"value,omitempty"`
}

type Option

type Option struct {
	Text     string `json:"text"`
	Value    string `json:"value"`
	Selected bool   `json:"selected"`
}

for templateVar

type Org

type Org struct {
	ID   uint   `json:"id"`
	Name string `json:"name"`
}

type OrgUser

type OrgUser struct {
	ID    uint   `json:"id"`
	OrgId uint   `json:"orgId"`
	Email string `json:"email"`
	Login string `json:"login"`
	Role  string `json:"role"`
}

type PageUsers

type PageUsers struct {
	TotalCount int    `json:"totalCount"`
	Users      []User `json:"users"`
	Page       int    `json:"page"`
	PerPage    int    `json:"perPage"`
}

type Panel

type Panel struct {

	// Should be initialized only one type of panels.
	// OfType field defines which of types below will be used.
	*GraphPanel
	*TablePanel
	*TextPanel
	*SinglestatPanel
	*DashlistPanel
	*PluginlistPanel
	*RowPanel
	*CustomPanel
	// contains filtered or unexported fields
}

Panel represents panels of different types defined in Grafana.

func NewCustom

func NewCustom(title string) *Panel

NewCustom initializes panel with a singlestat panel.

func NewDashlist

func NewDashlist(title string) *Panel

NewDashlist initializes panel with a dashlist panel.

func NewGraph

func NewGraph(title string) *Panel

NewGraph initializes panel with a graph panel.

func NewPluginlist

func NewPluginlist(title string) *Panel

NewPluginlist initializes panel with a singlestat panel.

func NewSinglestat

func NewSinglestat(title string) *Panel

NewSinglestat initializes panel with a singlestat panel.

func NewTable

func NewTable(title string) *Panel

NewTable initializes panel with a table panel.

func NewText

func NewText(title string) *Panel

NewText initializes panel with a text panel.

func (*Panel) AddTarget

func (p *Panel) AddTarget(t *Target)

AddTarget adds a new target as defined in the argument but with refId letter incremented. Value of refID from the argument will be used only if no target with such value already exists.

func (*Panel) GetTargets

func (p *Panel) GetTargets() *[]Target

GetTargets is iterate over all panel targets. It just returns nil if no targets defined for panel of concrete type.

func (*Panel) MarshalJSON

func (p *Panel) MarshalJSON() ([]byte, error)

func (*Panel) RepeatDatasourcesForEachTarget

func (p *Panel) RepeatDatasourcesForEachTarget(dsNames ...string)

MapDatasources on all existing targets for the panel.

func (*Panel) RepeatTargetsForDatasources

func (p *Panel) RepeatTargetsForDatasources(dsNames ...string)

RepeatTargetsForDatasources repeats all existing targets for a panel for all provided in the argument datasources. Existing datasources of targets are ignored.

func (*Panel) ResetTargets

func (p *Panel) ResetTargets()

ResetTargets delete all targets defined for a panel.

func (*Panel) SetTarget

func (p *Panel) SetTarget(t *Target)

SetTarget updates a target if target with such refId exists or creates a new one.

func (*Panel) UnmarshalJSON

func (p *Panel) UnmarshalJSON(b []byte) (err error)

type Permission

type Permission struct {
	ID             uint      `json:"id,omitempty"`
	DashboardID    uint      `json:"dashboardId,omitempty"`
	Created        time.Time `json:"created,omitempty"`
	Updated        time.Time `json:"updated,omitempty"`
	UserID         uint      `json:"userId,omitempty"`
	UserLogin      string    `json:"userLogin,omitempty"`
	UserEmail      string    `json:"userEmail,omitempty"`
	TeamID         uint      `json:"teamId,omitempty"`
	Team           string    `json:"team,omitempty"`
	Role           string    `json:"role,omitempty"`
	Permission     uint      `json:"permission,omitempty"`
	PermissionName string    `json:"permissionName,omitempty"`
	UID            string    `json:"uid,omitempty"`
	Title          string    `json:"title,omitempty"`
	Slug           string    `json:"slug,omitempty"`
	IsFolder       bool      `json:"isFolder,omitempty"`
	URL            string    `json:"url,omitempty"`
}

Permission keeps existing permissions for a dashboard.

type Permissions

type Permissions struct {
	Items []Permission `json:"items"`
}

Permissions keeps list of all permissions for a dashboard.

type PluginlistPanel

type PluginlistPanel struct {
	Limit int `json:"limit,omitempty"`
}

type RangeMap

type RangeMap struct {
	From *string `json:"from,omitempty"`
	Text *string `json:"text,omitempty"`
	To   *string `json:"to,omitempty"`
}

type Row

type Row struct {
	Title     string  `json:"title"`
	ShowTitle bool    `json:"showTitle"`
	Collapse  bool    `json:"collapse"`
	Editable  bool    `json:"editable"`
	Height    Height  `json:"height"`
	Panels    []Panel `json:"panels"`
	Repeat    *string `json:"repeat"`
}

Row represents single row of Grafana dashboard.

func (*Row) Add

func (r *Row) Add(panel *Panel)

func (*Row) AddCustom

func (r *Row) AddCustom(data *CustomPanel)

func (*Row) AddDashlist

func (r *Row) AddDashlist(data *DashlistPanel)

func (*Row) AddGraph

func (r *Row) AddGraph(data *GraphPanel)

func (*Row) AddSinglestat

func (r *Row) AddSinglestat(data *SinglestatPanel)

func (*Row) AddTable

func (r *Row) AddTable(data *TablePanel)

func (*Row) AddText

func (r *Row) AddText(data *TextPanel)

type RowPanel

type RowPanel struct {
	ShowTitle bool    `json:"showTitle"`
	Collapsed bool    `json:"collapsed"`
	Panels    []Panel `json:"panels"`
}

type SeriesOverride

type SeriesOverride struct {
	Alias         string      `json:"alias"`
	Bars          *bool       `json:"bars,omitempty"`
	Color         *string     `json:"color,omitempty"`
	Fill          *int        `json:"fill,omitempty"`
	FillBelowTo   *string     `json:"fillBelowTo,omitempty"`
	Legend        *bool       `json:"legend,omitempty"`
	Lines         *bool       `json:"lines,omitempty"`
	Stack         *BoolString `json:"stack,omitempty"`
	Transform     *string     `json:"transform,omitempty"`
	YAxis         *int        `json:"yaxis,omitempty"`
	ZIndex        *int        `json:"zindex,omitempty"`
	NullPointMode *string     `json:"nullPointMode,omitempty"`
}

for a graph panel

type SinglestatPanel

type SinglestatPanel struct {
	Colors          []string `json:"colors"`
	ColorValue      bool     `json:"colorValue"`
	ColorBackground bool     `json:"colorBackground"`
	Decimals        int      `json:"decimals"`
	Format          string   `json:"format"`
	Gauge           struct {
		MaxValue         float32 `json:"maxValue"`
		MinValue         float32 `json:"minValue"`
		Show             bool    `json:"show"`
		ThresholdLabels  bool    `json:"thresholdLabels"`
		ThresholdMarkers bool    `json:"thresholdMarkers"`
	} `json:"gauge,omitempty"`
	MappingType     *uint       `json:"mappingType,omitempty"`
	MappingTypes    []*MapType  `json:"mappingTypes,omitempty"`
	MaxDataPoints   *IntString  `json:"maxDataPoints,omitempty"`
	NullPointMode   string      `json:"nullPointMode"`
	Postfix         *string     `json:"postfix,omitempty"`
	PostfixFontSize *string     `json:"postfixFontSize,omitempty"`
	Prefix          *string     `json:"prefix,omitempty"`
	PrefixFontSize  *string     `json:"prefixFontSize,omitempty"`
	RangeMaps       []*RangeMap `json:"rangeMaps,omitempty"`
	SparkLine       struct {
		FillColor *string `json:"fillColor,omitempty"`
		Full      bool    `json:"full,omitempty"`
		LineColor *string `json:"lineColor,omitempty"`
		Show      bool    `json:"show,omitempty"`
	} `json:"sparkline,omitempty"`
	Targets       []Target   `json:"targets,omitempty"`
	Thresholds    string     `json:"thresholds"`
	ValueFontSize string     `json:"valueFontSize"`
	ValueMaps     []valueMap `json:"valueMaps"`
	ValueName     string     `json:"valueName"`
}

type StatusMessage

type StatusMessage struct {
	ID      *uint   `json:"id"`
	OrgID   *uint   `json:"orgId"`
	Message *string `json:"message"`
	Slug    *string `json:"slug"`
	Version *int    `json:"version"`
	Status  *string `json:"resp"`
}

StatusMessage reflects status message as it returned by Grafana REST API.

type TablePanel

type TablePanel struct {
	Columns []column `json:"columns"`
	Sort    *struct {
		Col  uint `json:"col"`
		Desc bool `json:"desc"`
	} `json:"sort,omitempty"`
	Styles    []columnStyle `json:"styles"`
	Transform string        `json:"transform"`
	Targets   []Target      `json:"targets,omitempty"`
	Scroll    bool          `json:"scroll"` // from grafana 3.x
}

type Target

type Target struct {
	RefID      string `json:"refId"`
	Datasource string `json:"datasource,omitempty"`

	// For Prometheus
	Expr           string `json:"expr,omitempty"`
	IntervalFactor int    `json:"intervalFactor,omitempty"`
	Interval       string `json:"interval,omitempty"`
	Step           int    `json:"step,omitempty"`
	LegendFormat   string `json:"legendFormat,omitempty"`
	Instant        bool   `json:"instant,omitempty"`
	Format         string `json:"format,omitempty"`

	// For Elasticsearch
	DsType  *string `json:"dsType,omitempty"`
	Metrics []struct {
		ID    string `json:"id"`
		Field string `json:"field"`
		Type  string `json:"type"`
	} `json:"metrics,omitempty"`
	Query      string `json:"query,omitempty"`
	Alias      string `json:"alias,omitempty"`
	RawQuery   bool   `json:"rawQuery,omitempty"`
	TimeField  string `json:"timeField,omitempty"`
	BucketAggs []struct {
		ID       string `json:"id"`
		Field    string `json:"field"`
		Type     string `json:"type"`
		Settings struct {
			Interval    string `json:"interval"`
			MinDocCount int    `json:"min_doc_count"`
		} `json:"settings"`
	} `json:"bucketAggs,omitempty"`

	// For Graphite
	Target string `json:"target,omitempty"`
}

for an any panel

type TemplateVar

type TemplateVar struct {
	Name        string   `json:"name"`
	Type        string   `json:"type"`
	Auto        bool     `json:"auto,omitempty"`
	AutoCount   *int     `json:"auto_count,omitempty"`
	Datasource  *string  `json:"datasource"`
	Refresh     BoolInt  `json:"refresh"`
	Options     []Option `json:"options"`
	IncludeAll  bool     `json:"includeAll"`
	AllFormat   string   `json:"allFormat"`
	AllValue    string   `json:"allValue"`
	Multi       bool     `json:"multi"`
	MultiFormat string   `json:"multiFormat"`
	Query       string   `json:"query"`
	Regex       string   `json:"regex"`
	Current     Current  `json:"current"`
	Label       string   `json:"label"`
	Hide        uint8    `json:"hide"`
	Sort        int      `json:"sort"`
}

type Templating

type Templating struct {
	List []TemplateVar `json:"list"`
}

type TextPanel

type TextPanel struct {
	Content    string `json:"content"`
	Mode       string `json:"mode"`
	PageSize   uint   `json:"pageSize"`
	Scroll     bool   `json:"scroll"`
	ShowHeader bool   `json:"showHeader"`
	Sort       struct {
		Col  int  `json:"col"`
		Desc bool `json:"desc"`
	} `json:"sort"`
	Styles []columnStyle `json:"styles"`
}

type Threshold

type Threshold struct {
	// the alert threshold value, we do not omitempty, since 0 is a valid
	// threshold
	Value float32 `json:"value"`
	// critical, warning, ok, custom
	ColorMode string `json:"colorMode,omitempty"`
	// gt or lt
	Op   string `json:"op,omitempty"`
	Fill bool   `json:"fill"`
	Line bool   `json:"line"`
	// hexidecimal color (e.g. #629e51, only when ColorMode is "custom")
	FillColor string `json:"fillColor,omitempty"`
	// hexidecimal color (e.g. #629e51, only when ColorMode is "custom")
	LineColor string `json:"lineColor,omitempty"`
	// left or right
	Yaxis string `json:"yaxis,omitempty"`
}

type Time

type Time struct {
	From string `json:"from"`
	To   string `json:"to"`
}

type Timepicker

type Timepicker struct {
	Now              *bool    `json:"now,omitempty"`
	RefreshIntervals []string `json:"refresh_intervals"`
	TimeOptions      []string `json:"time_options"`
}

type Tooltip

type Tooltip struct {
	Shared       bool   `json:"shared"`
	ValueType    string `json:"value_type"`
	MsResolution bool   `json:"msResolution,omitempty"` // was added in Grafana 3.x
	Sort         int    `json:"sort,omitempty"`
}

type User

type User struct {
	ID             uint   `json:"id"`
	Login          string `json:"login"`
	Name           string `json:"name"`
	Email          string `json:"email"`
	Theme          string `json:"theme"`
	OrgID          uint   `json:"orgId"`
	Password       string `json:"password"`
	IsGrafanaAdmin bool   `json:"isGrafanaAdmin"`
}

type UserRole

type UserRole struct {
	LoginOrEmail string `json:"loginOrEmail"`
	Role         string `json:"role"`
}

Directories

Path Synopsis
cmd
backup-dashboards
This is a simple example of usage of Grafana client for copying dashboards and saving them to a disk.
This is a simple example of usage of Grafana client for copying dashboards and saving them to a disk.
backup-datasources
This is a simple example of usage of Grafana client for copying dashboards and saving them to a disk.
This is a simple example of usage of Grafana client for copying dashboards and saving them to a disk.
import-dashboards
This is a simple example of usage of Grafana client for importing dashboards from a bunch of JSON files (current dir used).
This is a simple example of usage of Grafana client for importing dashboards from a bunch of JSON files (current dir used).
import-dashboards-raw
This is a simple example of usage of Grafana sdk for importing dashboards from a bunch of JSON files (current dir used).
This is a simple example of usage of Grafana sdk for importing dashboards from a bunch of JSON files (current dir used).
import-datasources
This is a simple example of usage of Grafana client for importing datasources from a bunch of JSON files (current dir used).
This is a simple example of usage of Grafana client for importing datasources from a bunch of JSON files (current dir used).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL