Skip to content

Commit 3f595d9

Browse files
committed
Rever public API changes in open-telemetry#10931, preserve logic
Signed-off-by: Bogdan Drutu <[email protected]>
1 parent 28d0d57 commit 3f595d9

File tree

23 files changed

+364
-157
lines changed

23 files changed

+364
-157
lines changed

.chloggen/revert-10931.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: deprecation
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: component
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Deprecate `TelemetrySettings.LeveledMeterProvider`
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [11061]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: [api]

cmd/mdatagen/internal/command_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,11 +604,11 @@ import (
604604
"go.opentelemetry.io/collector/config/configtelemetry"
605605
)
606606
607-
// Deprecated: [v0.108.0] use LeveledMeter instead.
608607
func Meter(settings component.TelemetrySettings) metric.Meter {
609608
return settings.MeterProvider.Meter("")
610609
}
611610
611+
// Deprecated: [v0.112.0] use Meter instead.
612612
func LeveledMeter(settings component.TelemetrySettings, level configtelemetry.Level) metric.Meter {
613613
return settings.LeveledMeterProvider(level).Meter("")
614614
}
@@ -642,11 +642,11 @@ import (
642642
"go.opentelemetry.io/collector/config/configtelemetry"
643643
)
644644
645-
// Deprecated: [v0.108.0] use LeveledMeter instead.
646645
func Meter(settings component.TelemetrySettings) metric.Meter {
647646
return settings.MeterProvider.Meter("")
648647
}
649648
649+
// Deprecated: [v0.112.0] use Meter instead.
650650
func LeveledMeter(settings component.TelemetrySettings, level configtelemetry.Level) metric.Meter {
651651
return settings.LeveledMeterProvider(level).Meter("")
652652
}

cmd/mdatagen/internal/samplereceiver/generated_component_telemetry_test.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go

