admin.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package api
  2. import (
  3. "regexp"
  4. "strings"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/setting"
  8. )
  9. func AdminGetSettings(c *m.ReqContext) {
  10. settings := make(map[string]interface{})
  11. for _, section := range setting.Cfg.Sections() {
  12. jsonSec := make(map[string]interface{})
  13. settings[section.Name()] = jsonSec
  14. for _, key := range section.Keys() {
  15. keyName := key.Name()
  16. value := key.Value()
  17. if strings.Contains(keyName, "secret") || strings.Contains(keyName, "password") || (strings.Contains(keyName, "provider_config")) {
  18. value = "************"
  19. }
  20. if strings.Contains(keyName, "url") {
  21. var rgx = regexp.MustCompile(`.*:\/\/([^:]*):([^@]*)@.*?$`)
  22. var subs = rgx.FindAllSubmatch([]byte(value), -1)
  23. if subs != nil && len(subs[0]) == 3 {
  24. value = strings.Replace(value, string(subs[0][1]), "******", 1)
  25. value = strings.Replace(value, string(subs[0][2]), "******", 1)
  26. }
  27. }
  28. jsonSec[keyName] = value
  29. }
  30. }
  31. c.JSON(200, settings)
  32. }
  33. func AdminGetStats(c *m.ReqContext) {
  34. statsQuery := m.GetAdminStatsQuery{}
  35. if err := bus.Dispatch(&statsQuery); err != nil {
  36. c.JsonApiErr(500, "Failed to get admin stats from database", err)
  37. return
  38. }
  39. c.JSON(200, statsQuery.Result)
  40. }