mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00

Update buildkit dependency to v0.14.0-rc1. Update the tracing infrastructure to use the new detect API which updates how the delegated exporter is configured. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
73 lines
1.2 KiB
Go
73 lines
1.2 KiB
Go
package delegated
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/moby/buildkit/client"
|
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
)
|
|
|
|
const maxBuffer = 256
|
|
|
|
var DefaultExporter = &Exporter{}
|
|
|
|
type Exporter struct {
|
|
mu sync.Mutex
|
|
exporters []sdktrace.SpanExporter
|
|
buffer []sdktrace.ReadOnlySpan
|
|
}
|
|
|
|
var (
|
|
_ sdktrace.SpanExporter = (*Exporter)(nil)
|
|
_ client.TracerDelegate = (*Exporter)(nil)
|
|
)
|
|
|
|
func (e *Exporter) ExportSpans(ctx context.Context, ss []sdktrace.ReadOnlySpan) error {
|
|
e.mu.Lock()
|
|
defer e.mu.Unlock()
|
|
|
|
var err error
|
|
for _, e := range e.exporters {
|
|
if err1 := e.ExportSpans(ctx, ss); err1 != nil {
|
|
err = err1
|
|
}
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(e.buffer) > maxBuffer {
|
|
return nil
|
|
}
|
|
|
|
e.buffer = append(e.buffer, ss...)
|
|
return nil
|
|
}
|
|
|
|
func (e *Exporter) Shutdown(ctx context.Context) error {
|
|
e.mu.Lock()
|
|
defer e.mu.Unlock()
|
|
|
|
var err error
|
|
for _, e := range e.exporters {
|
|
if err1 := e.Shutdown(ctx); err1 != nil {
|
|
err = err1
|
|
}
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func (e *Exporter) SetSpanExporter(ctx context.Context, exp sdktrace.SpanExporter) error {
|
|
e.mu.Lock()
|
|
defer e.mu.Unlock()
|
|
|
|
e.exporters = append(e.exporters, exp)
|
|
|
|
if len(e.buffer) > 0 {
|
|
return exp.ExportSpans(ctx, e.buffer)
|
|
}
|
|
return nil
|
|
}
|