mirror of
https://github.com/grafana/grafana.git
synced 2024-11-30 12:44:10 -06:00
88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package dashboards
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/grafana/grafana/pkg/log"
|
|
yaml "gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type configReader struct {
|
|
path string
|
|
log log.Logger
|
|
}
|
|
|
|
func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, error) {
|
|
filename, _ := filepath.Abs(filepath.Join(cr.path, file.Name()))
|
|
yamlFile, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
apiVersion := &ConfigVersion{ApiVersion: 0}
|
|
yaml.Unmarshal(yamlFile, &apiVersion)
|
|
|
|
if apiVersion.ApiVersion > 0 {
|
|
|
|
v1 := &DashboardAsConfigV1{}
|
|
err := yaml.Unmarshal(yamlFile, &v1)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if v1 != nil {
|
|
return v1.mapToDashboardAsConfig(), nil
|
|
}
|
|
|
|
} else {
|
|
var v0 []*DashboardsAsConfigV0
|
|
err := yaml.Unmarshal(yamlFile, &v0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if v0 != nil {
|
|
cr.log.Warn("[Deprecated] the dashboard provisioning config is outdated. please upgrade", "filename", filename)
|
|
return mapV0ToDashboardAsConfig(v0), nil
|
|
}
|
|
}
|
|
|
|
return []*DashboardsAsConfig{}, nil
|
|
}
|
|
|
|
func (cr *configReader) readConfig() ([]*DashboardsAsConfig, error) {
|
|
var dashboards []*DashboardsAsConfig
|
|
|
|
files, err := ioutil.ReadDir(cr.path)
|
|
if err != nil {
|
|
cr.log.Error("cant read dashboard provisioning files from directory", "path", cr.path)
|
|
return dashboards, nil
|
|
}
|
|
|
|
for _, file := range files {
|
|
if (!strings.HasSuffix(file.Name(), ".yaml") && !strings.HasSuffix(file.Name(), ".yml")) || file.Name() == "sample.yaml" {
|
|
continue
|
|
}
|
|
|
|
parsedDashboards, err := cr.parseConfigs(file)
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
if len(parsedDashboards) > 0 {
|
|
dashboards = append(dashboards, parsedDashboards...)
|
|
}
|
|
}
|
|
|
|
for i := range dashboards {
|
|
if dashboards[i].OrgId == 0 {
|
|
dashboards[i].OrgId = 1
|
|
}
|
|
}
|
|
|
|
return dashboards, nil
|
|
}
|