func Translate()

in translator/translate/otel/translate_otel.go [48:118]


func Translate(jsonConfig interface{}, os string) (*otelcol.Config, error) {
	m, ok := jsonConfig.(map[string]interface{})
	if !ok {
		return nil, errors.New("invalid json config")
	}
	conf := confmap.NewFromStringMap(m)

	if conf.IsSet("csm") {
		log.Printf("W! CSM has already been deprecated")
	}

	translators := common.NewTranslatorMap[*common.ComponentTranslators, pipeline.ID]()
	metricsHostTranslators, err := host.NewTranslators(conf, host.MetricsKey, os)
	if err != nil {
		return nil, err
	}
	translators.Merge(metricsHostTranslators)
	logsHostTranslators, err := host.NewTranslators(conf, host.LogsKey, os)
	if err != nil {
		return nil, err
	}
	translators.Merge(logsHostTranslators)
	containerInsightsTranslators := containerinsights.NewTranslators(conf)
	translators.Merge(containerInsightsTranslators)
	translators.Set(applicationsignals.NewTranslator(pipeline.SignalTraces))
	translators.Set(applicationsignals.NewTranslator(pipeline.SignalMetrics))
	translators.Merge(prometheus.NewTranslators(conf))
	translators.Set(emf_logs.NewTranslator())
	translators.Set(xray.NewTranslator())
	translators.Set(containerinsightsjmx.NewTranslator())
	translators.Merge(jmx.NewTranslators(conf))
	translators.Merge(registry)
	pipelines, err := pipelinetranslator.NewTranslator(translators).Translate(conf)
	if err != nil {
		translators.Set(nop.NewTranslator())
		pipelines, err = pipelinetranslator.NewTranslator(translators).Translate(conf)
		if err != nil {
			return nil, err
		}
	}
	// ECS is not in scope for entity association, so we only add the entity store in non ECS platforms
	if !ecsutil.GetECSUtilSingleton().IsECS() {
		pipelines.Translators.Extensions.Set(entitystore.NewTranslator())
	}
	if context.CurrentContext().KubernetesMode() != "" {
		pipelines.Translators.Extensions.Set(server.NewTranslator())
	}

	cfg := &otelcol.Config{
		Receivers:  map[component.ID]component.Config{},
		Exporters:  map[component.ID]component.Config{},
		Processors: map[component.ID]component.Config{},
		Extensions: map[component.ID]component.Config{},
		Service: service.Config{
			Telemetry: telemetry.Config{
				Logs:    getLoggingConfig(conf),
				Metrics: telemetry.MetricsConfig{Level: configtelemetry.LevelNone},
				Traces:  telemetry.TracesConfig{Level: configtelemetry.LevelNone},
			},
			Pipelines:  pipelines.Pipelines,
			Extensions: pipelines.Translators.Extensions.Keys(),
		},
	}
	if err = build(conf, cfg, pipelines.Translators); err != nil {
		return nil, fmt.Errorf("unable to build components in pipeline: %w", err)
	}
	if err = cfg.Validate(); err != nil {
		return nil, fmt.Errorf("invalid otel config: %w", err)
	}
	return cfg, nil
}