grafana/pkg/models/dashboards.go

170 lines
3.4 KiB
Go
Raw Normal View History

2014-08-08 05:35:15 -05:00
package models
import (
2014-11-20 05:11:07 -06:00
"errors"
"strings"
2014-08-21 15:09:48 -05:00
"time"
"github.com/gosimple/slug"
2016-03-11 17:13:06 -06:00
"github.com/grafana/grafana/pkg/components/simplejson"
2014-08-08 05:35:15 -05:00
)
2014-11-20 05:11:07 -06:00
// Typed errors
var (
ErrDashboardNotFound = errors.New("Dashboard not found")
ErrDashboardSnapshotNotFound = errors.New("Dashboard snapshot not found")
ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
2014-10-06 14:31:54 -05:00
)
var (
DashTypeJson = "file"
DashTypeDB = "db"
DashTypeScript = "script"
DashTypeSnapshot = "snapshot"
)
// Dashboard model
2014-08-08 05:35:15 -05:00
type Dashboard struct {
Id int64
Slug string
OrgId int64
GnetId int64
Version int
PluginId string
2014-11-20 05:11:07 -06:00
Created time.Time
Updated time.Time
2014-08-21 15:09:48 -05:00
2015-12-18 03:52:05 -06:00
UpdatedBy int64
2016-01-28 00:00:24 -06:00
CreatedBy int64
2015-12-18 02:20:23 -06:00
2014-08-21 15:09:48 -05:00
Title string
2016-03-11 17:13:06 -06:00
Data *simplejson.Json
2014-08-21 15:09:48 -05:00
}
// NewDashboard creates a new dashboard
2014-08-08 05:35:15 -05:00
func NewDashboard(title string) *Dashboard {
dash := &Dashboard{}
2016-03-11 17:13:06 -06:00
dash.Data = simplejson.New()
dash.Data.Set("title", title)
dash.Title = title
2015-11-20 06:37:24 -06:00
dash.Created = time.Now()
2015-11-20 06:52:50 -06:00
dash.Updated = time.Now()
dash.UpdateSlug()
2014-08-08 05:35:15 -05:00
return dash
}
// GetTags turns the tags in data json into go string array
func (dash *Dashboard) GetTags() []string {
2016-03-11 17:13:06 -06:00
return dash.Data.Get("tags").MustStringArray()
}
2016-03-11 17:13:06 -06:00
func NewDashboardFromJson(data *simplejson.Json) *Dashboard {
2014-12-22 05:25:08 -06:00
dash := &Dashboard{}
dash.Data = data
2016-03-11 17:13:06 -06:00
dash.Title = dash.Data.Get("title").MustString()
2015-11-20 06:52:50 -06:00
dash.UpdateSlug()
2014-08-08 05:35:15 -05:00
2016-03-11 17:13:06 -06:00
if id, err := dash.Data.Get("id").Float64(); err == nil {
dash.Id = int64(id)
2016-03-11 17:13:06 -06:00
if version, err := dash.Data.Get("version").Float64(); err == nil {
dash.Version = int(version)
2015-11-20 06:52:50 -06:00
dash.Updated = time.Now()
}
} else {
2016-03-11 17:13:06 -06:00
dash.Data.Set("version", 0)
2015-11-20 06:52:50 -06:00
dash.Created = time.Now()
dash.Updated = time.Now()
2014-08-08 05:35:15 -05:00
}
if gnetId, err := dash.Data.Get("gnetId").Float64(); err == nil {
dash.GnetId = int64(gnetId)
}
2014-12-22 05:25:08 -06:00
return dash
2014-08-08 05:35:15 -05:00
}
// GetDashboardModel turns the command into the savable model
func (cmd *SaveDashboardCommand) GetDashboardModel() *Dashboard {
dash := NewDashboardFromJson(cmd.Dashboard)
2016-03-11 17:13:06 -06:00
if dash.Data.Get("version").MustInt(0) == 0 {
2016-01-28 00:00:24 -06:00
dash.CreatedBy = cmd.UserId
}
2016-03-11 17:13:06 -06:00
2016-01-28 00:00:24 -06:00
dash.UpdatedBy = cmd.UserId
dash.OrgId = cmd.OrgId
dash.PluginId = cmd.PluginId
dash.UpdateSlug()
return dash
}
// GetString a
func (dash *Dashboard) GetString(prop string, defaultValue string) string {
2016-03-11 17:13:06 -06:00
return dash.Data.Get(prop).MustString(defaultValue)
2014-08-08 05:35:15 -05:00
}
// UpdateSlug updates the slug
func (dash *Dashboard) UpdateSlug() {
2016-03-11 17:13:06 -06:00
title := strings.ToLower(dash.Data.Get("title").MustString())
dash.Slug = slug.Make(title)
}
//
// COMMANDS
//
type SaveDashboardCommand struct {
2016-03-11 17:13:06 -06:00
Dashboard *simplejson.Json `json:"dashboard" binding:"Required"`
UserId int64 `json:"userId"`
OrgId int64 `json:"-"`
Overwrite bool `json:"overwrite"`
PluginId string `json:"-"`
Result *Dashboard
}
type DeleteDashboardCommand struct {
Slug string
OrgId int64
}
//
// QUERIES
//
type GetDashboardQuery struct {
Slug string
OrgId int64
Result *Dashboard
}
type DashboardTagCloudItem struct {
Term string `json:"term"`
Count int `json:"count"`
}
type GetDashboardTagsQuery struct {
OrgId int64
Result []*DashboardTagCloudItem
}
type GetDashboardsQuery struct {
DashboardIds []int64
Result []*Dashboard
}
type GetDashboardsByPluginIdQuery struct {
OrgId int64
PluginId string
Result []*Dashboard
}
2016-03-17 03:01:58 -05:00
type GetDashboardSlugByIdQuery struct {
Id int64
Result string
}