func()

in translator/translate/otel/pipeline/jmx/translator.go [67:133]


func (t *translator) Translate(conf *confmap.Conf) (*common.ComponentTranslators, error) {
	if conf == nil || !conf.IsSet(common.JmxConfigKey) {
		return nil, &common.MissingKeyError{ID: t.ID(), JsonKey: common.JmxConfigKey}
	}

	if !hasMeasurements(conf, t.Index()) {
		baseKey := common.JmxConfigKey
		if t.Index() != -1 {
			baseKey = fmt.Sprintf("%s[%d]", baseKey, t.Index())
		}
		return nil, &common.MissingKeyError{ID: t.ID(), JsonKey: common.ConfigKey(baseKey, placeholderTarget, common.MeasurementKey)}
	}

	translators := common.ComponentTranslators{
		Receivers: common.NewTranslatorMap[component.Config, component.ID](),
		Processors: common.NewTranslatorMap(
			filterprocessor.NewTranslator(common.WithName(common.PipelineNameJmx), common.WithIndex(t.Index())),
		),
		Exporters:  common.NewTranslatorMap[component.Config, component.ID](),
		Extensions: common.NewTranslatorMap[component.Config, component.ID](),
	}

	if context.CurrentContext().RunInContainer() {
		translators.Receivers.Set(otlp.NewTranslator(common.WithName(common.PipelineNameJmx)))
		translators.Processors.Set(metricstransformprocessor.NewTranslatorWithName(common.JmxKey))
		if hasAppendDimensions(conf, t.Index()) {
			translators.Processors.Set(resourceprocessor.NewTranslator(common.WithName(common.PipelineNameJmx), common.WithIndex(t.Index())))
		}
		translators.Processors.Set(transformprocessor.NewTranslatorWithName(common.JmxKey + "/drop"))
	} else {
		translators.Receivers.Set(jmx.NewTranslator(jmx.WithIndex(t.Index())))
		translators.Processors.Set(resourceprocessor.NewTranslator(common.WithName(common.PipelineNameJmx)))
	}

	mdt := metricsdecorator.NewTranslator(
		metricsdecorator.WithName(common.PipelineNameJmx),
		metricsdecorator.WithIndex(t.Index()),
		metricsdecorator.WithConfigKey(common.JmxConfigKey),
	)
	if mdt.IsSet(conf) {
		translators.Processors.Set(mdt)
	}

	if conf.IsSet(common.ConfigKey(common.MetricsKey, common.AppendDimensionsKey)) {
		translators.Processors.Set(ec2taggerprocessor.NewTranslator())
	}

	switch t.Destination() {
	case common.DefaultDestination, common.CloudWatchKey:
		translators.Processors.Set(cumulativetodeltaprocessor.NewTranslator(common.WithName(common.PipelineNameJmx), cumulativetodeltaprocessor.WithConfigKeys(common.JmxConfigKey)))
		translators.Exporters.Set(awscloudwatch.NewTranslator())
		translators.Extensions.Set(agenthealth.NewTranslatorWithStatusCode(agenthealth.MetricsName, []string{agenthealth.OperationPutMetricData}, true))
	case common.AMPKey:
		translators.Processors.Set(batchprocessor.NewTranslatorWithNameAndSection(t.name, common.MetricsKey))
		if conf.IsSet(common.MetricsAggregationDimensionsKey) {
			translators.Processors.Set(rollupprocessor.NewTranslator())
		}
		// prometheusremotewrite doesn't support delta metrics so convert them to cumulative metrics
		translators.Processors.Set(deltatocumulativeprocessor.NewTranslator(common.WithName(t.name)))
		translators.Exporters.Set(prometheusremotewrite.NewTranslatorWithName(common.AMPKey))
		translators.Extensions.Set(sigv4auth.NewTranslator())
	default:
		return nil, fmt.Errorf("pipeline (%s) does not support destination (%s) in configuration", t.name, t.Destination())
	}

	return &translators, nil
}