mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-10-22 20:39:41 +00:00
Simplify code slightly be creating a `trace()` function. Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
90 lines
1.9 KiB
Go
90 lines
1.9 KiB
Go
// Copyright (c) 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
opentracing "github.com/opentracing/opentracing-go"
|
|
"github.com/uber/jaeger-client-go/config"
|
|
)
|
|
|
|
// Implements jaeger-client-go.Logger interface
|
|
type traceLogger struct {
|
|
}
|
|
|
|
// tracerCloser contains a copy of the closer returned by createTracer() which
|
|
// is used by stopTracing().
|
|
var tracerCloser io.Closer
|
|
|
|
func (t traceLogger) Error(msg string) {
|
|
kataLog.Error(msg)
|
|
}
|
|
|
|
func (t traceLogger) Infof(msg string, args ...interface{}) {
|
|
kataLog.Infof(msg, args...)
|
|
}
|
|
|
|
func createTracer(name string) (opentracing.Tracer, error) {
|
|
cfg := &config.Configuration{
|
|
ServiceName: name,
|
|
|
|
// If tracing is disabled, use a NOP trace implementation
|
|
Disabled: !tracing,
|
|
|
|
// Note that span logging reporter option cannot be enabled as
|
|
// it pollutes the output stream which causes (atleast) the
|
|
// "state" command to fail under Docker.
|
|
Sampler: &config.SamplerConfig{
|
|
Type: "const",
|
|
Param: 1,
|
|
},
|
|
}
|
|
|
|
logger := traceLogger{}
|
|
|
|
tracer, closer, err := cfg.NewTracer(config.Logger(logger))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// save for stopTracing()'s exclusive use
|
|
tracerCloser = closer
|
|
|
|
// Seems to be essential to ensure non-root spans are logged
|
|
opentracing.SetGlobalTracer(tracer)
|
|
|
|
return tracer, nil
|
|
}
|
|
|
|
// stopTracing() ends all tracing, reporting the spans to the collector.
|
|
func stopTracing(ctx context.Context) {
|
|
if !tracing {
|
|
return
|
|
}
|
|
|
|
span := opentracing.SpanFromContext(ctx)
|
|
|
|
if span != nil {
|
|
span.Finish()
|
|
}
|
|
|
|
// report all possible spans to the collector
|
|
tracerCloser.Close()
|
|
}
|
|
|
|
// trace creates a new tracing span based on the specified name and parent
|
|
// context.
|
|
func trace(parent context.Context, name string) (opentracing.Span, context.Context) {
|
|
span, ctx := opentracing.StartSpanFromContext(parent, name)
|
|
|
|
span.SetTag("source", "runtime")
|
|
span.SetTag("component", "cli")
|
|
|
|
return span, ctx
|
|
}
|