mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 17:43:35 -06:00
dashboards as cfg: make dashboard none editable by default
This commit is contained in:
parent
7f3a7ea128
commit
93e1d8a19c
@ -29,6 +29,7 @@ func TestDashboardsAsConfig(t *testing.T) {
|
||||
So(ds.Type, ShouldEqual, "file")
|
||||
So(ds.OrgId, ShouldEqual, 2)
|
||||
So(ds.Folder, ShouldEqual, "developers")
|
||||
So(ds.Editable, ShouldBeTrue)
|
||||
|
||||
So(len(ds.Options), ShouldEqual, 1)
|
||||
So(ds.Options["folder"], ShouldEqual, "/var/lib/grafana/dashboards")
|
||||
@ -39,6 +40,7 @@ func TestDashboardsAsConfig(t *testing.T) {
|
||||
So(ds2.Type, ShouldEqual, "file")
|
||||
So(ds2.OrgId, ShouldEqual, 1)
|
||||
So(ds2.Folder, ShouldEqual, "")
|
||||
So(ds2.Editable, ShouldBeFalse)
|
||||
|
||||
So(len(ds2.Options), ShouldEqual, 1)
|
||||
So(ds2.Options["folder"], ShouldEqual, "/var/lib/grafana/dashboards")
|
||||
|
@ -7,7 +7,6 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/bus"
|
||||
@ -24,31 +23,6 @@ type fileReader struct {
|
||||
dashboardCache *dashboardCache
|
||||
}
|
||||
|
||||
type dashboardCache struct {
|
||||
mutex *sync.Mutex
|
||||
dashboards map[string]*DashboardJson
|
||||
}
|
||||
|
||||
func newDashboardCache() *dashboardCache {
|
||||
return &dashboardCache{
|
||||
dashboards: map[string]*DashboardJson{},
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
func (dc *dashboardCache) addCache(json *DashboardJson) {
|
||||
dc.mutex.Lock()
|
||||
defer dc.mutex.Unlock()
|
||||
dc.dashboards[json.Path] = json
|
||||
}
|
||||
|
||||
func (dc *dashboardCache) getCache(path string) (*DashboardJson, bool) {
|
||||
dc.mutex.Lock()
|
||||
defer dc.mutex.Unlock()
|
||||
v, exist := dc.dashboards[path]
|
||||
return v, exist
|
||||
}
|
||||
|
||||
func NewDashboardFilereader(cfg *DashboardsAsConfig, log log.Logger) (*fileReader, error) {
|
||||
path, ok := cfg.Options["folder"].(string)
|
||||
if !ok {
|
||||
@ -152,20 +126,17 @@ func (fr *fileReader) readDashboardFromFile(path string) (*DashboardJson, error)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
stat, _ := os.Stat(path)
|
||||
dash := &DashboardJson{}
|
||||
dash.Dashboard = models.NewDashboardFromJson(data)
|
||||
dash.TitleLower = strings.ToLower(dash.Dashboard.Title)
|
||||
dash.Path = path
|
||||
dash.ModTime = stat.ModTime()
|
||||
dash.OrgId = fr.Cfg.OrgId
|
||||
dash.Folder = fr.Cfg.Folder
|
||||
|
||||
if dash.Dashboard.Title == "" {
|
||||
return nil, models.ErrDashboardTitleEmpty
|
||||
stat, err := os.Stat(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fr.dashboardCache.addCache(dash)
|
||||
dash, err := createDashboardJson(data, stat.ModTime(), fr.Cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fr.dashboardCache.addCache(path, dash)
|
||||
|
||||
return dash, nil
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
- name: 'general dashboards'
|
||||
org_id: 2
|
||||
folder: 'developers'
|
||||
editable: true
|
||||
type: file
|
||||
options:
|
||||
folder: /var/lib/grafana/dashboards
|
||||
|
@ -1,6 +1,8 @@
|
||||
package dashboard
|
||||
|
||||
import (
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@ -8,27 +10,60 @@ import (
|
||||
)
|
||||
|
||||
type DashboardsAsConfig struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Type string `json:"type" yaml:"type"`
|
||||
OrgId int64 `json:"org_id" yaml:"org_id"`
|
||||
Folder string `json:"folder" yaml:"folder"`
|
||||
Options map[string]interface{} `json:"options" yaml:"options"`
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Type string `json:"type" yaml:"type"`
|
||||
OrgId int64 `json:"org_id" yaml:"org_id"`
|
||||
Folder string `json:"folder" yaml:"folder"`
|
||||
Editable bool `json:"editable" yaml:"editable"`
|
||||
Options map[string]interface{} `json:"options" yaml:"options"`
|
||||
}
|
||||
|
||||
type DashboardJson struct {
|
||||
TitleLower string
|
||||
Path string
|
||||
OrgId int64
|
||||
Folder string
|
||||
ModTime time.Time
|
||||
Dashboard *models.Dashboard
|
||||
}
|
||||
|
||||
type DashboardIndex struct {
|
||||
mutex *sync.Mutex
|
||||
|
||||
PathToDashboard map[string]*DashboardJson
|
||||
type dashboardCache struct {
|
||||
mutex *sync.Mutex
|
||||
dashboards map[string]*DashboardJson
|
||||
}
|
||||
|
||||
type InsertDashboard func(cmd *models.Dashboard) error
|
||||
type UpdateDashboard func(cmd *models.SaveDashboardCommand) error
|
||||
func newDashboardCache() *dashboardCache {
|
||||
return &dashboardCache{
|
||||
dashboards: map[string]*DashboardJson{},
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
func (dc *dashboardCache) addCache(key string, json *DashboardJson) {
|
||||
dc.mutex.Lock()
|
||||
defer dc.mutex.Unlock()
|
||||
dc.dashboards[key] = json
|
||||
}
|
||||
|
||||
func (dc *dashboardCache) getCache(key string) (*DashboardJson, bool) {
|
||||
dc.mutex.Lock()
|
||||
defer dc.mutex.Unlock()
|
||||
v, exist := dc.dashboards[key]
|
||||
return v, exist
|
||||
}
|
||||
|
||||
func createDashboardJson(data *simplejson.Json, lastModified time.Time, cfg *DashboardsAsConfig) (*DashboardJson, error) {
|
||||
|
||||
dash := &DashboardJson{}
|
||||
dash.Dashboard = models.NewDashboardFromJson(data)
|
||||
dash.TitleLower = strings.ToLower(dash.Dashboard.Title)
|
||||
dash.ModTime = lastModified
|
||||
dash.OrgId = cfg.OrgId
|
||||
dash.Folder = cfg.Folder
|
||||
dash.Dashboard.Data.Set("editable", cfg.Editable)
|
||||
|
||||
if dash.Dashboard.Title == "" {
|
||||
return nil, models.ErrDashboardTitleEmpty
|
||||
}
|
||||
|
||||
return dash, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user