Lines changed: 29 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/internal/templates/component_telemetry_test.go.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func (tt *componentTestTelemetry) NewSettings() {{ .Status.Class }}.Settings {
3434
settings.LeveledMeterProvider = func(_ configtelemetry.Level) metric.MeterProvider {
3535
return tt.meterProvider
3636
}
37+
settings.MetricsLevel = configtelemetry.LevelDetailed
3738
settings.ID = component.NewID(component.MustNewType("{{ .Type }}"))
3839

3940
return settings

cmd/mdatagen/internal/templates/telemetry.go.tmpl

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import (
2020
"go.opentelemetry.io/collector/config/configtelemetry"
2121
)
2222

23-
// Deprecated: [v0.108.0] use LeveledMeter instead.
2423
func Meter(settings component.TelemetrySettings) metric.Meter {
2524
return settings.MeterProvider.Meter("{{ .ScopeName }}")
2625
}
2726

27+
// Deprecated: [v0.112.0] use Meter instead.
2828
func LeveledMeter(settings component.TelemetrySettings, level configtelemetry.Level) metric.Meter {
2929
return settings.LeveledMeterProvider(level).Meter("{{ .ScopeName }}")
3030
}
@@ -44,7 +44,6 @@ type TelemetryBuilder struct {
4444
observe{{ $name.Render }} func(context.Context, metric.Observer) error
4545
{{- end }}
4646
{{- end }}
47-
meters map[configtelemetry.Level]metric.Meter
4847
}
4948

5049
// TelemetryBuilderOption applies changes to default builder.
@@ -64,7 +63,7 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) {
6463
// Init{{ $name.Render }} configures the {{ $name.Render }} metric.
6564
func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async -}}cb func() {{ $metric.Data.BasicType }}{{- end }}, opts ...metric.ObserveOption) error {
6665
var err error
67-
builder.{{ $name.Render }}, err = builder.meters[configtelemetry.Level{{ casesTitle $metric.Level.String }}].{{ $metric.Data.Instrument }}(
66+
builder.{{ $name.Render }}, err = builder.meter.{{ $metric.Data.Instrument }}(
6867
"otelcol_{{ $name }}",
6968
metric.WithDescription("{{ $metric.Description }}"),
7069
metric.WithUnit("{{ $metric.Unit }}"),
@@ -76,7 +75,7 @@ func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async
7675
if err != nil {
7776
return err
7877
}
79-
_, err = builder.meters[configtelemetry.Level{{ casesTitle $metric.Level.String }}].RegisterCallback(func(_ context.Context, o metric.Observer) error {
78+
_, err = builder.meter.RegisterCallback(func(_ context.Context, o metric.Observer) error {
8079
o.Observe{{ casesTitle $metric.Data.BasicType }}(builder.{{ $name.Render }}, cb(), opts...)
8180
return nil
8281
}, builder.{{ $name.Render }})
@@ -103,33 +102,42 @@ func With{{ $name.Render }}Callback(cb func() {{ $metric.Data.BasicType }}, opts
103102
// NewTelemetryBuilder provides a struct with methods to update all internal telemetry
104103
// for a component
105104
func NewTelemetryBuilder(settings component.TelemetrySettings, options ...TelemetryBuilderOption) (*TelemetryBuilder, error) {
106-
builder := TelemetryBuilder{meters: map[configtelemetry.Level]metric.Meter{}}
105+
builder := TelemetryBuilder{}
107106
for _, op := range options {
108107
op.apply(&builder)
109108
}
110-
{{- range $level, $val := .Telemetry.Levels }}
111-
builder.meters[configtelemetry.Level{{ casesTitle $level }}] = LeveledMeter(settings, configtelemetry.Level{{ casesTitle $level }})
112-
{{- end }}
109+
builder.meter = Meter(settings)
113110
var err, errs error
114111

115112
{{- range $name, $metric := .Telemetry.Metrics }}
116113
{{- if not $metric.Optional }}
117-
builder.{{ $name.Render }}, err = builder.meters[configtelemetry.Level{{ casesTitle $metric.Level.String }}].{{ $metric.Data.Instrument }}(
114+
builder.{{ $name.Render }}, err = getLeveledMeter(builder.meter, configtelemetry.Level{{ $metric.Level }}, settings.MetricsLevel).{{ $metric.Data.Instrument }}(
118115
"otelcol_{{ $name }}",
119116
metric.WithDescription("{{ $metric.Description }}{{ $metric.Stability }}"),
120117
metric.WithUnit("{{ $metric.Unit }}"),
121118
{{ if eq $metric.Data.Type "Histogram" -}}
122119
{{- if $metric.Data.Boundaries -}}metric.WithExplicitBucketBoundaries([]float64{ {{- range $metric.Data.Boundaries }} {{.}}, {{- end }} }...),{{- end }}
123120
{{- end }}
124121
)
125-
errs = errors.Join(errs, err)
122+
if err != nil {
123+
errs = errors.Join(errs, err)
124+
}
126125
{{- if $metric.Data.Async }}
127-
_, err = builder.meters[configtelemetry.Level{{ casesTitle $metric.Level.String }}].RegisterCallback(builder.observe{{ $name.Render }}, builder.{{ $name.Render }})
128-
errs = errors.Join(errs, err)
126+
_, err = getLeveledMeter(builder.meter, configtelemetry.Level{{ $metric.Level }}, settings.MetricsLevel).RegisterCallback(builder.observe{{ $name.Render }}, builder.{{ $name.Render }})
127+
if err != nil {
128+
errs = errors.Join(errs, err)
129+
}
129130
{{- end }}
130131
{{- end }}
131132
{{- end }}
132133
return &builder, errs
133134
}
134135

136+
func getLeveledMeter(meter metric.Meter, cfgLevel, srvLevel configtelemetry.Level) metric.Meter {
137+
if cfgLevel < srvLevel {
138+
return meter
139+
}
140+
return noop.Meter{}
141+
}
142+
135143
{{- end }}

component/telemetry.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ type TelemetrySettings struct {
2222
TracerProvider trace.TracerProvider
2323

2424
// MeterProvider that the factory can pass to other instrumented third-party libraries.
25-
//
26-
// Deprecated [v0.109.0]: use LeveledMeterProvider instead.
2725
MeterProvider metric.MeterProvider
2826

2927
// LeveledMeterProvider returns a MeterProvider for a Level that the factory can
3028
// pass to other instrumented third-party libraries.
29+
// Deprecated [v0.109.0]: use MeterProvider instead.
3130
LeveledMeterProvider func(level configtelemetry.Level) metric.MeterProvider
3231

3332
// MetricsLevel represents the configuration value set when the collector

config/configgrpc/configgrpc.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import (
1616
"github.com/mostynb/go-grpc-compression/nonclobbering/zstd"
1717
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
1818
"go.opentelemetry.io/otel"
19+
"go.opentelemetry.io/otel/metric"
20+
"go.opentelemetry.io/otel/metric/noop"
1921
"google.golang.org/grpc"
2022
"google.golang.org/grpc/balancer"
2123
"google.golang.org/grpc/codes"
@@ -336,7 +338,7 @@ func (gcs *ClientConfig) getGrpcDialOptions(
336338
otelOpts := []otelgrpc.Option{
337339
otelgrpc.WithTracerProvider(settings.TracerProvider),
338340
otelgrpc.WithPropagators(otel.GetTextMapPropagator()),
339-
otelgrpc.WithMeterProvider(settings.LeveledMeterProvider(configtelemetry.LevelDetailed)),
341+
otelgrpc.WithMeterProvider(getLeveledMeterProvider(settings)),
340342
}
341343

342344
// Enable OpenTelemetry observability plugin.
@@ -480,7 +482,7 @@ func (gss *ServerConfig) getGrpcServerOptions(
480482
otelOpts := []otelgrpc.Option{
481483
otelgrpc.WithTracerProvider(settings.TracerProvider),
482484
otelgrpc.WithPropagators(otel.GetTextMapPropagator()),
483-
otelgrpc.WithMeterProvider(settings.LeveledMeterProvider(configtelemetry.LevelDetailed)),
485+
otelgrpc.WithMeterProvider(getLeveledMeterProvider(settings)),
484486
}
485487

486488
// Enable OpenTelemetry observability plugin.
@@ -574,3 +576,10 @@ func authStreamServerInterceptor(srv any, stream grpc.ServerStream, _ *grpc.Stre
574576

575577
return handler(srv, wrapServerStream(ctx, stream))
576578
}
579+
580+
func getLeveledMeterProvider(settings component.TelemetrySettings) metric.MeterProvider {
581+
if configtelemetry.LevelDetailed <= settings.MetricsLevel {
582+
return settings.MeterProvider
583+
}
584+
return noop.MeterProvider{}
585+
}

config/confighttp/confighttp.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"github.com/rs/cors"
1919
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
2020
"go.opentelemetry.io/otel"
21+
"go.opentelemetry.io/otel/metric"
22+
"go.opentelemetry.io/otel/metric/noop"
2123
"golang.org/x/net/http2"
2224
"golang.org/x/net/publicsuffix"
2325

@@ -226,7 +228,7 @@ func (hcs *ClientConfig) ToClient(ctx context.Context, host component.Host, sett
226228
otelOpts := []otelhttp.Option{
227229
otelhttp.WithTracerProvider(settings.TracerProvider),
228230
otelhttp.WithPropagators(otel.GetTextMapPropagator()),
229-
otelhttp.WithMeterProvider(settings.LeveledMeterProvider(configtelemetry.LevelDetailed)),
231+
otelhttp.WithMeterProvider(getLeveledMeterProvider(settings)),
230232
}
231233
// wrapping http transport with otelhttp transport to enable otel instrumentation
232234
if settings.TracerProvider != nil && settings.MeterProvider != nil {
@@ -465,7 +467,7 @@ func (hss *ServerConfig) ToServer(_ context.Context, host component.Host, settin
465467
otelhttp.WithSpanNameFormatter(func(_ string, r *http.Request) string {
466468
return r.URL.Path
467469
}),
468-
otelhttp.WithMeterProvider(settings.LeveledMeterProvider(configtelemetry.LevelDetailed)),
470+
otelhttp.WithMeterProvider(getLeveledMeterProvider(settings)),
469471
}
470472

471473
// Enable OpenTelemetry observability plugin.
@@ -553,3 +555,10 @@ func maxRequestBodySizeInterceptor(next http.Handler, maxRecvSize int64) http.Ha
553555
next.ServeHTTP(w, r)
554556
})
555557
}
558+
559+
func getLeveledMeterProvider(settings component.TelemetrySettings) metric.MeterProvider {
560+
if configtelemetry.LevelDetailed <= settings.MetricsLevel {
561+
return settings.MeterProvider
562+
}
563+
return noop.MeterProvider{}
564+
}

exporter/exporterhelper/generated_component_telemetry_test.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)