Monorepo for Tangled tangled.org
1package telemetry 2 3import ( 4 "context" 5 6 "go.opentelemetry.io/otel" 7 otelmetric "go.opentelemetry.io/otel/metric" 8 "go.opentelemetry.io/otel/sdk/metric" 9 "go.opentelemetry.io/otel/sdk/resource" 10 "go.opentelemetry.io/otel/sdk/trace" 11 semconv "go.opentelemetry.io/otel/semconv/v1.17.0" 12 oteltrace "go.opentelemetry.io/otel/trace" 13) 14 15type Telemetry struct { 16 tp *trace.TracerProvider 17 mp *metric.MeterProvider 18 19 meter otelmetric.Meter 20 tracer oteltrace.Tracer 21 22 serviceName string 23 serviceVersion string 24} 25 26func NewTelemetry(ctx context.Context, serviceName, serviceVersion string, isDev bool) (*Telemetry, error) { 27 res := resource.NewWithAttributes( 28 semconv.SchemaURL, 29 semconv.ServiceName(serviceName), 30 semconv.ServiceVersion(serviceVersion), 31 ) 32 33 tp, err := NewTracerProvider(ctx, res, isDev) 34 if err != nil { 35 return nil, err 36 } 37 38 mp, err := NewMeterProvider(ctx, res, isDev) 39 if err != nil { 40 return nil, err 41 } 42 43 return &Telemetry{ 44 tp: tp, 45 mp: mp, 46 47 meter: mp.Meter(serviceName), 48 tracer: tp.Tracer(serviceVersion), 49 50 serviceName: serviceName, 51 serviceVersion: serviceVersion, 52 }, nil 53} 54 55func (t *Telemetry) Meter() otelmetric.Meter { 56 return t.meter 57} 58 59func (t *Telemetry) Tracer() oteltrace.Tracer { 60 return t.tracer 61} 62 63func (t *Telemetry) TraceStart(ctx context.Context, name string) (context.Context, oteltrace.Span) { 64 tracer := otel.Tracer(t.serviceName) 65 return tracer.Start(ctx, name) 66}