grafana/pkg/models/dashboards.go

158 lines
3.1 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"
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
Version int
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
Data map[string]interface{}
}
// NewDashboard creates a new dashboard
2014-08-08 05:35:15 -05:00
func NewDashboard(title string) *Dashboard {
dash := &Dashboard{}
dash.Data = make(map[string]interface{})
dash.Data["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 {
jsonTags := dash.Data["tags"]
if jsonTags == nil || jsonTags == "" {
return []string{}
}
arr := jsonTags.([]interface{})
b := make([]string, len(arr))
for i := range arr {
b[i] = arr[i].(string)
}
return b
}
2016-01-28 00:00:24 -06:00
func NewDashboardFromJson(data map[string]interface{}) *Dashboard {
2014-12-22 05:25:08 -06:00
dash := &Dashboard{}
dash.Data = data
2014-12-22 05:25:08 -06:00
dash.Title = dash.Data["title"].(string)
2015-11-20 06:52:50 -06:00
dash.UpdateSlug()
2014-08-08 05:35:15 -05:00
2014-12-22 05:25:08 -06:00
if dash.Data["id"] != nil {
dash.Id = int64(dash.Data["id"].(float64))
if dash.Data["version"] != nil {
dash.Version = int(dash.Data["version"].(float64))
2015-11-20 06:52:50 -06:00
dash.Updated = time.Now()
}
} else {
dash.Data["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
}
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)
if dash.Data["version"] == 0 {
2016-01-28 00:00:24 -06:00
dash.CreatedBy = cmd.UserId
}
dash.UpdatedBy = cmd.UserId
dash.OrgId = cmd.OrgId
dash.UpdateSlug()
return dash
}
// GetString a
2014-08-08 05:35:15 -05:00
func (dash *Dashboard) GetString(prop string) string {
return dash.Data[prop].(string)
}
// UpdateSlug updates the slug
func (dash *Dashboard) UpdateSlug() {
title := strings.ToLower(dash.Data["title"].(string))
dash.Slug = slug.Make(title)
}
//
// COMMANDS
//
type SaveDashboardCommand struct {
Dashboard map[string]interface{} `json:"dashboard" binding:"Required"`
2016-01-28 00:00:24 -06:00
UserId int64 `json:"userId"`
OrgId int64 `json:"-"`
2016-01-28 00:00:24 -06:00
Overwrite bool `json:"overwrite"`
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
}