@@ -20,12 +20,14 @@ import (
20
20
"go.opentelemetry.io/contrib/instrumentation/runtime"
21
21
"go.opentelemetry.io/otel"
22
22
"go.opentelemetry.io/otel/log/global"
23
+ "go.opentelemetry.io/otel/metric"
23
24
"go.opentelemetry.io/otel/propagation"
24
25
"go.opentelemetry.io/otel/sdk/log"
25
- "go.opentelemetry.io/otel/sdk/metric"
26
- "go.opentelemetry.io/otel/sdk/resource"
27
- "go.opentelemetry.io/otel/sdk/trace"
26
+ sdkmetric "go.opentelemetry.io/otel/sdk/metric"
27
+ sdkresource "go.opentelemetry.io/otel/sdk/resource"
28
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
28
29
semconv "go.opentelemetry.io/otel/semconv/v1.25.0"
30
+ "go.opentelemetry.io/otel/trace"
29
31
30
32
"github.com/go-kod/kod/interceptor"
31
33
"github.com/go-kod/kod/internal/hooks"
@@ -41,7 +43,8 @@ const (
41
43
// Implements[T any] provides a common structure for components,
42
44
// with logging capabilities and a reference to the component's interface.
43
45
type Implements [T any ] struct {
44
- log * slog.Logger
46
+ name string
47
+ log * slog.Logger
45
48
//nolint
46
49
component_interface_type T
47
50
}
@@ -51,10 +54,21 @@ func (i *Implements[T]) L(ctx context.Context) *slog.Logger {
51
54
return kslog .LogWithContext (ctx , i .log )
52
55
}
53
56
57
+ // T return the associated tracer.
58
+ func (i * Implements [T ]) Tracer (opts ... trace.TracerOption ) trace.Tracer {
59
+ return otel .Tracer (i .name , opts ... )
60
+ }
61
+
62
+ // M return the associated meter.
63
+ func (i * Implements [T ]) Meter (opts ... metric.MeterOption ) metric.Meter {
64
+ return otel .GetMeterProvider ().Meter (i .name , opts ... )
65
+ }
66
+
54
67
// setLogger sets the logger for the component.
55
68
// nolint
56
- func (i * Implements [T ]) setLogger (log * slog.Logger ) {
57
- i .log = log
69
+ func (i * Implements [T ]) setLogger (name string , log * slog.Logger ) {
70
+ i .name = name
71
+ i .log = log .With ("component" , name )
58
72
}
59
73
60
74
// implements is a marker method to assert implementation of an interface.
@@ -461,11 +475,11 @@ func (k *Kod) initOpenTelemetry(ctx context.Context) {
461
475
lo .Must0 (host .Start ())
462
476
lo .Must0 (runtime .Start ())
463
477
464
- res := lo .Must (resource .New (ctx ,
465
- resource .WithFromEnv (),
466
- resource .WithTelemetrySDK (),
467
- resource .WithHost (),
468
- resource .WithAttributes (
478
+ res := lo .Must (sdkresource .New (ctx ,
479
+ sdkresource .WithFromEnv (),
480
+ sdkresource .WithTelemetrySDK (),
481
+ sdkresource .WithHost (),
482
+ sdkresource .WithAttributes (
469
483
semconv .ServiceNameKey .String (k .config .Name ),
470
484
semconv .ServiceVersionKey .String (k .config .Version ),
471
485
semconv .DeploymentEnvironmentKey .String (k .config .Env ),
@@ -478,11 +492,11 @@ func (k *Kod) initOpenTelemetry(ctx context.Context) {
478
492
}
479
493
480
494
// configureTrace configures the trace provider with the provided context and resource.
481
- func (k * Kod ) configureTrace (ctx context.Context , res * resource .Resource ) {
495
+ func (k * Kod ) configureTrace (ctx context.Context , res * sdkresource .Resource ) {
482
496
spanExporter := lo .Must (autoexport .NewSpanExporter (ctx ))
483
- spanProvider := trace .NewTracerProvider (
484
- trace .WithBatcher (spanExporter ),
485
- trace .WithResource (res ),
497
+ spanProvider := sdktrace .NewTracerProvider (
498
+ sdktrace .WithBatcher (spanExporter ),
499
+ sdktrace .WithResource (res ),
486
500
)
487
501
488
502
otel .SetTextMapPropagator (
@@ -499,11 +513,11 @@ func (k *Kod) configureTrace(ctx context.Context, res *resource.Resource) {
499
513
}
500
514
501
515
// configureMetric configures the metric provider with the provided context and resource.
502
- func (k * Kod ) configureMetric (ctx context.Context , res * resource .Resource ) {
516
+ func (k * Kod ) configureMetric (ctx context.Context , res * sdkresource .Resource ) {
503
517
metricReader := lo .Must (autoexport .NewMetricReader (ctx ))
504
- metricProvider := metric .NewMeterProvider (
505
- metric .WithReader (metricReader ),
506
- metric .WithResource (res ),
518
+ metricProvider := sdkmetric .NewMeterProvider (
519
+ sdkmetric .WithReader (metricReader ),
520
+ sdkmetric .WithResource (res ),
507
521
)
508
522
509
523
otel .SetMeterProvider (metricProvider )
@@ -515,7 +529,7 @@ func (k *Kod) configureMetric(ctx context.Context, res *resource.Resource) {
515
529
}
516
530
517
531
// configureLog configures the log provider with the provided context and resource.
518
- func (k * Kod ) configureLog (ctx context.Context , res * resource .Resource ) {
532
+ func (k * Kod ) configureLog (ctx context.Context , res * sdkresource .Resource ) {
519
533
logExporter := lo .Must (autoexport .NewLogExporter (ctx ))
520
534
loggerProvider := log .NewLoggerProvider (
521
535
log .WithProcessor (
0 commit comments