config_reader.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package dashboards
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "github.com/grafana/grafana/pkg/log"
  8. yaml "gopkg.in/yaml.v2"
  9. )
  10. type configReader struct {
  11. path string
  12. log log.Logger
  13. }
  14. func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, error) {
  15. filename, _ := filepath.Abs(filepath.Join(cr.path, file.Name()))
  16. yamlFile, err := ioutil.ReadFile(filename)
  17. if err != nil {
  18. return nil, err
  19. }
  20. apiVersion := &ConfigVersion{ApiVersion: 0}
  21. yaml.Unmarshal(yamlFile, &apiVersion)
  22. if apiVersion.ApiVersion > 0 {
  23. v1 := &DashboardAsConfigV1{}
  24. err := yaml.Unmarshal(yamlFile, &v1)
  25. if err != nil {
  26. return nil, err
  27. }
  28. if v1 != nil {
  29. return v1.mapToDashboardAsConfig(), nil
  30. }
  31. } else {
  32. var v0 []*DashboardsAsConfigV0
  33. err := yaml.Unmarshal(yamlFile, &v0)
  34. if err != nil {
  35. return nil, err
  36. }
  37. if v0 != nil {
  38. cr.log.Warn("[Deprecated] the dashboard provisioning config is outdated. please upgrade", "filename", filename)
  39. return mapV0ToDashboardAsConfig(v0), nil
  40. }
  41. }
  42. return []*DashboardsAsConfig{}, nil
  43. }
  44. func (cr *configReader) readConfig() ([]*DashboardsAsConfig, error) {
  45. var dashboards []*DashboardsAsConfig
  46. files, err := ioutil.ReadDir(cr.path)
  47. if err != nil {
  48. cr.log.Error("can't read dashboard provisioning files from directory", "path", cr.path)
  49. return dashboards, nil
  50. }
  51. for _, file := range files {
  52. if !strings.HasSuffix(file.Name(), ".yaml") && !strings.HasSuffix(file.Name(), ".yml") {
  53. continue
  54. }
  55. parsedDashboards, err := cr.parseConfigs(file)
  56. if err != nil {
  57. }
  58. if len(parsedDashboards) > 0 {
  59. dashboards = append(dashboards, parsedDashboards...)
  60. }
  61. }
  62. for i := range dashboards {
  63. if dashboards[i].OrgId == 0 {
  64. dashboards[i].OrgId = 1
  65. }
  66. }
  67. return dashboards, nil
  68. }