mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Tracing: Pass OTLP address and propagation format to plugins * Fix unit tests * Fix indentation * Fix plugin manager integration tests * Goimports * Pass plugin version to plugins * Do not add GF_PLUGIN_VERSION if plugin version is not set, add tests * Allow disabling plugins distributed tracing on a per-plugin basis * Moved disabled plugins to tracing.opentelemetry config section * Pre-allocate DisabledPlugins map to the correct size * Moved disable tracing setting flags in plugin settings * Renamed plugin env vars for tracing endpoint and propagation * Fix plugin initializer tests * Refactoring: Moved OpentelemetryCfg from pkg/infra to pkg/plugins * Changed GetSection to Section in parseSettingsOpentelemetry * Add tests for NewOpentelemetryCfg * Fix test case names in TestNewOpentelemetryCfg * OpenTelemetry: Remove redundant error checks
115 lines
2.3 KiB
Go
115 lines
2.3 KiB
Go
package tracing
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/codes"
|
|
"go.opentelemetry.io/otel/sdk/trace/tracetest"
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
func InitializeTracerForTest() Tracer {
|
|
exp := tracetest.NewInMemoryExporter()
|
|
tp, _ := initTracerProvider(exp)
|
|
otel.SetTracerProvider(tp)
|
|
|
|
ots := &Opentelemetry{Propagation: "jaeger,w3c", tracerProvider: tp}
|
|
_ = ots.initOpentelemetryTracer()
|
|
return ots
|
|
}
|
|
|
|
type FakeSpan struct {
|
|
Name string
|
|
|
|
ended bool
|
|
Attributes map[attribute.Key]attribute.Value
|
|
StatusCode codes.Code
|
|
Description string
|
|
Err error
|
|
Events map[string]EventValue
|
|
}
|
|
|
|
func newFakeSpan(name string) *FakeSpan {
|
|
return &FakeSpan{
|
|
Name: name,
|
|
Attributes: map[attribute.Key]attribute.Value{},
|
|
Events: map[string]EventValue{},
|
|
}
|
|
}
|
|
|
|
func (t *FakeSpan) End() {
|
|
if t.ended {
|
|
panic("End already called")
|
|
}
|
|
t.ended = true
|
|
}
|
|
|
|
func (t *FakeSpan) IsEnded() bool {
|
|
return t.ended
|
|
}
|
|
|
|
func (t *FakeSpan) SetAttributes(key string, value interface{}, kv attribute.KeyValue) {
|
|
if t.IsEnded() {
|
|
panic("span already ended")
|
|
}
|
|
t.Attributes[kv.Key] = kv.Value
|
|
}
|
|
|
|
func (t *FakeSpan) SetName(name string) {
|
|
if t.IsEnded() {
|
|
panic("span already ended")
|
|
}
|
|
t.Name = name
|
|
}
|
|
|
|
func (t *FakeSpan) SetStatus(code codes.Code, description string) {
|
|
if t.IsEnded() {
|
|
panic("span already ended")
|
|
}
|
|
t.StatusCode = code
|
|
t.Description = description
|
|
}
|
|
|
|
func (t *FakeSpan) RecordError(err error, options ...trace.EventOption) {
|
|
if t.IsEnded() {
|
|
panic("span already ended")
|
|
}
|
|
t.Err = err
|
|
}
|
|
|
|
func (t *FakeSpan) AddEvents(keys []string, values []EventValue) {
|
|
if t.IsEnded() {
|
|
panic("span already ended")
|
|
}
|
|
if len(keys) != len(values) {
|
|
panic("different number of keys and values")
|
|
}
|
|
for i := 0; i < len(keys); i++ {
|
|
t.Events[keys[i]] = values[i]
|
|
}
|
|
}
|
|
|
|
type FakeTracer struct {
|
|
Spans []*FakeSpan
|
|
}
|
|
|
|
func (t *FakeTracer) Run(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
func (t *FakeTracer) Start(ctx context.Context, spanName string, opts ...trace.SpanStartOption) (context.Context, Span) {
|
|
span := newFakeSpan(spanName)
|
|
t.Spans = append(t.Spans, span)
|
|
return ctx, span
|
|
}
|
|
|
|
func (t *FakeTracer) Inject(ctx context.Context, header http.Header, span Span) {
|
|
}
|
|
|
|
func NewFakeTracer() *FakeTracer {
|
|
return &FakeTracer{Spans: []*FakeSpan{}}
|
|
}
|