Skip to content

Commit 1259ef5

Browse files
author
Ryan Fitzpatrick
committed
smartagent: ensure metadata exporters are of desired type
1 parent fb45659 commit 1259ef5

File tree

2 files changed

+46
-33
lines changed

2 files changed

+46
-33
lines changed

internal/receiver/smartagentreceiver/output.go

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func getMetadataExporters(
7373
) []*metadata.MetadataExporter {
7474
var exporters []*metadata.MetadataExporter
7575

76-
metadataExporters, noClientsSpecified := getClientsFromMetricsExporters(config.DimensionClients, host, nextConsumer, "dimensionClients", logger)
76+
metadataExporters, noClientsSpecified := getClientsFromMetricsExporters(config.DimensionClients, host, nextConsumer, "dimensionClients", configmodels.MetricsDataType, logger)
7777
for _, client := range metadataExporters {
7878
if metadataExporter, ok := (*client).(metadata.MetadataExporter); ok {
7979
exporters = append(exporters, &metadataExporter)
@@ -83,7 +83,7 @@ func getMetadataExporters(
8383
}
8484

8585
if len(exporters) == 0 && noClientsSpecified {
86-
sfxExporter := getLoneSFxExporter(host)
86+
sfxExporter := getLoneSFxExporter(host, configmodels.MetricsDataType)
8787
if sfxExporter != nil {
8888
if sfx, ok := sfxExporter.(metadata.MetadataExporter); ok {
8989
exporters = append(exporters, &sfx)
@@ -106,7 +106,7 @@ func getLogsConsumers(
106106
) []*consumer.LogsConsumer {
107107
var consumers []*consumer.LogsConsumer
108108

109-
eventClients, noClientsSpecified := getClientsFromMetricsExporters(config.EventClients, host, nextConsumer, "eventClients", logger)
109+
eventClients, noClientsSpecified := getClientsFromMetricsExporters(config.EventClients, host, nextConsumer, "eventClients", configmodels.LogsDataType, logger)
110110
for _, client := range eventClients {
111111
if logsExporter, ok := (*client).(consumer.LogsConsumer); ok {
112112
consumers = append(consumers, &logsExporter)
@@ -116,7 +116,7 @@ func getLogsConsumers(
116116
}
117117

118118
if len(consumers) == 0 && noClientsSpecified {
119-
sfxExporter := getLoneSFxExporter(host)
119+
sfxExporter := getLoneSFxExporter(host, configmodels.LogsDataType)
120120
if sfxExporter != nil {
121121
if sfx, ok := sfxExporter.(consumer.LogsConsumer); ok {
122122
consumers = append(consumers, &sfx)
@@ -135,7 +135,7 @@ func getLogsConsumers(
135135
// MetricsExporters, the only truly supported component type.
136136
// If config.MetadataClients is nil, it will return a slice with nextConsumer if it's a MetricsExporter.
137137
func getClientsFromMetricsExporters(
138-
specifiedClients []string, host component.Host, nextConsumer *consumer.MetricsConsumer, fieldName string, logger *zap.Logger,
138+
specifiedClients []string, host component.Host, nextConsumer *consumer.MetricsConsumer, fieldName string, exporterType configmodels.DataType, logger *zap.Logger,
139139
) (clients []*interface{}, wasNil bool) {
140140
if specifiedClients == nil {
141141
wasNil = true
@@ -145,37 +145,39 @@ func getClientsFromMetricsExporters(
145145
return
146146
}
147147

148-
builtExporters := host.GetExporters()[configmodels.MetricsDataType]
149-
for _, client := range specifiedClients {
150-
var found bool
151-
for exporterConfig, exporter := range builtExporters {
152-
if exporterConfig.Name() == client {
153-
asInterface := exporter.(interface{})
154-
clients = append(clients, &asInterface)
155-
found = true
148+
if builtExporters, ok := host.GetExporters()[exporterType]; ok {
149+
for _, client := range specifiedClients {
150+
var found bool
151+
for exporterConfig, exporter := range builtExporters {
152+
if exporterConfig.Name() == client {
153+
asInterface := exporter.(interface{})
154+
clients = append(clients, &asInterface)
155+
found = true
156+
}
157+
}
158+
if !found {
159+
logger.Info(
160+
fmt.Sprintf("specified %s is not an available exporter", fieldName),
161+
zap.String("client", client),
162+
)
156163
}
157-
}
158-
if !found {
159-
logger.Info(
160-
fmt.Sprintf("specified %s is not an available exporter", fieldName),
161-
zap.String("client", client),
162-
)
163164
}
164165
}
165166
return
166167
}
167168

168-
func getLoneSFxExporter(host component.Host) component.Exporter {
169-
builtExporters := host.GetExporters()[configmodels.MetricsDataType]
169+
func getLoneSFxExporter(host component.Host, exporterType configmodels.DataType) component.Exporter {
170170
var sfxExporter component.Exporter
171-
for exporterConfig, exporter := range builtExporters {
172-
if exporterConfig.Type() == "signalfx" {
173-
if sfxExporter == nil {
174-
sfxExporter = exporter
175-
} else { // we've already found one so no lone instance to use as default
176-
return nil
177-
}
171+
if builtExporters, ok := host.GetExporters()[exporterType]; ok {
172+
for exporterConfig, exporter := range builtExporters {
173+
if exporterConfig.Type() == "signalfx" {
174+
if sfxExporter == nil {
175+
sfxExporter = exporter
176+
} else { // we've already found one so no lone instance to use as default
177+
return nil
178+
}
178179

180+
}
179181
}
180182
}
181183
return sfxExporter

internal/receiver/smartagentreceiver/output_test.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -312,20 +312,23 @@ type hostWithExporters struct {
312312

313313
func getExporters() map[configmodels.DataType]map[configmodels.Exporter]component.Exporter {
314314
exporters := map[configmodels.DataType]map[configmodels.Exporter]component.Exporter{}
315-
exporterMap := map[configmodels.Exporter]component.Exporter{}
316-
exporters[configmodels.MetricsDataType] = exporterMap
315+
logExporterMap := map[configmodels.Exporter]component.Exporter{}
316+
exporters[configmodels.LogsDataType] = logExporterMap
317+
318+
metricExporterMap := map[configmodels.Exporter]component.Exporter{}
319+
exporters[configmodels.MetricsDataType] = metricExporterMap
317320

318321
exampleExporterFactory := componenttest.ExampleExporterFactory{}
319322
exampleExporter, _ := exampleExporterFactory.CreateMetricsExporter(
320323
context.Background(), component.ExporterCreateParams{}, nil,
321324
)
322-
exporterMap[exampleExporterFactory.CreateDefaultConfig()] = exampleExporter
325+
metricExporterMap[exampleExporterFactory.CreateDefaultConfig()] = exampleExporter
323326

324327
receiver := namedEntity{name: "metricsreceiver"}
325-
exporterMap[&receiver] = &metricsReceiver{}
328+
metricExporterMap[&receiver] = &metricsReceiver{}
326329

327330
notReceiver := namedEntity{name: "notareceiver"}
328-
exporterMap[&notReceiver] = &notAReceiver{}
331+
metricExporterMap[&notReceiver] = &notAReceiver{}
329332

330333
return exporters
331334
}
@@ -336,6 +339,9 @@ func (h *hostWithExporters) GetExporters() map[configmodels.DataType]map[configm
336339

337340
me := namedEntity{name: h.exporter.name, _type: h.exporter.name}
338341
exporterMap[&me] = component.MetricsExporter(h.exporter)
342+
343+
exporterMap = exporters[configmodels.LogsDataType]
344+
exporterMap[&me] = component.LogsExporter(h.exporter)
339345
return exporters
340346
}
341347

@@ -353,6 +359,11 @@ func (h *hostWithTwoSFxExporters) GetExporters() map[configmodels.DataType]map[c
353359

354360
meTwo := namedEntity{name: "sfx2", _type: "signalfx"}
355361
exporterMap[&meTwo] = component.MetricsExporter(h.sfxExporter)
362+
363+
exporterMap = exporters[configmodels.LogsDataType]
364+
exporterMap[&meOne] = component.LogsExporter(h.sfxExporter)
365+
exporterMap[&meTwo] = component.LogsExporter(h.sfxExporter)
366+
356367
return exporters
357368
}
358369

0 commit comments

Comments
 (0)