in src/Activities/Internal/ActivityMetricsSender.cs [35:73]
public void SendActivityMetric(Activity activity)
{
double durationMs = activity.Duration.TotalMilliseconds;
int tagsCount = s_customTags.Length + activity.TagObjects.Count() + activity.Baggage.Count();
KeyValuePair<string, object?>[] tags = m_arrayPool.Rent(tagsCount);
int index = 0;
foreach (Func<ActivityMetricsSender, Activity, KeyValuePair<string, object?>> getter in s_customTags)
{
tags[index++] = getter(this, activity);
}
foreach (KeyValuePair<string, string?> baggage in activity.Baggage)
{
tags[index++] = CreatePair(baggage.Key, baggage.Value);
}
foreach (KeyValuePair<string, object?> tag in activity.TagObjects)
{
tags[index++] = tag;
}
ReadOnlySpan<KeyValuePair<string, object?>> tagsSpan = MemoryExtensions.AsSpan(tags, 0, tagsCount);
if (activity.IsHealthCheck())
{
m_healthCheckActivityCounter.Add(durationMs, tagsSpan);
}
else
{
m_activityCounter.Add(durationMs, tagsSpan);
}
m_arrayPool.Return(tags, clearArray: true);
}