mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 21:19:28 -06:00
428ca600c0
* Rename GrafanaServerImpl to Server * Make flag dependencies explicit * Extract method for building service graph * Document and clarify methods * Rename HttpServer to HTTPServer
134 lines
3.3 KiB
Go
134 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"net/http"
|
|
_ "net/http/pprof"
|
|
"os"
|
|
"os/signal"
|
|
"runtime"
|
|
"runtime/trace"
|
|
"strconv"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/extensions"
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/infra/metrics"
|
|
_ "github.com/grafana/grafana/pkg/services/alerting/conditions"
|
|
_ "github.com/grafana/grafana/pkg/services/alerting/notifiers"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/azuremonitor"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/cloudwatch"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/elasticsearch"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/graphite"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/influxdb"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/mysql"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/opentsdb"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/postgres"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/prometheus"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/stackdriver"
|
|
_ "github.com/grafana/grafana/pkg/tsdb/testdatasource"
|
|
)
|
|
|
|
var version = "5.0.0"
|
|
var commit = "NA"
|
|
var buildBranch = "master"
|
|
var buildstamp string
|
|
|
|
func main() {
|
|
var (
|
|
configFile = flag.String("config", "", "path to config file")
|
|
homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory")
|
|
pidFile = flag.String("pidfile", "", "path to pid file")
|
|
packaging = flag.String("packaging", "unknown", "describes the way Grafana was installed")
|
|
|
|
v = flag.Bool("v", false, "prints current version and exits")
|
|
profile = flag.Bool("profile", false, "Turn on pprof profiling")
|
|
profilePort = flag.Int("profile-port", 6060, "Define custom port for profiling")
|
|
)
|
|
|
|
flag.Parse()
|
|
|
|
if *v {
|
|
fmt.Printf("Version %s (commit: %s, branch: %s)\n", version, commit, buildBranch)
|
|
os.Exit(0)
|
|
}
|
|
|
|
if *profile {
|
|
runtime.SetBlockProfileRate(1)
|
|
go func() {
|
|
err := http.ListenAndServe(fmt.Sprintf("localhost:%d", *profilePort), nil)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
|
|
f, err := os.Create("trace.out")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
err = trace.Start(f)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer trace.Stop()
|
|
}
|
|
|
|
buildstampInt64, _ := strconv.ParseInt(buildstamp, 10, 64)
|
|
if buildstampInt64 == 0 {
|
|
buildstampInt64 = time.Now().Unix()
|
|
}
|
|
|
|
setting.BuildVersion = version
|
|
setting.BuildCommit = commit
|
|
setting.BuildStamp = buildstampInt64
|
|
setting.BuildBranch = buildBranch
|
|
setting.IsEnterprise = extensions.IsEnterprise
|
|
setting.Packaging = validPackaging(*packaging)
|
|
|
|
metrics.SetBuildInformation(version, commit, buildBranch)
|
|
|
|
server := NewServer(*configFile, *homePath, *pidFile)
|
|
|
|
go listenToSystemSignals(server)
|
|
|
|
err := server.Run()
|
|
|
|
code := server.ExitCode(err)
|
|
trace.Stop()
|
|
log.Close()
|
|
|
|
os.Exit(code)
|
|
}
|
|
|
|
func validPackaging(packaging string) string {
|
|
validTypes := []string{"dev", "deb", "rpm", "docker", "brew", "hosted", "unknown"}
|
|
for _, vt := range validTypes {
|
|
if packaging == vt {
|
|
return packaging
|
|
}
|
|
}
|
|
return "unknown"
|
|
}
|
|
|
|
func listenToSystemSignals(server *Server) {
|
|
signalChan := make(chan os.Signal, 1)
|
|
sighupChan := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(sighupChan, syscall.SIGHUP)
|
|
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
|
|
|
|
for {
|
|
select {
|
|
case <-sighupChan:
|
|
log.Reload()
|
|
case sig := <-signalChan:
|
|
server.Shutdown(fmt.Sprintf("System signal: %s", sig))
|
|
}
|
|
}
|
|
}
|