mirror of
https://github.com/hanzoai/otel-collector.git
synced 2026-10-30 18:26:25 +00:00
Modules declare go 1.27.1 and the build images follow. go fix applied the modernizers; omitzero is not applied, since it changes what the JSON says. Co-authored-by: Hanzo Dev <[email protected]>
166 lines
4.8 KiB
Go
166 lines
4.8 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package common // import "github.com/hanzoai/otel-collector/processor/o11ytransformprocessor/internal/common"
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.opentelemetry.io/collector/component"
|
|
"go.opentelemetry.io/collector/consumer"
|
|
"go.opentelemetry.io/collector/pdata/ptrace"
|
|
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlresource"
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlscope"
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspan"
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspanevent"
|
|
)
|
|
|
|
var _ consumer.Traces = &traceStatements{}
|
|
|
|
type traceStatements struct {
|
|
ottl.StatementSequence[*ottlspan.TransformContext]
|
|
}
|
|
|
|
func (t traceStatements) Capabilities() consumer.Capabilities {
|
|
return consumer.Capabilities{
|
|
MutatesData: true,
|
|
}
|
|
}
|
|
|
|
func (t traceStatements) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
|
|
for i := 0; i < td.ResourceSpans().Len(); i++ {
|
|
rspans := td.ResourceSpans().At(i)
|
|
for j := 0; j < rspans.ScopeSpans().Len(); j++ {
|
|
sspans := rspans.ScopeSpans().At(j)
|
|
spans := sspans.Spans()
|
|
for k := 0; k < spans.Len(); k++ {
|
|
tCtx := ottlspan.NewTransformContextPtr(rspans, sspans, spans.At(k))
|
|
err := t.Execute(ctx, tCtx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var _ consumer.Traces = &spanEventStatements{}
|
|
|
|
type spanEventStatements struct {
|
|
ottl.StatementSequence[*ottlspanevent.TransformContext]
|
|
}
|
|
|
|
func (s spanEventStatements) Capabilities() consumer.Capabilities {
|
|
return consumer.Capabilities{
|
|
MutatesData: true,
|
|
}
|
|
}
|
|
|
|
func (s spanEventStatements) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
|
|
for i := 0; i < td.ResourceSpans().Len(); i++ {
|
|
rspans := td.ResourceSpans().At(i)
|
|
for j := 0; j < rspans.ScopeSpans().Len(); j++ {
|
|
sspans := rspans.ScopeSpans().At(j)
|
|
spans := sspans.Spans()
|
|
for k := 0; k < spans.Len(); k++ {
|
|
span := spans.At(k)
|
|
spanEvents := span.Events()
|
|
for n := 0; n < spanEvents.Len(); n++ {
|
|
tCtx := ottlspanevent.NewTransformContextPtr(rspans, sspans, span, spanEvents.At(n))
|
|
err := s.Execute(ctx, tCtx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type TraceParserCollection struct {
|
|
parserCollection
|
|
spanParser ottl.Parser[*ottlspan.TransformContext]
|
|
spanEventParser ottl.Parser[*ottlspanevent.TransformContext]
|
|
}
|
|
|
|
type TraceParserCollectionOption func(*TraceParserCollection) error
|
|
|
|
func WithSpanParser(functions map[string]ottl.Factory[*ottlspan.TransformContext]) TraceParserCollectionOption {
|
|
return func(tp *TraceParserCollection) error {
|
|
spanParser, err := ottlspan.NewParser(functions, tp.settings)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tp.spanParser = spanParser
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func WithSpanEventParser(functions map[string]ottl.Factory[*ottlspanevent.TransformContext]) TraceParserCollectionOption {
|
|
return func(tp *TraceParserCollection) error {
|
|
spanEventParser, err := ottlspanevent.NewParser(functions, tp.settings)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tp.spanEventParser = spanEventParser
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func WithTraceErrorMode(errorMode ottl.ErrorMode) TraceParserCollectionOption {
|
|
return func(tp *TraceParserCollection) error {
|
|
tp.errorMode = errorMode
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func NewTraceParserCollection(settings component.TelemetrySettings, options ...TraceParserCollectionOption) (*TraceParserCollection, error) {
|
|
rp, err := ottlresource.NewParser(ResourceFunctions(), settings)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sp, err := ottlscope.NewParser(ScopeFunctions(), settings)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tpc := &TraceParserCollection{
|
|
settings: settings,
|
|
resourceParser: rp,
|
|
scopeParser: sp,
|
|
}
|
|
|
|
for _, op := range options {
|
|
err := op(tpc)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return tpc, nil
|
|
}
|
|
|
|
func (pc TraceParserCollection) ParseContextStatements(contextStatements ContextStatements) (consumer.Traces, error) {
|
|
switch contextStatements.Context {
|
|
case Span:
|
|
parsedStatements, err := pc.spanParser.ParseStatements(contextStatements.Statements)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sStatements := ottlspan.NewStatementSequence(parsedStatements, pc.settings, ottlspan.WithStatementSequenceErrorMode(pc.errorMode))
|
|
return traceStatements{sStatements}, nil
|
|
case SpanEvent:
|
|
parsedStatements, err := pc.spanEventParser.ParseStatements(contextStatements.Statements)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
seStatements := ottlspanevent.NewStatementSequence(parsedStatements, pc.settings, ottlspanevent.WithStatementSequenceErrorMode(pc.errorMode))
|
|
return spanEventStatements{seStatements}, nil
|
|
default:
|
|
return pc.parseCommonContextStatements(contextStatements)
|
|
}
|
|
}
|