func()

in plugins/processors/gpuattributes/processor.go [101:151]


func (d *gpuAttributesProcessor) processMetricAttributes(m pmetric.Metric) {
	// only decorate GPU metrics
	isGpuMetric := strings.Contains(m.Name(), gpuMetricIdentifier)
	isNeuronMetric := d.awsNeuronMetricChecker.IsProcessedNeuronMetric(m.Name())
	if !isNeuronMetric && !isGpuMetric {
		return
	}

	labelFilter := map[string]map[string]interface{}{}
	if isGpuMetric {
		if strings.HasPrefix(m.Name(), containerMetricPrefix) {
			labelFilter = metricFilters.ContainerGpuLabelFilter
		} else if strings.HasPrefix(m.Name(), podMetricPrefix) {
			labelFilter = metricFilters.PodGpuLabelFilter
		} else if strings.HasPrefix(m.Name(), nodeMetricPrefix) {
			labelFilter = metricFilters.NodeGpuLabelFilter
		}
	} else if isNeuronMetric {
		if strings.HasPrefix(m.Name(), containerMetricPrefix) {
			labelFilter = metricFilters.ContainerNeuronLabelFilter
		} else if strings.HasPrefix(m.Name(), podMetricPrefix) {
			labelFilter = metricFilters.PodNeuronLabelFilter
		} else if strings.HasPrefix(m.Name(), nodeMetricPrefix) {
			labelFilter = metricFilters.NodeNeuronLabelFilter
		}

		if strings.Contains(m.Name(), "_neurondevice_hw") {
			if kubernetesMap, ok := labelFilter[internal.Kubernetes]; ok {
				// cloning is done to avoid modifying the original label filters
				labelFilter = maps.Clone(labelFilter)
				kubernetesMap := maps.Clone(kubernetesMap)
				delete(kubernetesMap, "labels")
				labelFilter[internal.Kubernetes] = kubernetesMap
			}
		}
	}

	var dps pmetric.NumberDataPointSlice
	switch m.Type() {
	case pmetric.MetricTypeGauge:
		dps = m.Gauge().DataPoints()
	case pmetric.MetricTypeSum:
		dps = m.Sum().DataPoints()
	default:
		d.logger.Debug("Ignore unknown metric type", zap.String(containerinsightscommon.MetricType, m.Type().String()))
	}

	for i := 0; i < dps.Len(); i++ {
		d.filterAttributes(dps.At(i).Attributes(), labelFilter)
	}
}