in aggregators/converter.go [618:782]
func txnMetricsToAPMEvent(
key *aggregationpb.TransactionAggregationKey,
metrics *aggregationpb.TransactionMetrics,
baseEvent *modelpb.APMEvent,
intervalStr string,
) {
histogram := hdrhistogram.New()
histogramFromProto(histogram, metrics.Histogram)
totalCount, counts, values := histogram.Buckets()
eventSuccessCount := &modelpb.SummaryMetric{}
switch key.EventOutcome {
case "success":
eventSuccessCount.Count = totalCount
eventSuccessCount.Sum = float64(totalCount)
case "failure":
eventSuccessCount.Count = totalCount
case "unknown":
// Keep both Count and Sum as 0.
}
transactionDurationSummary := &modelpb.SummaryMetric{}
transactionDurationSummary.Count = totalCount
for i, v := range values {
transactionDurationSummary.Sum += v * float64(counts[i])
}
if baseEvent.Transaction == nil {
baseEvent.Transaction = &modelpb.Transaction{}
}
baseEvent.Transaction.Name = key.TransactionName
baseEvent.Transaction.Type = key.TransactionType
baseEvent.Transaction.Result = key.TransactionResult
baseEvent.Transaction.Root = key.TraceRoot
baseEvent.Transaction.DurationSummary = transactionDurationSummary
baseEvent.Transaction.DurationHistogram = &modelpb.Histogram{}
baseEvent.Transaction.DurationHistogram.Counts = counts
baseEvent.Transaction.DurationHistogram.Values = values
if baseEvent.Metricset == nil {
baseEvent.Metricset = &modelpb.Metricset{}
}
baseEvent.Metricset.Name = txnMetricsetName
baseEvent.Metricset.DocCount = totalCount
baseEvent.Metricset.Interval = intervalStr
if baseEvent.Event == nil {
baseEvent.Event = &modelpb.Event{}
}
baseEvent.Event.Outcome = key.EventOutcome
baseEvent.Event.SuccessCount = eventSuccessCount
if key.ContainerId != "" {
if baseEvent.Container == nil {
baseEvent.Container = &modelpb.Container{}
}
baseEvent.Container.Id = key.ContainerId
}
if key.KubernetesPodName != "" {
if baseEvent.Kubernetes == nil {
baseEvent.Kubernetes = &modelpb.Kubernetes{}
}
baseEvent.Kubernetes.PodName = key.KubernetesPodName
}
if key.ServiceVersion != "" {
if baseEvent.Service == nil {
baseEvent.Service = &modelpb.Service{}
}
baseEvent.Service.Version = key.ServiceVersion
}
if key.ServiceNodeName != "" {
if baseEvent.Service == nil {
baseEvent.Service = &modelpb.Service{}
}
if baseEvent.Service.Node == nil {
baseEvent.Service.Node = &modelpb.ServiceNode{}
}
baseEvent.Service.Node.Name = key.ServiceNodeName
}
if key.ServiceRuntimeName != "" ||
key.ServiceRuntimeVersion != "" {
if baseEvent.Service == nil {
baseEvent.Service = &modelpb.Service{}
}
if baseEvent.Service.Runtime == nil {
baseEvent.Service.Runtime = &modelpb.Runtime{}
}
baseEvent.Service.Runtime.Name = key.ServiceRuntimeName
baseEvent.Service.Runtime.Version = key.ServiceRuntimeVersion
}
if key.ServiceLanguageVersion != "" {
if baseEvent.Service == nil {
baseEvent.Service = &modelpb.Service{}
}
if baseEvent.Service.Language == nil {
baseEvent.Service.Language = &modelpb.Language{}
}
baseEvent.Service.Language.Version = key.ServiceLanguageVersion
}
if key.HostHostname != "" ||
key.HostName != "" {
if baseEvent.Host == nil {
baseEvent.Host = &modelpb.Host{}
}
baseEvent.Host.Hostname = key.HostHostname
baseEvent.Host.Name = key.HostName
}
if key.HostOsPlatform != "" {
if baseEvent.Host == nil {
baseEvent.Host = &modelpb.Host{}
}
if baseEvent.Host.Os == nil {
baseEvent.Host.Os = &modelpb.OS{}
}
baseEvent.Host.Os.Platform = key.HostOsPlatform
}
faasColdstart := nullable.Bool(key.FaasColdstart)
if faasColdstart != nullable.Nil ||
key.FaasId != "" ||
key.FaasName != "" ||
key.FaasVersion != "" ||
key.FaasTriggerType != "" {
if baseEvent.Faas == nil {
baseEvent.Faas = &modelpb.Faas{}
}
baseEvent.Faas.ColdStart = faasColdstart.ToBoolPtr()
baseEvent.Faas.Id = key.FaasId
baseEvent.Faas.Name = key.FaasName
baseEvent.Faas.Version = key.FaasVersion
baseEvent.Faas.TriggerType = key.FaasTriggerType
}
if key.CloudProvider != "" ||
key.CloudRegion != "" ||
key.CloudAvailabilityZone != "" ||
key.CloudServiceName != "" ||
key.CloudAccountId != "" ||
key.CloudAccountName != "" ||
key.CloudMachineType != "" ||
key.CloudProjectId != "" ||
key.CloudProjectName != "" {
if baseEvent.Cloud == nil {
baseEvent.Cloud = &modelpb.Cloud{}
}
baseEvent.Cloud.Provider = key.CloudProvider
baseEvent.Cloud.Region = key.CloudRegion
baseEvent.Cloud.AvailabilityZone = key.CloudAvailabilityZone
baseEvent.Cloud.ServiceName = key.CloudServiceName
baseEvent.Cloud.AccountId = key.CloudAccountId
baseEvent.Cloud.AccountName = key.CloudAccountName
baseEvent.Cloud.MachineType = key.CloudMachineType
baseEvent.Cloud.ProjectId = key.CloudProjectId
baseEvent.Cloud.ProjectName = key.CloudProjectName
}
}