sdk

package module
v0.0.0-...-2b404a3 Latest Latest
Warning

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

Go to latest
Published: Apr 25, 2018 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/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
	TableType
	TextType
	PluginlistType
	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 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     *IntString `json:"max,omitempty"`
	Min     *IntString `json:"min,omitempty"`
	Show    bool       `json:"show"`
}

for a graph panel

type Board

type Board struct {
	ID              uint       `json:"id,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"`
	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,
  "rows": [
    {
      "title": "Sample row title",
      "showTitle": false,
      "collapse": false,
      "editable": true,
      "height": "250px",
      "panels": [
        {
          "id": 1,
          "title": "Sample graph",
          "span": 12,
          "renderer": "flot",
          "transparent": false,
          "type": "graph",
          "error": false,
          "isNew": true,
          "editable": false,
          "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
        },
        {
          "id": 2,
          "title": "Sample graph 2",
          "span": 12,
          "renderer": "flot",
          "transparent": false,
          "type": "graph",
          "error": false,
          "isNew": true,
          "editable": false,
          "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
        }
      ]
    }
  ],
  "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) AddUserToActualOrg

func (r *Client) AddUserToActualOrg(userRole UserRole) (StatusMessage, error)

AddUserToActualOrg creates a new organization It reflects POST /api/org/users

func (*Client) AddUserToOrg

func (r *Client) AddUserToOrg(user UserRole, oid uint) (StatusMessage, error)

AddUserToOrg add user to organization with id It reflects POST /api/orgs/:orgId/users API call.

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

func (r *Client) CreateOrg(org Org) (StatusMessage, error)

CreateOrg creates a new organization It reflects POST /api/orgs

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

func (r *Client) DeleteActualOrgUser(uid uint) (StatusMessage, error)

DeleteActualOrgUser delete user in actual organisation. It reflects DELETE /api/org/users/:userId API call.

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

func (r *Client) GetActualOrg() (Org, error)

GetActualOrg gets current organization. It reflects GET /api/org API call.

func (*Client) GetActualOrgUsers

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

GetActualOrgUsers get all users within the actual organisation.

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

func (r *Client) GetOrgById(oid uint) (Org, error)

GetOrgById gets organization by organization Id It reflects GET /api/orgs/:orgId

func (*Client) GetOrgByOrgName

func (r *Client) GetOrgByOrgName(name string) (Org, error)

GetOrgByOrgName gets organization by organization Id It reflects GET /api/orgs/:orgId

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

func (r *Client) UpdateActualOrg(org Org) (StatusMessage, error)

UpdateActualOrg updates current organization. It reflects PUT /api/org API call.

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.

func (*Client) UpdateUser

func (r *Client) UpdateUser(user User, uid uint) (StatusMessage, error)

UpdateUser updates the existing user It reflects POST /api/org/users/:userId

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 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"`
	Fill        int         `json:"fill"`
	//		Grid        grid        `json:"grid"` obsoleted in 4.1 by xaxis and yaxis
	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"`
		Total        bool  `json:"total"`
		Values       bool  `json:"values"`
		SideWidth    *uint `json:"sideWidth,omitempty"`
	} `json:"legend,omitempty"`
	LeftYAxisLabel  *string          `json:"leftYAxisLabel,omitempty"`
	RightYAxisLabel *string          `json:"rightYAxisLabel,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"`
	SeriesOverrides []SeriesOverride `json:"seriesOverrides,omitempty"`
	Stack           bool             `json:"stack"`
	SteppedLine     bool             `json:"steppedLine"`
	Targets         []Target         `json:"targets,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?
	Decimals        *uint            `json:"decimals,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 Option

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

for templateVar

type Org

type Org struct {
	Id   int64  `json:"id"`
	Name string `json:"name"`
}

type OrgUser

type OrgUser struct {
	LoginOrEmail *string `json:"loginOrEmail,omitempty"`
	Role         *string `json:"role,omitempty"`
}

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
	*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 PluginlistPanel

type PluginlistPanel struct {
	Limit int `json:"limit,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 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"`
	MaxDataPoints   *int     `json:"maxDataPoints,omitempty"`
	NullPointMode   string   `json:"nullPointMode"`
	Postfix         *string  `json:"postfix,omitempty"`
	Prefix          *string  `json:"prefix,omitempty"`
	PostfixFontSize *string  `json:"postfixFontSize,omitempty"`
	PrefixFontSize  *string  `json:"prefixFontSize,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"`
	ValueFontSize string     `json:"valueFontSize"`
	ValueMaps     []valueMap `json:"valueMaps"`
	ValueName     string     `json:"valueName"`
	Targets       []Target   `json:"targets,omitempty"`
	Thresholds    string     `json:"thresholds"`
	Gauge         struct {
		MaxValue         int  `json:"maxValue"`
		MinValue         int  `json:"minValue"`
		Show             bool `json:"show"`
		ThresholdLabels  bool `json:"thresholdLabels"`
		ThresholdMarkers bool `json:"thresholdMarkers"`
	} `json:"gauge,omitempty"`
}

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

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