main.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "net/http"
  6. _ "net/http/pprof"
  7. "os"
  8. "os/signal"
  9. "runtime"
  10. "runtime/trace"
  11. "strconv"
  12. "syscall"
  13. "time"
  14. "github.com/grafana/grafana/pkg/extensions"
  15. "github.com/grafana/grafana/pkg/infra/metrics"
  16. "github.com/grafana/grafana/pkg/log"
  17. _ "github.com/grafana/grafana/pkg/services/alerting/conditions"
  18. _ "github.com/grafana/grafana/pkg/services/alerting/notifiers"
  19. "github.com/grafana/grafana/pkg/setting"
  20. _ "github.com/grafana/grafana/pkg/tsdb/azuremonitor"
  21. _ "github.com/grafana/grafana/pkg/tsdb/cloudwatch"
  22. _ "github.com/grafana/grafana/pkg/tsdb/elasticsearch"
  23. _ "github.com/grafana/grafana/pkg/tsdb/graphite"
  24. _ "github.com/grafana/grafana/pkg/tsdb/influxdb"
  25. _ "github.com/grafana/grafana/pkg/tsdb/mysql"
  26. _ "github.com/grafana/grafana/pkg/tsdb/opentsdb"
  27. _ "github.com/grafana/grafana/pkg/tsdb/postgres"
  28. _ "github.com/grafana/grafana/pkg/tsdb/prometheus"
  29. _ "github.com/grafana/grafana/pkg/tsdb/stackdriver"
  30. _ "github.com/grafana/grafana/pkg/tsdb/testdata"
  31. )
  32. var version = "5.0.0"
  33. var commit = "NA"
  34. var buildBranch = "master"
  35. var buildstamp string
  36. var configFile = flag.String("config", "", "path to config file")
  37. var homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory")
  38. var pidFile = flag.String("pidfile", "", "path to pid file")
  39. var packaging = flag.String("packaging", "unknown", "describes the way Grafana was installed")
  40. func main() {
  41. v := flag.Bool("v", false, "prints current version and exits")
  42. profile := flag.Bool("profile", false, "Turn on pprof profiling")
  43. profilePort := flag.Int("profile-port", 6060, "Define custom port for profiling")
  44. flag.Parse()
  45. if *v {
  46. fmt.Printf("Version %s (commit: %s, branch: %s)\n", version, commit, buildBranch)
  47. os.Exit(0)
  48. }
  49. if *profile {
  50. runtime.SetBlockProfileRate(1)
  51. go func() {
  52. err := http.ListenAndServe(fmt.Sprintf("localhost:%d", *profilePort), nil)
  53. if err != nil {
  54. panic(err)
  55. }
  56. }()
  57. f, err := os.Create("trace.out")
  58. if err != nil {
  59. panic(err)
  60. }
  61. defer f.Close()
  62. err = trace.Start(f)
  63. if err != nil {
  64. panic(err)
  65. }
  66. defer trace.Stop()
  67. }
  68. buildstampInt64, _ := strconv.ParseInt(buildstamp, 10, 64)
  69. if buildstampInt64 == 0 {
  70. buildstampInt64 = time.Now().Unix()
  71. }
  72. setting.BuildVersion = version
  73. setting.BuildCommit = commit
  74. setting.BuildStamp = buildstampInt64
  75. setting.BuildBranch = buildBranch
  76. setting.IsEnterprise = extensions.IsEnterprise
  77. setting.Packaging = validPackaging(*packaging)
  78. metrics.SetBuildInformation(version, commit, buildBranch)
  79. server := NewGrafanaServer()
  80. go listenToSystemSignals(server)
  81. err := server.Run()
  82. code := server.Exit(err)
  83. trace.Stop()
  84. log.Close()
  85. os.Exit(code)
  86. }
  87. func validPackaging(packaging string) string {
  88. validTypes := []string{"dev", "deb", "rpm", "docker", "brew", "hosted", "unknown"}
  89. for _, vt := range validTypes {
  90. if packaging == vt {
  91. return packaging
  92. }
  93. }
  94. return "unknown"
  95. }
  96. func listenToSystemSignals(server *GrafanaServerImpl) {
  97. signalChan := make(chan os.Signal, 1)
  98. sighupChan := make(chan os.Signal, 1)
  99. signal.Notify(sighupChan, syscall.SIGHUP)
  100. signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
  101. for {
  102. select {
  103. case <-sighupChan:
  104. log.Reload()
  105. case sig := <-signalChan:
  106. server.Shutdown(fmt.Sprintf("System signal: %s", sig))
  107. }
  108. }
  109. }