0e228d582d
Lots of edge cases not covered and the response is not parsed. It only handles one service and will have to be refactored to handle multiple
130 lines
3.3 KiB
Go
130 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/log"
|
|
"github.com/grafana/grafana/pkg/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/testdata"
|
|
)
|
|
|
|
var version = "5.0.0"
|
|
var commit = "NA"
|
|
var buildBranch = "master"
|
|
var buildstamp string
|
|
|
|
var configFile = flag.String("config", "", "path to config file")
|
|
var homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory")
|
|
var pidFile = flag.String("pidfile", "", "path to pid file")
|
|
var packaging = flag.String("packaging", "unknown", "describes the way Grafana was installed")
|
|
|
|
func main() {
|
|
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 := NewGrafanaServer()
|
|
|
|
go listenToSystemSignals(server)
|
|
|
|
err := server.Run()
|
|
|
|
code := server.Exit(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 *GrafanaServerImpl) {
|
|
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))
|
|
}
|
|
}
|
|
}
|