/
converter_transformprocessor.go
75 lines (60 loc) · 2.38 KB
/
converter_transformprocessor.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
package otelcolconvert
import (
"fmt"
"github.com/grafana/alloy/internal/component/otelcol"
"github.com/grafana/alloy/internal/component/otelcol/processor/transform"
"github.com/grafana/alloy/internal/converter/diag"
"github.com/grafana/alloy/internal/converter/internal/common"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor"
"go.opentelemetry.io/collector/component"
)
func init() {
converters = append(converters, transformProcessorConverter{})
}
type transformProcessorConverter struct{}
func (transformProcessorConverter) Factory() component.Factory {
return transformprocessor.NewFactory()
}
func (transformProcessorConverter) InputComponentName() string {
return "otelcol.processor.transform"
}
func (transformProcessorConverter) ConvertAndAppend(state *State, id component.InstanceID, cfg component.Config) diag.Diagnostics {
var diags diag.Diagnostics
label := state.AlloyComponentLabel()
args := toTransformProcessor(state, id, cfg.(*transformprocessor.Config))
block := common.NewBlockWithOverride([]string{"otelcol", "processor", "transform"}, label, args)
diags.Add(
diag.SeverityLevelInfo,
fmt.Sprintf("Converted %s into %s", StringifyInstanceID(id), StringifyBlock(block)),
)
state.Body().AppendBlock(block)
return diags
}
func toTransformProcessor(state *State, id component.InstanceID, cfg *transformprocessor.Config) *transform.Arguments {
var (
nextMetrics = state.Next(id, component.DataTypeMetrics)
nextLogs = state.Next(id, component.DataTypeLogs)
nextTraces = state.Next(id, component.DataTypeTraces)
)
return &transform.Arguments{
ErrorMode: cfg.ErrorMode,
TraceStatements: toContextStatements(encodeMapslice(cfg.TraceStatements)),
MetricStatements: toContextStatements(encodeMapslice(cfg.MetricStatements)),
LogStatements: toContextStatements(encodeMapslice(cfg.LogStatements)),
Output: &otelcol.ConsumerArguments{
Metrics: ToTokenizedConsumers(nextMetrics),
Logs: ToTokenizedConsumers(nextLogs),
Traces: ToTokenizedConsumers(nextTraces),
},
}
}
func toContextStatements(in []map[string]any) []transform.ContextStatements {
res := make([]transform.ContextStatements, 0, len(in))
for _, s := range in {
res = append(res, transform.ContextStatements{
Context: transform.ContextID(encodeString(s["context"])),
Statements: s["statements"].([]string),
})
}
return res
}