Server: Don't clutter trace.Stop by exiting (#27700)

* Server: Don't clutter trace.Stop by exiting

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
Arve Knudsen 2020-09-22 15:28:54 +02:00 committed by GitHub
parent a9e49c24c2
commit ffc11cb63c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"net/http" "net/http"
@ -33,11 +34,21 @@ import (
_ "github.com/grafana/grafana/pkg/tsdb/testdatasource" _ "github.com/grafana/grafana/pkg/tsdb/testdatasource"
) )
// The following variables cannot be constants, since they can be overridden through the -X link flag
var version = "5.0.0" var version = "5.0.0"
var commit = "NA" var commit = "NA"
var buildBranch = "master" var buildBranch = "master"
var buildstamp string var buildstamp string
type exitWithCode struct {
reason string
code int
}
func (e exitWithCode) Error() string {
return e.reason
}
func main() { func main() {
var ( var (
configFile = flag.String("config", "", "path to config file") configFile = flag.String("config", "", "path to config file")
@ -82,6 +93,23 @@ func main() {
}() }()
} }
if err := executeServer(*configFile, *homePath, *pidFile, *packaging, traceDiagnostics); err != nil {
code := 1
var ewc exitWithCode
if errors.As(err, &ewc) {
code = ewc.code
}
if code != 0 {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
}
os.Exit(code)
}
}
func executeServer(configFile, homePath, pidFile, packaging string, traceDiagnostics *tracingDiagnostics) error {
defer log.Close()
if traceDiagnostics.enabled { if traceDiagnostics.enabled {
fmt.Println("diagnostics: tracing enabled", "file", traceDiagnostics.file) fmt.Println("diagnostics: tracing enabled", "file", traceDiagnostics.file)
f, err := os.Create(traceDiagnostics.file) f, err := os.Create(traceDiagnostics.file)
@ -90,15 +118,14 @@ func main() {
} }
defer f.Close() defer f.Close()
err = trace.Start(f) if err := trace.Start(f); err != nil {
if err != nil {
panic(err) panic(err)
} }
defer trace.Stop() defer trace.Stop()
} }
buildstampInt64, _ := strconv.ParseInt(buildstamp, 10, 64) buildstampInt64, err := strconv.ParseInt(buildstamp, 10, 64)
if buildstampInt64 == 0 { if err != nil || buildstampInt64 == 0 {
buildstampInt64 = time.Now().Unix() buildstampInt64 = time.Now().Unix()
} }
@ -107,30 +134,29 @@ func main() {
setting.BuildStamp = buildstampInt64 setting.BuildStamp = buildstampInt64
setting.BuildBranch = buildBranch setting.BuildBranch = buildBranch
setting.IsEnterprise = extensions.IsEnterprise setting.IsEnterprise = extensions.IsEnterprise
setting.Packaging = validPackaging(*packaging) setting.Packaging = validPackaging(packaging)
metrics.SetBuildInformation(version, commit, buildBranch) metrics.SetBuildInformation(version, commit, buildBranch)
s, err := server.New(server.Config{ s, err := server.New(server.Config{
ConfigFile: *configFile, HomePath: *homePath, PidFile: *pidFile, ConfigFile: configFile, HomePath: homePath, PidFile: pidFile,
Version: version, Commit: commit, BuildBranch: buildBranch, Version: version, Commit: commit, BuildBranch: buildBranch,
}) })
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, err.Error()) return err
os.Exit(1)
} }
go listenToSystemSignals(s) go listenToSystemSignals(s)
err = s.Run() if err := s.Run(); err != nil {
code := 0 code := s.ExitCode(err)
if err != nil { return exitWithCode{
code = s.ExitCode(err) reason: err.Error(),
code: code,
}
} }
trace.Stop()
log.Close()
os.Exit(code) return nil
} }
func validPackaging(packaging string) string { func validPackaging(packaging string) string {