Skip to content

Commit 5aaad3c

Browse files
committed
Remove servicetelemetry.TelemetrySettings
1 parent ef7f285 commit 5aaad3c

15 files changed

+109
-235
lines changed
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: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: service/extensions
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Adds `Options` to `extensions.New`.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10728]
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: This is only a breaking change if you are depending on `extensions.New`'s signature. Calls to `extensions.New` are not broken.
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]

component/telemetry.go

-4
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import (
1313
)
1414

1515
// TelemetrySettings provides components with APIs to report telemetry.
16-
//
17-
// Note: there is a service version of this struct, servicetelemetry.TelemetrySettings, that mirrors
18-
// this struct except ReportStatus. When adding or removing anything from
19-
// this struct consider whether the same should be done for the service version.
2016
type TelemetrySettings struct {
2117
// Logger that the factory can use during creation and can pass to the created
2218
// component to be used later as well.

service/extensions/extensions.go

+35-11
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,19 @@ import (
1616
"go.opentelemetry.io/collector/confmap"
1717
"go.opentelemetry.io/collector/extension"
1818
"go.opentelemetry.io/collector/service/internal/components"
19-
"go.opentelemetry.io/collector/service/internal/servicetelemetry"
19+
"go.opentelemetry.io/collector/service/internal/status"
2020
"go.opentelemetry.io/collector/service/internal/zpages"
2121
)
2222

2323
const zExtensionName = "zextensionname"
2424

2525
// Extensions is a map of extensions created from extension configs.
2626
type Extensions struct {
27-
telemetry servicetelemetry.TelemetrySettings
27+
telemetry component.TelemetrySettings
2828
extMap map[component.ID]extension.Extension
2929
instanceIDs map[component.ID]*component.InstanceID
3030
extensionIDs []component.ID // start order (and reverse stop order)
31+
reporter status.Reporter
3132
}
3233

3334
// Start starts all extensions.
@@ -38,20 +39,20 @@ func (bes *Extensions) Start(ctx context.Context, host component.Host) error {
3839
extLogger.Info("Extension is starting...")
3940
instanceID := bes.instanceIDs[extID]
4041
ext := bes.extMap[extID]
41-
bes.telemetry.Status.ReportStatus(
42+
bes.reporter.ReportStatus(
4243
instanceID,
4344
component.NewStatusEvent(component.StatusStarting),
4445
)
4546
if err := ext.Start(ctx, host); err != nil {
46-
bes.telemetry.Status.ReportStatus(
47+
bes.reporter.ReportStatus(
4748
instanceID,
4849
component.NewPermanentErrorEvent(err),
4950
)
5051
// We log with zap.AddStacktrace(zap.DPanicLevel) to avoid adding the stack trace to the error log
5152
extLogger.WithOptions(zap.AddStacktrace(zap.DPanicLevel)).Error("Failed to start extension", zap.Error(err))
5253
return err
5354
}
54-
bes.telemetry.Status.ReportOKIfStarting(instanceID)
55+
bes.reporter.ReportOKIfStarting(instanceID)
5556
extLogger.Info("Extension started.")
5657
}
5758
return nil
@@ -65,19 +66,19 @@ func (bes *Extensions) Shutdown(ctx context.Context) error {
6566
extID := bes.extensionIDs[i]
6667
instanceID := bes.instanceIDs[extID]
6768
ext := bes.extMap[extID]
68-
bes.telemetry.Status.ReportStatus(
69+
bes.reporter.ReportStatus(
6970
instanceID,
7071
component.NewStatusEvent(component.StatusStopping),
7172
)
7273
if err := ext.Shutdown(ctx); err != nil {
73-
bes.telemetry.Status.ReportStatus(
74+
bes.reporter.ReportStatus(
7475
instanceID,
7576
component.NewPermanentErrorEvent(err),
7677
)
7778
errs = multierr.Append(errs, err)
7879
continue
7980
}
80-
bes.telemetry.Status.ReportStatus(
81+
bes.reporter.ReportStatus(
8182
instanceID,
8283
component.NewStatusEvent(component.StatusStopped),
8384
)
@@ -166,31 +167,46 @@ func (bes *Extensions) HandleZPages(w http.ResponseWriter, r *http.Request) {
166167

167168
// Settings holds configuration for building Extensions.
168169
type Settings struct {
169-
Telemetry servicetelemetry.TelemetrySettings
170+
Telemetry component.TelemetrySettings
170171
BuildInfo component.BuildInfo
171172

172173
// Extensions builder for extensions.
173174
Extensions *extension.Builder
174175
}
175176

177+
type Option func(*Extensions)
178+
179+
func WithReporter(reporter status.Reporter) Option {
180+
return func(e *Extensions) {
181+
e.reporter = reporter
182+
}
183+
}
184+
176185
// New creates a new Extensions from Config.
177-
func New(ctx context.Context, set Settings, cfg Config) (*Extensions, error) {
186+
func New(ctx context.Context, set Settings, cfg Config, options ...Option) (*Extensions, error) {
178187
exts := &Extensions{
179188
telemetry: set.Telemetry,
180189
extMap: make(map[component.ID]extension.Extension),
181190
instanceIDs: make(map[component.ID]*component.InstanceID),
182191
extensionIDs: make([]component.ID, 0, len(cfg)),
192+
reporter: &nopReporter{},
193+
}
194+
195+
for _, opt := range options {
196+
opt(exts)
183197
}
198+
184199
for _, extID := range cfg {
185200
instanceID := &component.InstanceID{
186201
ID: extID,
187202
Kind: component.KindExtension,
188203
}
189204
extSet := extension.Settings{
190205
ID: extID,
191-
TelemetrySettings: set.Telemetry.ToComponentTelemetrySettings(instanceID),
206+
TelemetrySettings: set.Telemetry,
192207
BuildInfo: set.BuildInfo,
193208
}
209+
extSet.TelemetrySettings.ReportStatus = status.NewReportStatusFunc(instanceID, exts.reporter.ReportStatus)
194210
extSet.TelemetrySettings.Logger = components.ExtensionLogger(set.Telemetry.Logger, extID)
195211

196212
ext, err := set.Extensions.Create(ctx, extSet)
@@ -213,3 +229,11 @@ func New(ctx context.Context, set Settings, cfg Config) (*Extensions, error) {
213229
exts.extensionIDs = order
214230
return exts, nil
215231
}
232+
233+
type nopReporter struct{}
234+
235+
func (r *nopReporter) Ready() {}
236+
237+
func (r *nopReporter) ReportStatus(*component.InstanceID, *component.StatusEvent) {}
238+
239+
func (r *nopReporter) ReportOKIfStarting(*component.InstanceID) {}

service/extensions/extensions_test.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"go.opentelemetry.io/collector/confmap"
1717
"go.opentelemetry.io/collector/extension"
1818
"go.opentelemetry.io/collector/extension/extensiontest"
19-
"go.opentelemetry.io/collector/service/internal/servicetelemetry"
2019
"go.opentelemetry.io/collector/service/internal/status"
2120
)
2221

@@ -83,7 +82,7 @@ func TestBuildExtensions(t *testing.T) {
8382
for _, tt := range tests {
8483
t.Run(tt.name, func(t *testing.T) {
8584
_, err := New(context.Background(), Settings{
86-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
85+
Telemetry: componenttest.NewNopTelemetrySettings(),
8786
BuildInfo: component.NewDefaultBuildInfo(),
8887
Extensions: extension.NewBuilder(tt.extensionsConfigs, tt.factories),
8988
}, tt.config)
@@ -175,7 +174,7 @@ func (tc testOrderCase) testOrdering(t *testing.T) {
175174
}
176175

177176
exts, err := New(context.Background(), Settings{
178-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
177+
Telemetry: componenttest.NewNopTelemetrySettings(),
179178
BuildInfo: component.NewDefaultBuildInfo(),
180179
Extensions: extension.NewBuilder(
181180
extCfgs,
@@ -284,7 +283,7 @@ func TestNotifyConfig(t *testing.T) {
284283
for _, tt := range tests {
285284
t.Run(tt.name, func(t *testing.T) {
286285
extensions, err := New(context.Background(), Settings{
287-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
286+
Telemetry: componenttest.NewNopTelemetrySettings(),
288287
BuildInfo: component.NewDefaultBuildInfo(),
289288
Extensions: extension.NewBuilder(tt.extensionsConfigs, tt.factories),
290289
}, tt.serviceExtensions)
@@ -420,25 +419,26 @@ func TestStatusReportedOnStartupShutdown(t *testing.T) {
420419
factories := map[component.Type]extension.Factory{
421420
statusType: factory,
422421
}
422+
423+
var actualStatuses []*component.StatusEvent
424+
rep := status.NewReporter(func(_ *component.InstanceID, ev *component.StatusEvent) {
425+
actualStatuses = append(actualStatuses, ev)
426+
}, func(err error) {
427+
require.NoError(t, err)
428+
})
429+
423430
extensions, err := New(
424431
context.Background(),
425432
Settings{
426-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
433+
Telemetry: componenttest.NewNopTelemetrySettings(),
427434
BuildInfo: component.NewDefaultBuildInfo(),
428435
Extensions: extension.NewBuilder(extensionsConfigs, factories),
429436
},
430437
[]component.ID{compID},
438+
WithReporter(rep),
431439
)
432-
433440
assert.NoError(t, err)
434441

435-
var actualStatuses []*component.StatusEvent
436-
rep := status.NewReporter(func(_ *component.InstanceID, ev *component.StatusEvent) {
437-
actualStatuses = append(actualStatuses, ev)
438-
}, func(err error) {
439-
require.NoError(t, err)
440-
})
441-
extensions.telemetry.Status = rep
442442
rep.Ready()
443443

444444
assert.Equal(t, tc.startErr, extensions.Start(context.Background(), componenttest.NewNopHost()))

service/internal/graph/graph.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,13 @@ import (
3232
"go.opentelemetry.io/collector/processor"
3333
"go.opentelemetry.io/collector/receiver"
3434
"go.opentelemetry.io/collector/service/internal/capabilityconsumer"
35-
"go.opentelemetry.io/collector/service/internal/servicetelemetry"
3635
"go.opentelemetry.io/collector/service/internal/status"
3736
"go.opentelemetry.io/collector/service/pipelines"
3837
)
3938

4039
// Settings holds configuration for building builtPipelines.
4140
type Settings struct {
42-
Telemetry servicetelemetry.TelemetrySettings
41+
Telemetry component.TelemetrySettings
4342
BuildInfo component.BuildInfo
4443

4544
ReceiverBuilder *receiver.Builder
@@ -49,6 +48,8 @@ type Settings struct {
4948

5049
// PipelineConfigs is a map of component.ID to PipelineConfig.
5150
PipelineConfigs pipelines.Config
51+
52+
ReportStatus status.ServiceStatusFunc
5253
}
5354

5455
type Graph struct {
@@ -61,7 +62,7 @@ type Graph struct {
6162
// Keep track of status source per node
6263
instanceIDs map[int64]*component.InstanceID
6364

64-
telemetry servicetelemetry.TelemetrySettings
65+
telemetry component.TelemetrySettings
6566
}
6667

6768
// Build builds a full pipeline graph.
@@ -301,7 +302,8 @@ func (g *Graph) buildComponents(ctx context.Context, set Settings) error {
301302
// skipped for capabilitiesNodes and fanoutNodes as they are not assigned componentIDs.
302303
var telemetrySettings component.TelemetrySettings
303304
if instanceID, ok := g.instanceIDs[node.ID()]; ok {
304-
telemetrySettings = set.Telemetry.ToComponentTelemetrySettings(instanceID)
305+
telemetrySettings = set.Telemetry
306+
telemetrySettings.ReportStatus = status.NewReportStatusFunc(instanceID, set.ReportStatus)
305307
}
306308

307309
switch n := node.(type) {

service/internal/graph/graph_test.go

+7-9
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
"go.opentelemetry.io/collector/processor/processortest"
2929
"go.opentelemetry.io/collector/receiver"
3030
"go.opentelemetry.io/collector/receiver/receivertest"
31-
"go.opentelemetry.io/collector/service/internal/servicetelemetry"
3231
"go.opentelemetry.io/collector/service/internal/status"
3332
"go.opentelemetry.io/collector/service/internal/status/statustest"
3433
"go.opentelemetry.io/collector/service/internal/testcomponents"
@@ -145,7 +144,7 @@ func TestGraphStartStop(t *testing.T) {
145144
}
146145

147146
pg := &Graph{componentGraph: simple.NewDirectedGraph()}
148-
pg.telemetry = servicetelemetry.NewNopTelemetrySettings()
147+
pg.telemetry = componenttest.NewNopTelemetrySettings()
149148
pg.instanceIDs = make(map[int64]*component.InstanceID)
150149

151150
for _, edge := range tt.edges {
@@ -200,7 +199,7 @@ func TestGraphStartStopCycle(t *testing.T) {
200199

201200
func TestGraphStartStopComponentError(t *testing.T) {
202201
pg := &Graph{componentGraph: simple.NewDirectedGraph()}
203-
pg.telemetry = servicetelemetry.NewNopTelemetrySettings()
202+
pg.telemetry = componenttest.NewNopTelemetrySettings()
204203
r1 := &testNode{
205204
id: component.MustNewIDWithName("r", "1"),
206205
startErr: errors.New("foo"),
@@ -719,7 +718,7 @@ func TestConnectorPipelinesGraph(t *testing.T) {
719718
t.Run(test.name, func(t *testing.T) {
720719
// Build the pipeline
721720
set := Settings{
722-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
721+
Telemetry: componenttest.NewNopTelemetrySettings(),
723722
BuildInfo: component.NewDefaultBuildInfo(),
724723
ReceiverBuilder: receiver.NewBuilder(
725724
map[component.ID]component.Config{
@@ -1006,7 +1005,7 @@ func TestConnectorRouter(t *testing.T) {
10061005

10071006
ctx := context.Background()
10081007
set := Settings{
1009-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
1008+
Telemetry: componenttest.NewNopTelemetrySettings(),
10101009
BuildInfo: component.NewDefaultBuildInfo(),
10111010
ReceiverBuilder: receiver.NewBuilder(
10121011
map[component.ID]component.Config{
@@ -2050,7 +2049,7 @@ func TestGraphBuildErrors(t *testing.T) {
20502049
t.Run(test.name, func(t *testing.T) {
20512050
set := Settings{
20522051
BuildInfo: component.NewDefaultBuildInfo(),
2053-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
2052+
Telemetry: componenttest.NewNopTelemetrySettings(),
20542053
ReceiverBuilder: receiver.NewBuilder(
20552054
test.receiverCfgs,
20562055
map[component.Type]receiver.Factory{
@@ -2097,7 +2096,7 @@ func TestGraphFailToStartAndShutdown(t *testing.T) {
20972096
nopConnectorFactory := connectortest.NewNopFactory()
20982097

20992098
set := Settings{
2100-
Telemetry: servicetelemetry.NewNopTelemetrySettings(),
2099+
Telemetry: componenttest.NewNopTelemetrySettings(),
21012100
BuildInfo: component.NewDefaultBuildInfo(),
21022101
ReceiverBuilder: receiver.NewBuilder(
21032102
map[component.ID]component.Config{
@@ -2333,15 +2332,14 @@ func TestStatusReportedOnStartupShutdown(t *testing.T) {
23332332
} {
23342333
t.Run(tc.name, func(t *testing.T) {
23352334
pg := &Graph{componentGraph: simple.NewDirectedGraph()}
2336-
pg.telemetry = servicetelemetry.NewNopTelemetrySettings()
2335+
pg.telemetry = componenttest.NewNopTelemetrySettings()
23372336

23382337
actualStatuses := make(map[*component.InstanceID][]*component.StatusEvent)
23392338
rep := status.NewReporter(func(id *component.InstanceID, ev *component.StatusEvent) {
23402339
actualStatuses[id] = append(actualStatuses[id], ev)
23412340
}, func(error) {
23422341
})
23432342

2344-
pg.telemetry.Status = rep
23452343
rep.Ready()
23462344

23472345
e0, e1 := tc.edge[0], tc.edge[1]

service/internal/proctelemetry/process_telemetry.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515

1616
"go.opentelemetry.io/collector/component"
1717
"go.opentelemetry.io/collector/service/internal/metadata"
18-
"go.opentelemetry.io/collector/service/internal/servicetelemetry"
1918
)
2019

2120
// processMetrics is a struct that contains views related to process metrics (cpu, mem, etc)
@@ -53,7 +52,7 @@ func WithHostProc(hostProc string) RegisterOption {
5352

5453
// RegisterProcessMetrics creates a new set of processMetrics (mem, cpu) that can be used to measure
5554
// basic information about this process.
56-
func RegisterProcessMetrics(cfg servicetelemetry.TelemetrySettings, opts ...RegisterOption) error {
55+
func RegisterProcessMetrics(cfg component.TelemetrySettings, opts ...RegisterOption) error {
5756
set := registerOption{}
5857
for _, opt := range opts {
5958
opt.apply(&set)
@@ -74,7 +73,7 @@ func RegisterProcessMetrics(cfg servicetelemetry.TelemetrySettings, opts ...Regi
7473
return err
7574
}
7675

77-
_, err = metadata.NewTelemetryBuilder(cfg.ToComponentTelemetrySettings(&component.InstanceID{}),
76+
_, err = metadata.NewTelemetryBuilder(cfg,
7877
metadata.WithProcessUptimeCallback(pm.updateProcessUptime),
7978
metadata.WithProcessRuntimeHeapAllocBytesCallback(pm.updateAllocMem),
8079
metadata.WithProcessRuntimeTotalAllocBytesCallback(pm.updateTotalAllocMem),

0 commit comments

Comments
 (0)