grafana_path.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package utils
  2. import (
  3. "os"
  4. "path"
  5. "path/filepath"
  6. "github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
  7. )
  8. func GetGrafanaPluginDir(currentOS string) string {
  9. if isDevEnvironment() {
  10. return "../data/plugins"
  11. }
  12. return returnOsDefault(currentOS)
  13. }
  14. func isDevEnvironment() bool {
  15. // if ../conf/defaults.ini exists, grafana is not installed as package
  16. // that its in development environment.
  17. ex, err := os.Executable()
  18. if err != nil {
  19. logger.Error("Could not get executable path. Assuming non dev environment.")
  20. return false
  21. }
  22. exPath := filepath.Dir(ex)
  23. _, last := path.Split(exPath)
  24. if last == "bin" {
  25. // In dev env the executable for current platform is created in 'bin/' dir
  26. defaultsPath := filepath.Join(exPath, "../conf/defaults.ini")
  27. _, err = os.Stat(defaultsPath)
  28. return err == nil
  29. }
  30. // But at the same time there are per platform directories that contain the binaries and can also be used.
  31. defaultsPath := filepath.Join(exPath, "../../conf/defaults.ini")
  32. _, err = os.Stat(defaultsPath)
  33. return err == nil
  34. }
  35. func returnOsDefault(currentOs string) string {
  36. switch currentOs {
  37. case "windows":
  38. return "../data/plugins"
  39. case "darwin":
  40. return "/usr/local/var/lib/grafana/plugins"
  41. case "freebsd":
  42. return "/var/db/grafana/plugins"
  43. case "openbsd":
  44. return "/var/grafana/plugins"
  45. default: //"linux"
  46. return "/var/lib/grafana/plugins"
  47. }
  48. }