119 lines
3.5 KiB
Go
119 lines
3.5 KiB
Go
// 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}
|
|
}
|