From 27e1c6745359c77ebc811714cfeeacfb3970b063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 10 May 2018 16:51:55 +0200 Subject: [PATCH] refactor: tracing service refactoring (#11907) --- pkg/cmd/grafana-server/server.go | 8 +-- pkg/tracing/tracing.go | 98 ++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 50 deletions(-) diff --git a/pkg/cmd/grafana-server/server.go b/pkg/cmd/grafana-server/server.go index c715086a184..9209722527c 100644 --- a/pkg/cmd/grafana-server/server.go +++ b/pkg/cmd/grafana-server/server.go @@ -27,7 +27,6 @@ import ( "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/social" - "github.com/grafana/grafana/pkg/tracing" // self registering services _ "github.com/grafana/grafana/pkg/extensions" @@ -38,6 +37,7 @@ import ( _ "github.com/grafana/grafana/pkg/services/notifications" _ "github.com/grafana/grafana/pkg/services/provisioning" _ "github.com/grafana/grafana/pkg/services/search" + _ "github.com/grafana/grafana/pkg/tracing" ) func NewGrafanaServer() *GrafanaServerImpl { @@ -77,12 +77,6 @@ func (g *GrafanaServerImpl) Run() error { login.Init() social.NewOAuthService() - tracingCloser, err := tracing.Init(g.cfg.Raw) - if err != nil { - return fmt.Errorf("Tracing settings is not valid. error: %v", err) - } - defer tracingCloser.Close() - serviceGraph := inject.Graph{} serviceGraph.Provide(&inject.Object{Value: bus.GetBus()}) serviceGraph.Provide(&inject.Object{Value: g.cfg}) diff --git a/pkg/tracing/tracing.go b/pkg/tracing/tracing.go index 79b01f70c9b..61f45af3635 100644 --- a/pkg/tracing/tracing.go +++ b/pkg/tracing/tracing.go @@ -1,68 +1,71 @@ package tracing import ( + "context" "io" "strings" "github.com/grafana/grafana/pkg/log" + "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/setting" opentracing "github.com/opentracing/opentracing-go" jaegercfg "github.com/uber/jaeger-client-go/config" - ini "gopkg.in/ini.v1" ) -var ( - logger log.Logger = log.New("tracing") -) - -type TracingSettings struct { - Enabled bool - Address string - CustomTags map[string]string - SamplerType string - SamplerParam float64 +func init() { + registry.RegisterService(&TracingService{}) } -func Init(file *ini.File) (io.Closer, error) { - settings := parseSettings(file) - return internalInit(settings) +type TracingService struct { + enabled bool + address string + customTags map[string]string + samplerType string + samplerParam float64 + log log.Logger + closer io.Closer + + Cfg *setting.Cfg `inject:""` } -func parseSettings(file *ini.File) *TracingSettings { - settings := &TracingSettings{} +func (ts *TracingService) Init() error { + ts.log = log.New("tracing") + ts.parseSettings() - var section, err = setting.Raw.GetSection("tracing.jaeger") + if ts.enabled { + ts.initGlobalTracer() + } + + return nil +} + +func (ts *TracingService) parseSettings() { + var section, err = ts.Cfg.Raw.GetSection("tracing.jaeger") if err != nil { - return settings + return } - settings.Address = section.Key("address").MustString("") - if settings.Address != "" { - settings.Enabled = true + ts.address = section.Key("address").MustString("") + if ts.address != "" { + ts.enabled = true } - settings.CustomTags = splitTagSettings(section.Key("always_included_tag").MustString("")) - settings.SamplerType = section.Key("sampler_type").MustString("") - settings.SamplerParam = section.Key("sampler_param").MustFloat64(1) - - return settings + ts.customTags = splitTagSettings(section.Key("always_included_tag").MustString("")) + ts.samplerType = section.Key("sampler_type").MustString("") + ts.samplerParam = section.Key("sampler_param").MustFloat64(1) } -func internalInit(settings *TracingSettings) (io.Closer, error) { - if !settings.Enabled { - return &nullCloser{}, nil - } - +func (ts *TracingService) initGlobalTracer() error { cfg := jaegercfg.Configuration{ - Disabled: !settings.Enabled, + Disabled: !ts.enabled, Sampler: &jaegercfg.SamplerConfig{ - Type: settings.SamplerType, - Param: settings.SamplerParam, + Type: ts.samplerType, + Param: ts.samplerParam, }, Reporter: &jaegercfg.ReporterConfig{ LogSpans: false, - LocalAgentHostPort: settings.Address, + LocalAgentHostPort: ts.address, }, } @@ -71,18 +74,31 @@ func internalInit(settings *TracingSettings) (io.Closer, error) { options := []jaegercfg.Option{} options = append(options, jaegercfg.Logger(jLogger)) - for tag, value := range settings.CustomTags { + for tag, value := range ts.customTags { options = append(options, jaegercfg.Tag(tag, value)) } tracer, closer, err := cfg.New("grafana", options...) if err != nil { - return nil, err + return err } opentracing.InitGlobalTracer(tracer) - logger.Info("Initializing Jaeger tracer", "address", settings.Address) - return closer, nil + + ts.closer = closer + + return nil +} + +func (ts *TracingService) Run(ctx context.Context) error { + <-ctx.Done() + + if ts.closer != nil { + ts.log.Info("Closing tracing") + ts.closer.Close() + } + + return nil } func splitTagSettings(input string) map[string]string { @@ -110,7 +126,3 @@ func (jlw *jaegerLogWrapper) Error(msg string) { func (jlw *jaegerLogWrapper) Infof(msg string, args ...interface{}) { jlw.logger.Info(msg, args) } - -type nullCloser struct{} - -func (*nullCloser) Close() error { return nil }