mirror of
https://github.com/hanzoai/telemetry.git
synced 2026-10-30 20:01:49 +00:00
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> #### Description Run the `make modernize` tool. https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize Signed-off-by: Paulo Dias <[email protected]>
56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package internal // import "go.opentelemetry.io/collector/connector/internal"
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"maps"
|
|
|
|
"go.uber.org/multierr"
|
|
|
|
"go.opentelemetry.io/collector/pipeline"
|
|
)
|
|
|
|
type BaseRouter[T any] struct {
|
|
fanout func([]T) T
|
|
Consumers map[pipeline.ID]T
|
|
}
|
|
|
|
func NewBaseRouter[T any](fanout func([]T) T, cm map[pipeline.ID]T) BaseRouter[T] {
|
|
consumers := make(map[pipeline.ID]T, len(cm))
|
|
maps.Copy(consumers, cm)
|
|
return BaseRouter[T]{fanout: fanout, Consumers: consumers}
|
|
}
|
|
|
|
func (r *BaseRouter[T]) PipelineIDs() []pipeline.ID {
|
|
ids := make([]pipeline.ID, 0, len(r.Consumers))
|
|
for id := range r.Consumers {
|
|
ids = append(ids, id)
|
|
}
|
|
return ids
|
|
}
|
|
|
|
func (r *BaseRouter[T]) Consumer(pipelineIDs ...pipeline.ID) (T, error) {
|
|
var ret T
|
|
if len(pipelineIDs) == 0 {
|
|
return ret, errors.New("missing consumers")
|
|
}
|
|
consumers := make([]T, 0, len(pipelineIDs))
|
|
var errors error
|
|
for _, pipelineID := range pipelineIDs {
|
|
c, ok := r.Consumers[pipelineID]
|
|
if ok {
|
|
consumers = append(consumers, c)
|
|
} else {
|
|
errors = multierr.Append(errors, fmt.Errorf("missing consumer: %q", pipelineID))
|
|
}
|
|
}
|
|
if errors != nil {
|
|
// TODO potentially this could return a NewTraces with the valid consumers
|
|
return ret, errors
|
|
}
|
|
return r.fanout(consumers), nil
|
|
}
|