sdk

package module
v0.0.0-...-92c92cc Latest Latest
Warning

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

Go to latest
Published: May 27, 2019 License: Apache-2.0 Imports: 13 Imported by: 1

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/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.

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
	HeatMapType
	TableType
	TextType
	PluginlistType
	AlertlistType
	SinglestatType
)

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.

Functions

This section is empty.

Types

type Alert

type Alert struct {
	Conditions          []AlertCondition    `json:"conditions,omitempty"`
	ExecutionErrorState string              `json:"executionErrorState,omitempty"`
	Frequency           string              `json:"frequency,omitempty"`
	Handler             int                 `json:"handler,omitempty"`
	Name                string              `json:"name,omitempty"`
	NoDataState         string              `json:"noDataState,omitempty"`
	Notifications       []AlertNotification `json:"notifications,omitempty"`
	Message             string              `json:"message,omitempty"`
}

type AlertCondition

type AlertCondition struct {
	Evaluator struct {
		Params []float64 `json:"params,omitempty"`
		Type   string    `json:"type,omitempty"`
	} `json:"evaluator,omitempty"`
	Operator struct {
		Type string `json:"type,omitempty"`
	} `json:"operator,omitempty"`
	Query struct {
		Params []string `json:"params,omitempty"`
	} `json:"query,omitempty"`
	Reducer struct {
		Params []string `json:"params,omitempty"`
		Type   string   `json:"type,omitempty"`
	} `json:"reducer,omitempty"`
	Type string `json:"type,omitempty"`
}

type AlertNotification

type AlertNotification struct {
	ID  int    `json:"id,omitempty"`
	UID string `json:"uid,omitempty"`
}

type AlertlistPanel

type AlertlistPanel struct {
	OnlyAlertsOnDashboard bool     `json:"onlyAlertsOnDashboard"`
	Show                  string   `json:"show"`
	SortOrder             int      `json:"sortOrder"`
	Limit                 int      `json:"limit"`
	StateFilter           []string `json:"stateFilter"`
}

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"`
}

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"`
	Label   string       `json:"label,omitempty"`
}

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"

	"github.com/grafana-tools/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) CreateFolder

func (r *Client) CreateFolder(f Folder) (resp FolderProperties, err error)

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) DeleteDashboard

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

DeleteDashboard deletes dashboard that selected by slug string. Grafana only can delete a dashboard in a database. File dashboards may be only loaded with HTTP API but not deteled.

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) 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) GetDashboard

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

GetDashboard loads a dashboard from Grafana instance along with metadata for a dashboard. 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) 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) GetFolder

func (r *Client) GetFolder(uid string) (resp FolderProperties, err 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 GetDashboard() 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, folderId int) (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) SetRawDashboard

func (r *Client) SetRawDashboard(raw []byte) 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) 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 {
	UID   string `json:"uid"`
	Title string `json:"title"`
}

func NewFolder

func NewFolder(uid, title string) Folder

type FolderProperties

type FolderProperties struct {
	ID        int       `json:"id"`
	UID       string    `json:"uid"`
	Title     string    `json:"title"`
	URL       string    `json:"url"`
	HasACL    bool      `json:"hasAcl"`
	CanSave   bool      `json:"canSave"`
	CanEdit   bool      `json:"canEdit"`
	CanAdmin  bool      `json:"canAdmin"`
	CreatedBy string    `json:"createdBy"`
	Created   time.Time `json:"created"`
	UpdatedBy string    `json:"updatedBy"`
	Updated   time.Time `json:"updated"`
	Version   int       `json:"version"`
}

type FoundBoard

type FoundBoard struct {
	ID        uint     `json:"id"`
	Title     string   `json:"title"`
	URI       string   `json:"uri"`
	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 HeatmapPanel

type HeatmapPanel struct {
	Cards struct {
		CardPadding interface{} `json:"cardPadding"`
		CardRound   interface{} `json:"cardRound"`
	} `json:"cards"`
	Color struct {
		CardColor   string  `json:"cardColor"`
		ColorScale  string  `json:"colorScale"`
		ColorScheme string  `json:"colorScheme"`
		Exponent    float64 `json:"exponent"`
		Mode        string  `json:"mode"`
	} `json:"color"`
	DataFormat string `json:"dataFormat"`

	Heatmap struct {
	} `json:"heatmap"`
	HideZeroBuckets bool `json:"hideZeroBuckets"`
	HighlightCards  bool `json:"highlightCards"`
	//ID              int  `json:"id"`
	Legend struct {
		Show bool `json:"show"`
	} `json:"legend"`
	ReverseYBuckets bool        `json:"reverseYBuckets"`
	TimeFrom        interface{} `json:"timeFrom"`
	TimeShift       interface{} `json:"timeShift"`
	//Title           string      `json:"title"`
	Tooltip struct {
		Show          bool `json:"show"`
		ShowHistogram bool `json:"showHistogram"`
	} `json:"tooltip"`
	//Type  string `json:"type"`
	XAxis struct {
		Show bool `json:"show"`
	} `json:"xAxis"`
	XBucketNumber interface{} `json:"xBucketNumber"`
	XBucketSize   interface{} `json:"xBucketSize"`
	YAxis         struct {
		Decimals    interface{} `json:"decimals"`
		Format      string      `json:"format"`
		LogBase     int         `json:"logBase"`
		Max         interface{} `json:"max"`
		Min         interface{} `json:"min"`
		Show        bool        `json:"show"`
		SplitFactor interface{} `json:"splitFactor"`
	} `json:"yAxis"`
	YBucketBound  string      `json:"yBucketBound"`
	YBucketNumber interface{} `json:"yBucketNumber"`
	YBucketSize   interface{} `json:"yBucketSize"`
	Targets       []Target    `json:"targets,omitempty"`
}

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
	*HeatmapPanel
	*TablePanel
	*TextPanel
	*SinglestatPanel
	*DashlistPanel
	*PluginlistPanel
	*RowPanel
	*AlertlistPanel
	*CustomPanel
	// contains filtered or unexported fields
}

Panel represents panels of different types defined in Grafana.

func NewAlertlist

func NewAlertlist(title string) *Panel

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 NewHeatmap

func NewHeatmap(title string) *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 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 {
	Panels []Panel
}

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"`
		Meta     interface{} `json:"meta"`
		Settings interface{} `json:"settings"`
	} `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 CloudWatch
	Namespace  string            `json:"namespace,omitempty"`
	MetricName string            `json:"metricName,omitempty"`
	Statistics []string          `json:"statistics,omitempty"`
	Dimensions map[string]string `json:"dimensions,omitempty"`
	Period     string            `json:"period,omitempty"`
	Region     string            `json:"region,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