opentelemetry-collector/service/telemetry/internal/migration/v0.2.0.go

212 lines
7.1 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package migration // import "go.opentelemetry.io/collector/service/telemetry/internal/migration"
import (
configv02 "go.opentelemetry.io/contrib/otelconf/v0.2.0"
config "go.opentelemetry.io/contrib/otelconf/v0.3.0"
"go.uber.org/zap/zapcore"
"go.opentelemetry.io/collector/config/configtelemetry"
)
type tracesConfigV020 struct {
Level configtelemetry.Level `mapstructure:"level"`
Propagators []string `mapstructure:"propagators"`
Processors []configv02.SpanProcessor `mapstructure:"processors"`
}
type metricsConfigV020 struct {
Level configtelemetry.Level `mapstructure:"level"`
Readers []configv02.MetricReader `mapstructure:"readers"`
}
type logsConfigV020 struct {
Level zapcore.Level `mapstructure:"level"`
Development bool `mapstructure:"development"`
Encoding string `mapstructure:"encoding"`
DisableCaller bool `mapstructure:"disable_caller"`
DisableStacktrace bool `mapstructure:"disable_stacktrace"`
Sampling *LogsSamplingConfig `mapstructure:"sampling"`
OutputPaths []string `mapstructure:"output_paths"`
ErrorOutputPaths []string `mapstructure:"error_output_paths"`
InitialFields map[string]any `mapstructure:"initial_fields"`
Processors []configv02.LogRecordProcessor `mapstructure:"processors"`
}
func headersV02ToV03(in configv02.Headers) []config.NameStringValuePair {
headers := make([]config.NameStringValuePair, 0, len(in))
for k, v := range in {
headers = append(headers, config.NameStringValuePair{
Name: k,
Value: &v,
})
}
return headers
}
func otlpV02ToV03(in *configv02.OTLP) *config.OTLP {
if in == nil {
return nil
}
return &config.OTLP{
Certificate: in.Certificate,
ClientCertificate: in.ClientCertificate,
ClientKey: in.ClientKey,
Compression: in.Compression,
Endpoint: normalizeEndpoint(in.Endpoint),
Insecure: in.Insecure,
Protocol: &in.Protocol,
Timeout: in.Timeout,
Headers: headersV02ToV03(in.Headers),
}
}
func otlpMetricV02ToV03(in *configv02.OTLPMetric) *config.OTLPMetric {
if in == nil {
return nil
}
return &config.OTLPMetric{
Certificate: in.Certificate,
ClientCertificate: in.ClientCertificate,
ClientKey: in.ClientKey,
Compression: in.Compression,
Endpoint: normalizeEndpoint(in.Endpoint),
Insecure: in.Insecure,
Protocol: &in.Protocol,
Timeout: in.Timeout,
Headers: headersV02ToV03(in.Headers),
}
}
func zipkinV02ToV03(in *configv02.Zipkin) *config.Zipkin {
if in == nil {
return nil
}
return &config.Zipkin{
Endpoint: &in.Endpoint,
Timeout: in.Timeout,
}
}
func tracesConfigV02ToV03(v2 tracesConfigV020, v3 *TracesConfigV030) error {
processors := make([]config.SpanProcessor, len(v2.Processors))
for idx, p := range v2.Processors {
processors[idx] = config.SpanProcessor{}
if p.Batch != nil {
processors[idx].Batch = &config.BatchSpanProcessor{
ExportTimeout: p.Batch.ExportTimeout,
MaxExportBatchSize: p.Batch.MaxExportBatchSize,
MaxQueueSize: p.Batch.MaxQueueSize,
ScheduleDelay: p.Batch.ScheduleDelay,
Exporter: config.SpanExporter{
Console: config.Console(p.Batch.Exporter.Console),
OTLP: otlpV02ToV03(p.Batch.Exporter.OTLP),
Zipkin: zipkinV02ToV03(p.Batch.Exporter.Zipkin),
AdditionalProperties: p.Batch.Exporter.AdditionalProperties,
},
}
}
if p.Simple != nil {
processors[idx].Simple = &config.SimpleSpanProcessor{
Exporter: config.SpanExporter{
Console: config.Console(p.Simple.Exporter.Console),
OTLP: otlpV02ToV03(p.Simple.Exporter.OTLP),
Zipkin: zipkinV02ToV03(p.Simple.Exporter.Zipkin),
AdditionalProperties: p.Simple.Exporter.AdditionalProperties,
},
}
}
processors[idx].AdditionalProperties = p.AdditionalProperties
}
v3.Level = v2.Level
v3.Propagators = v2.Propagators
v3.Processors = processors
return nil
}
func prometheusV02ToV03(in *configv02.Prometheus) *config.Prometheus {
if in == nil {
return nil
}
return &config.Prometheus{
Host: in.Host,
Port: in.Port,
WithoutScopeInfo: in.WithoutScopeInfo,
WithoutUnits: in.WithoutUnits,
WithoutTypeSuffix: in.WithoutTypeSuffix,
WithResourceConstantLabels: (*config.IncludeExclude)(in.WithResourceConstantLabels),
}
}
func metricsConfigV02ToV03(v2 metricsConfigV020, v3 *MetricsConfigV030) error {
readers := make([]config.MetricReader, len(v2.Readers))
for idx, p := range v2.Readers {
readers[idx] = config.MetricReader{}
if p.Periodic != nil {
readers[idx].Periodic = &config.PeriodicMetricReader{
Interval: p.Periodic.Interval,
Timeout: p.Periodic.Timeout,
Exporter: config.PushMetricExporter{
Console: config.Console(p.Periodic.Exporter.Console),
OTLP: otlpMetricV02ToV03(p.Periodic.Exporter.OTLP),
AdditionalProperties: p.Periodic.Exporter.AdditionalProperties,
},
}
}
if p.Pull != nil {
readers[idx].Pull = &config.PullMetricReader{
Exporter: config.PullMetricExporter{
Prometheus: prometheusV02ToV03(p.Pull.Exporter.Prometheus),
AdditionalProperties: p.Pull.Exporter.AdditionalProperties,
},
}
}
}
v3.Level = v2.Level
v3.Readers = readers
return nil
}
func logsConfigV02ToV03(v2 logsConfigV020, v3 *LogsConfigV030) error {
processors := make([]config.LogRecordProcessor, len(v2.Processors))
for idx, p := range v2.Processors {
processors[idx] = config.LogRecordProcessor{}
if p.Batch != nil {
processors[idx].Batch = &config.BatchLogRecordProcessor{
ExportTimeout: p.Batch.ExportTimeout,
MaxExportBatchSize: p.Batch.MaxExportBatchSize,
MaxQueueSize: p.Batch.MaxQueueSize,
ScheduleDelay: p.Batch.ScheduleDelay,
Exporter: config.LogRecordExporter{
Console: config.Console(p.Batch.Exporter.Console),
OTLP: otlpV02ToV03(p.Batch.Exporter.OTLP),
AdditionalProperties: p.Batch.Exporter.AdditionalProperties,
},
}
}
if p.Simple != nil {
processors[idx].Simple = &config.SimpleLogRecordProcessor{
Exporter: config.LogRecordExporter{
Console: config.Console(p.Simple.Exporter.Console),
OTLP: otlpV02ToV03(p.Simple.Exporter.OTLP),
AdditionalProperties: p.Simple.Exporter.AdditionalProperties,
},
}
}
processors[idx].AdditionalProperties = p.AdditionalProperties
}
v3.Level = v2.Level
v3.Development = v2.Development
v3.Encoding = v2.Encoding
v3.DisableCaller = v2.DisableCaller
v3.DisableStacktrace = v2.DisableStacktrace
v3.Sampling = v2.Sampling
v3.OutputPaths = v2.OutputPaths
v3.ErrorOutputPaths = v2.ErrorOutputPaths
v3.InitialFields = v2.InitialFields
v3.Processors = processors
return nil
}