实现首轮协议与 Transit 签名 PoC

This commit is contained in:
2026-09-11 15:52:19 +00:00
parent cc30a7cb6a
commit ab5dbebca7
13 changed files with 1023 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
package telemetry
import (
"context"
"errors"
"fmt"
"go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
sdkresource "go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
tracenoop "go.opentelemetry.io/otel/trace/noop"
)
type Providers struct {
Tracer trace.TracerProvider
Meter metric.MeterProvider
shutdown func(context.Context) error
}
type Config struct {
Resource *sdkresource.Resource
TraceExporter sdktrace.SpanExporter
MetricReader sdkmetric.Reader
}
func New(config Config) (*Providers, error) {
if config.Resource == nil {
return nil, errors.New("OpenTelemetry resource is required")
}
providers := &Providers{
Tracer: tracenoop.NewTracerProvider(),
Meter: metricnoop.NewMeterProvider(),
}
var tracerProvider *sdktrace.TracerProvider
if config.TraceExporter != nil {
tracerProvider = sdktrace.NewTracerProvider(
sdktrace.WithBatcher(config.TraceExporter),
sdktrace.WithResource(config.Resource),
)
providers.Tracer = tracerProvider
}
var meterProvider *sdkmetric.MeterProvider
if config.MetricReader != nil {
meterProvider = sdkmetric.NewMeterProvider(
sdkmetric.WithReader(config.MetricReader),
sdkmetric.WithResource(config.Resource),
)
providers.Meter = meterProvider
}
providers.shutdown = func(ctx context.Context) error {
var shutdownErrors []error
if meterProvider != nil {
shutdownErrors = append(shutdownErrors, meterProvider.Shutdown(ctx))
}
if tracerProvider != nil {
shutdownErrors = append(shutdownErrors, tracerProvider.Shutdown(ctx))
}
if err := errors.Join(shutdownErrors...); err != nil {
return fmt.Errorf("shutdown OpenTelemetry providers: %w", err)
}
return nil
}
return providers, nil
}
func (p *Providers) Shutdown(ctx context.Context) error {
return p.shutdown(ctx)
}
+27
View File
@@ -0,0 +1,27 @@
package telemetry
import (
"context"
"testing"
sdkresource "go.opentelemetry.io/otel/sdk/resource"
)
func TestNewWithoutExportersUsesNoopProviders(t *testing.T) {
providers, err := New(Config{Resource: sdkresource.Empty()})
if err != nil {
t.Fatalf("New() error = %v", err)
}
if providers.Tracer == nil || providers.Meter == nil {
t.Fatal("New() returned nil provider")
}
if err := providers.Shutdown(context.Background()); err != nil {
t.Fatalf("Shutdown() error = %v", err)
}
}
func TestNewRequiresResource(t *testing.T) {
if _, err := New(Config{}); err == nil {
t.Fatal("New() error = nil, want missing resource error")
}
}