|
|
|
@ -54,18 +54,19 @@ func NewGrafanaServer() *GrafanaServerImpl { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type GrafanaServerImpl struct { |
|
|
|
|
context context.Context |
|
|
|
|
shutdownFn context.CancelFunc |
|
|
|
|
childRoutines *errgroup.Group |
|
|
|
|
log log.Logger |
|
|
|
|
cfg *setting.Cfg |
|
|
|
|
shutdownReason string |
|
|
|
|
context context.Context |
|
|
|
|
shutdownFn context.CancelFunc |
|
|
|
|
childRoutines *errgroup.Group |
|
|
|
|
log log.Logger |
|
|
|
|
cfg *setting.Cfg |
|
|
|
|
shutdownReason string |
|
|
|
|
shutdownInProgress bool |
|
|
|
|
|
|
|
|
|
RouteRegister api.RouteRegister `inject:""` |
|
|
|
|
HttpServer *api.HTTPServer `inject:""` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (g *GrafanaServerImpl) Start() error { |
|
|
|
|
func (g *GrafanaServerImpl) Run() error { |
|
|
|
|
g.loadConfiguration() |
|
|
|
|
g.writePIDFile() |
|
|
|
|
|
|
|
|
@ -129,8 +130,24 @@ func (g *GrafanaServerImpl) Start() error { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
g.childRoutines.Go(func() error { |
|
|
|
|
// Skip starting new service is we are shutting down
|
|
|
|
|
// Ccan happen when service crash during startup
|
|
|
|
|
if g.shutdownInProgress { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err := service.Run(g.context) |
|
|
|
|
g.log.Info("Stopped "+reflect.TypeOf(service).Elem().Name(), "reason", err) |
|
|
|
|
|
|
|
|
|
// If error is not canceled then the service crashed
|
|
|
|
|
if err != context.Canceled { |
|
|
|
|
g.log.Error("Stopped "+reflect.TypeOf(service).Elem().Name(), "reason", err) |
|
|
|
|
} else { |
|
|
|
|
g.log.Info("Stopped "+reflect.TypeOf(service).Elem().Name(), "reason", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Mark that we are in shutdown mode
|
|
|
|
|
// So more services are not started
|
|
|
|
|
g.shutdownInProgress = true |
|
|
|
|
return err |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
@ -159,6 +176,7 @@ func (g *GrafanaServerImpl) loadConfiguration() { |
|
|
|
|
func (g *GrafanaServerImpl) Shutdown(reason string) { |
|
|
|
|
g.log.Info("Shutdown started", "reason", reason) |
|
|
|
|
g.shutdownReason = reason |
|
|
|
|
g.shutdownInProgress = true |
|
|
|
|
|
|
|
|
|
// call cancel func on root context
|
|
|
|
|
g.shutdownFn() |
|
|
|
|