mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package otelutil
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/docker/buildx/util/otelutil/jaeger"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/sdk/resource"
|
|
)
|
|
|
|
type JaegerData struct {
|
|
Data []jaeger.Trace `json:"data"`
|
|
}
|
|
|
|
// JaegerData return Jaeger data compatible with ui import feature.
|
|
// https://github.com/jaegertracing/jaeger-ui/issues/381#issuecomment-494150826
|
|
func (s Spans) JaegerData() JaegerData {
|
|
roSpans := s.ReadOnlySpans()
|
|
|
|
// fetch default service.name from default resource for backup
|
|
var defaultServiceName string
|
|
defaultResource := resource.Default()
|
|
if value, exists := defaultResource.Set().Value(attribute.Key("service.name")); exists {
|
|
defaultServiceName = value.AsString()
|
|
}
|
|
|
|
data := jaeger.Trace{
|
|
TraceID: jaeger.TraceID(roSpans[0].SpanContext().TraceID().String()),
|
|
Processes: make(map[jaeger.ProcessID]jaeger.Process),
|
|
Spans: []jaeger.Span{},
|
|
}
|
|
for i := range roSpans {
|
|
ss := roSpans[i]
|
|
pid := jaeger.ProcessID(fmt.Sprintf("p%d", i))
|
|
data.Processes[pid] = jaeger.ResourceToProcess(ss.Resource(), defaultServiceName)
|
|
span := jaeger.ConvertSpan(ss)
|
|
span.Process = nil
|
|
span.ProcessID = pid
|
|
data.Spans = append(data.Spans, span)
|
|
}
|
|
|
|
return JaegerData{
|
|
Data: []jaeger.Trace{data},
|
|
}
|
|
}
|