func spanMetricsToAPMEvent()

in aggregators/converter.go [829:877]


func spanMetricsToAPMEvent(
	key *aggregationpb.SpanAggregationKey,
	metrics *aggregationpb.SpanMetrics,
	baseEvent *modelpb.APMEvent,
	intervalStr string,
) {
	var target *modelpb.ServiceTarget
	if key.TargetName != "" || key.TargetType != "" {
		target = &modelpb.ServiceTarget{}
		target.Type = key.TargetType
		target.Name = key.TargetName
	}
	if baseEvent.Service == nil {
		baseEvent.Service = &modelpb.Service{}
	}
	baseEvent.Service.Target = target

	if baseEvent.Metricset == nil {
		baseEvent.Metricset = &modelpb.Metricset{}
	}
	baseEvent.Metricset.Name = spanMetricsetName
	baseEvent.Metricset.DocCount = uint64(math.Round(metrics.Count))
	baseEvent.Metricset.Interval = intervalStr

	if baseEvent.Span == nil {
		baseEvent.Span = &modelpb.Span{}
	}
	baseEvent.Span.Name = key.SpanName

	if baseEvent.Span.DestinationService == nil {
		baseEvent.Span.DestinationService = &modelpb.DestinationService{}
	}
	baseEvent.Span.DestinationService.Resource = key.Resource
	if baseEvent.Span.DestinationService.ResponseTime == nil {
		baseEvent.Span.DestinationService.ResponseTime =
			&modelpb.AggregatedDuration{}
	}
	baseEvent.Span.DestinationService.ResponseTime.Count =
		uint64(math.Round(metrics.Count))
	baseEvent.Span.DestinationService.ResponseTime.Sum =
		uint64(math.Round(metrics.Sum))

	if key.Outcome != "" {
		if baseEvent.Event == nil {
			baseEvent.Event = &modelpb.Event{}
		}
		baseEvent.Event.Outcome = key.Outcome
	}
}