/
example_router.go
118 lines (99 loc) · 3.47 KB
/
example_router.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// 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/connector"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
)
var routerType = component.MustNewType("examplerouter")
// ExampleRouterFactory is factory for ExampleRouter.
var ExampleRouterFactory = connector.NewFactory(
routerType,
createExampleRouterDefaultConfig,
connector.WithTracesToTraces(createExampleTracesRouter, component.StabilityLevelDevelopment),
connector.WithMetricsToMetrics(createExampleMetricsRouter, component.StabilityLevelDevelopment),
connector.WithLogsToLogs(createExampleLogsRouter, component.StabilityLevelDevelopment),
)
type LeftRightConfig struct {
Left component.ID `mapstructure:"left"`
Right component.ID `mapstructure:"right"`
}
type ExampleRouterConfig struct {
Traces *LeftRightConfig `mapstructure:"traces"`
Metrics *LeftRightConfig `mapstructure:"metrics"`
Logs *LeftRightConfig `mapstructure:"logs"`
}
func createExampleRouterDefaultConfig() component.Config {
return &ExampleRouterConfig{}
}
func createExampleTracesRouter(_ context.Context, _ connector.CreateSettings, cfg component.Config, traces consumer.Traces) (connector.Traces, error) {
c := cfg.(ExampleRouterConfig)
r := traces.(connector.TracesRouterAndConsumer)
left, _ := r.Consumer(c.Traces.Left)
right, _ := r.Consumer(c.Traces.Right)
return &ExampleRouter{
tracesRight: right,
tracesLeft: left,
}, nil
}
func createExampleMetricsRouter(_ context.Context, _ connector.CreateSettings, cfg component.Config, metrics consumer.Metrics) (connector.Metrics, error) {
c := cfg.(ExampleRouterConfig)
r := metrics.(connector.MetricsRouterAndConsumer)
left, _ := r.Consumer(c.Metrics.Left)
right, _ := r.Consumer(c.Metrics.Right)
return &ExampleRouter{
metricsRight: right,
metricsLeft: left,
}, nil
}
func createExampleLogsRouter(_ context.Context, _ connector.CreateSettings, cfg component.Config, logs consumer.Logs) (connector.Logs, error) {
c := cfg.(ExampleRouterConfig)
r := logs.(connector.LogsRouterAndConsumer)
left, _ := r.Consumer(c.Logs.Left)
right, _ := r.Consumer(c.Logs.Right)
return &ExampleRouter{
logsRight: right,
logsLeft: left,
}, nil
}
type ExampleRouter struct {
componentState
tracesRight consumer.Traces
tracesLeft consumer.Traces
tracesNum int
metricsRight consumer.Metrics
metricsLeft consumer.Metrics
metricsNum int
logsRight consumer.Logs
logsLeft consumer.Logs
logsNum int
}
func (r *ExampleRouter) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
r.tracesNum++
if r.tracesNum%2 == 0 {
return r.tracesLeft.ConsumeTraces(ctx, td)
}
return r.tracesRight.ConsumeTraces(ctx, td)
}
func (r *ExampleRouter) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
r.metricsNum++
if r.metricsNum%2 == 0 {
return r.metricsLeft.ConsumeMetrics(ctx, md)
}
return r.metricsRight.ConsumeMetrics(ctx, md)
}
func (r *ExampleRouter) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
r.logsNum++
if r.logsNum%2 == 0 {
return r.logsLeft.ConsumeLogs(ctx, ld)
}
return r.logsRight.ConsumeLogs(ctx, ld)
}
func (r *ExampleRouter) Capabilities() consumer.Capabilities {
return consumer.Capabilities{MutatesData: false}
}