in aggregators/converter.go [784:827]
func svcTxnMetricsToAPMEvent(
key *aggregationpb.ServiceTransactionAggregationKey,
metrics *aggregationpb.ServiceTransactionMetrics,
baseEvent *modelpb.APMEvent,
intervalStr string,
) {
histogram := hdrhistogram.New()
histogramFromProto(histogram, metrics.Histogram)
totalCount, counts, values := histogram.Buckets()
transactionDurationSummary := modelpb.SummaryMetric{
Count: totalCount,
}
for i, v := range values {
transactionDurationSummary.Sum += v * float64(counts[i])
}
if baseEvent.Metricset == nil {
baseEvent.Metricset = &modelpb.Metricset{}
}
baseEvent.Metricset.Name = svcTxnMetricsetName
baseEvent.Metricset.DocCount = totalCount
baseEvent.Metricset.Interval = intervalStr
if baseEvent.Transaction == nil {
baseEvent.Transaction = &modelpb.Transaction{}
}
baseEvent.Transaction.Type = key.TransactionType
baseEvent.Transaction.DurationSummary = &transactionDurationSummary
if baseEvent.Transaction.DurationHistogram == nil {
baseEvent.Transaction.DurationHistogram = &modelpb.Histogram{}
}
baseEvent.Transaction.DurationHistogram.Counts = counts
baseEvent.Transaction.DurationHistogram.Values = values
if baseEvent.Event == nil {
baseEvent.Event = &modelpb.Event{}
}
if baseEvent.Event.SuccessCount == nil {
baseEvent.Event.SuccessCount = &modelpb.SummaryMetric{}
}
baseEvent.Event.SuccessCount.Count =
uint64(math.Round(metrics.SuccessCount + metrics.FailureCount))
baseEvent.Event.SuccessCount.Sum = math.Round(metrics.SuccessCount)
}