/
example_receiver.go
90 lines (76 loc) · 2.7 KB
/
example_receiver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package testcomponents // import "go.opentelemetry.io/collector/service/internal/testcomponents"
import (
"context"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver"
)
var receiverType = component.MustNewType("examplereceiver")
// ExampleReceiverFactory is factory for ExampleReceiver.
var ExampleReceiverFactory = receiver.NewFactory(
receiverType,
createReceiverDefaultConfig,
receiver.WithTraces(createTracesReceiver, component.StabilityLevelDevelopment),
receiver.WithMetrics(createMetricsReceiver, component.StabilityLevelDevelopment),
receiver.WithLogs(createLogsReceiver, component.StabilityLevelDevelopment))
func createReceiverDefaultConfig() component.Config {
return &struct{}{}
}
// createTracesReceiver creates a trace receiver based on this config.
func createTracesReceiver(
_ context.Context,
_ receiver.CreateSettings,
cfg component.Config,
nextConsumer consumer.Traces,
) (receiver.Traces, error) {
tr := createReceiver(cfg)
tr.ConsumeTracesFunc = nextConsumer.ConsumeTraces
return tr, nil
}
// createMetricsReceiver creates a metrics receiver based on this config.
func createMetricsReceiver(
_ context.Context,
_ receiver.CreateSettings,
cfg component.Config,
nextConsumer consumer.Metrics,
) (receiver.Metrics, error) {
mr := createReceiver(cfg)
mr.ConsumeMetricsFunc = nextConsumer.ConsumeMetrics
return mr, nil
}
func createLogsReceiver(
_ context.Context,
_ receiver.CreateSettings,
cfg component.Config,
nextConsumer consumer.Logs,
) (receiver.Logs, error) {
lr := createReceiver(cfg)
lr.ConsumeLogsFunc = nextConsumer.ConsumeLogs
return lr, nil
}
func createReceiver(cfg component.Config) *ExampleReceiver {
// There must be one receiver for all data types. We maintain a map of
// receivers per config.
// Check to see if there is already a receiver for this config.
er, ok := exampleReceivers[cfg]
if !ok {
er = &ExampleReceiver{}
// Remember the receiver in the map
exampleReceivers[cfg] = er
}
return er
}
// ExampleReceiver allows producing traces and metrics for testing purposes.
type ExampleReceiver struct {
componentState
consumer.ConsumeTracesFunc
consumer.ConsumeMetricsFunc
consumer.ConsumeLogsFunc
}
// This is the map of already created example receivers for particular configurations.
// We maintain this map because the ReceiverFactory is asked trace and metric receivers separately
// when it gets CreateTracesReceiver() and CreateMetricsReceiver() but they must not
// create separate objects, they must use one Receiver object per configuration.
var exampleReceivers = map[component.Config]*ExampleReceiver{}