Skip to content

Commit 321b002

Browse files
authored
🔧 #248 Disable span and metrics by default (#254)
1 parent bd03442 commit 321b002

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

pkg/telemetry/telemetry.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import (
1010
"go.opentelemetry.io/otel"
1111
"go.opentelemetry.io/otel/attribute"
1212
"go.opentelemetry.io/otel/propagation"
13+
"go.opentelemetry.io/otel/sdk/metric"
1314
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
1415
"go.opentelemetry.io/otel/sdk/resource"
16+
"go.opentelemetry.io/otel/sdk/trace"
1517
sdktrace "go.opentelemetry.io/otel/sdk/trace"
1618
semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
1719
"go.uber.org/zap"
@@ -63,7 +65,7 @@ func NewTelemetry(cfg *Config) (*Telemetry, error) {
6365
resourceAttr...,
6466
)
6567

66-
spanExporter, err := autoexport.NewSpanExporter(context.Background())
68+
spanExporter, err := newSpanExporter()
6769
if err != nil {
6870
return nil, err
6971
}
@@ -77,7 +79,7 @@ func NewTelemetry(cfg *Config) (*Telemetry, error) {
7779
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{},
7880
propagation.Baggage{}, b3.New()))
7981

80-
metricsReader, err := autoexport.NewMetricReader(context.Background())
82+
metricsReader, err := newMetricReader()
8183
if err != nil {
8284
return nil, err
8385
}
@@ -108,3 +110,31 @@ func NewTelemetryMock() *Telemetry {
108110
Logger: NewLoggerMock(),
109111
}
110112
}
113+
114+
func newMetricReader() (sdkmetric.Reader, error) {
115+
return autoexport.NewMetricReader(context.Background(),
116+
autoexport.WithFallbackMetricReader(func(_ context.Context) (sdkmetric.Reader, error) {
117+
return metric.NewManualReader(), nil
118+
}),
119+
)
120+
}
121+
122+
func newSpanExporter() (sdktrace.SpanExporter, error) {
123+
return autoexport.NewSpanExporter(context.Background(), autoexport.WithFallbackSpanExporter(
124+
func(_ context.Context) (sdktrace.SpanExporter, error) {
125+
return noopSpanExporter{}, nil
126+
},
127+
))
128+
}
129+
130+
type noopSpanExporter struct{}
131+
132+
var _ trace.SpanExporter = noopSpanExporter{}
133+
134+
func (e noopSpanExporter) ExportSpans(_ context.Context, _ []trace.ReadOnlySpan) error {
135+
return nil
136+
}
137+
138+
func (e noopSpanExporter) Shutdown(_ context.Context) error {
139+
return nil
140+
}

pkg/telemetry/telemetry_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
package telemetry
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/stretchr/testify/require"
8+
"go.opentelemetry.io/otel/sdk/metric"
79
)
810

911
func TestTelemetry_Creation(t *testing.T) {
1012
_, err := NewTelemetry(DefaultConfig())
1113
require.NoError(t, err)
1214
}
15+
16+
func TestDefaults_noopExporters(t *testing.T) {
17+
// By default all otel providers must be noop. Since we don't have otel setup
18+
// in test environment, this test ensures all providers are noop.
19+
mr, err := newMetricReader()
20+
if err != nil {
21+
t.Fatal(err)
22+
}
23+
// ensures we have a noop metric.ManualReader
24+
_ = mr.(*metric.ManualReader).Shutdown(context.Background())
25+
26+
se, err := newSpanExporter()
27+
if err != nil {
28+
t.Fatal(err)
29+
}
30+
// ensures we have a noopSpanExporter
31+
_ = se.(noopSpanExporter).Shutdown(context.Background())
32+
}

0 commit comments

Comments
 (0)