grafana/pkg/models/dashboards.go

121 lines
2.5 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"
"regexp"
"strings"
2014-08-21 15:09:48 -05:00
"time"
2014-08-08 05:35:15 -05:00
)
2014-11-20 05:11:07 -06:00
// Typed errors
var (
ErrDashboardNotFound = errors.New("Account not found")
ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
2014-10-06 14:31:54 -05:00
)
2014-08-08 05:35:15 -05:00
type Dashboard struct {
2014-11-20 05:11:07 -06:00
Id int64
Slug string `xorm:"index(IX_AccountIdSlug)"`
AccountId int64 `xorm:"index(IX_AccountIdSlug)"`
Created time.Time `xorm:"CREATED"`
Updated time.Time `xorm:"UPDATED"`
2014-08-21 15:09:48 -05:00
Title string
Tags []string
Data map[string]interface{}
}
2014-08-08 05:35:15 -05:00
type SearchResult struct {
Dashboards []DashboardSearchHit `json:"dashboards"`
Tags []DashboardTagCloudItem `json:"tags"`
TagsOnly bool `json:"tagsOnly"`
}
type DashboardSearchHit struct {
Id string `json:"id"`
Title string `json:"title"`
Slug string `json:"slug"`
Tags []string `json:"tags"`
}
type DashboardTagCloudItem struct {
Term string `json:"term"`
Count int `json:"count"`
2014-08-08 05:35:15 -05:00
}
type SearchDashboardsQuery struct {
Query string
AccountId int64
Result []DashboardSearchHit
}
type GetDashboardTagsQuery struct {
AccountId int64
Result []DashboardTagCloudItem
}
2014-12-22 05:25:08 -06:00
type SaveDashboardCommand struct {
Dashboard map[string]interface{} `json:"dashboard"`
AccountId int64 `json:"-"`
Result *Dashboard
}
type DeleteDashboardCommand struct {
Slug string
AccountId int64
}
type GetDashboardQuery struct {
Slug string
AccountId int64
Result *Dashboard
}
2014-12-22 05:25:08 -06:00
func convertToStringArray(arr []interface{}) []string {
b := make([]string, len(arr))
for i := range arr {
b[i] = arr[i].(string)
}
return b
}
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
dash.UpdateSlug()
2014-08-08 05:35:15 -05:00
return dash
}
2014-12-22 05:25:08 -06:00
func (cmd *SaveDashboardCommand) GetDashboardModel() *Dashboard {
dash := &Dashboard{}
dash.Data = cmd.Dashboard
dash.Title = dash.Data["title"].(string)
dash.AccountId = cmd.AccountId
dash.Tags = convertToStringArray(dash.Data["tags"].([]interface{}))
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))
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
}
func (dash *Dashboard) GetString(prop string) string {
return dash.Data[prop].(string)
}
func (dash *Dashboard) UpdateSlug() {
title := strings.ToLower(dash.Data["title"].(string))
re := regexp.MustCompile("[^\\w ]+")
re2 := regexp.MustCompile("\\s")
dash.Slug = re2.ReplaceAllString(re.ReplaceAllString(title, ""), "-")
}