// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Diagnostics; using System.Diagnostics.Metrics; using System.Reflection; namespace Microsoft.Teams.Core.Diagnostics; /// /// Singletons for the SDK's , , and instruments. /// Internal to Microsoft.Teams.Core; visible to Microsoft.Teams.Apps /// and Microsoft.Teams.Apps.BotBuilder via InternalsVisibleTo. /// internal static class Telemetry { private const string s_version = ThisAssembly.NuGetPackageVersion; public static readonly ActivitySource Source = new(CoreTelemetryNames.ActivitySourceName, s_version); public static readonly Meter Meter = new(CoreTelemetryNames.MeterName, s_version); public static readonly Counter ActivitiesReceived = Meter.CreateCounter("teams.activities.received", description: "Total activities received by the bot."); public static readonly Histogram TurnDuration = Meter.CreateHistogram("teams.turn.duration", unit: "ms", description: "Duration of full turn processing."); public static readonly Counter HandlerErrors = Meter.CreateCounter("teams.handler.errors", description: "Total exceptions thrown during turn processing."); public static readonly Histogram MiddlewareDuration = Meter.CreateHistogram("teams.middleware.duration", unit: "ms", description: "Duration of individual middleware execution."); public static readonly Counter OutboundCalls = Meter.CreateCounter("teams.outbound.calls", description: "Total outbound Bot Service API calls."); public static readonly Counter OutboundErrors = Meter.CreateCounter("teams.outbound.errors", description: "Total outbound Bot Service API call errors."); // Span name constants — kept here so callers don't drift on naming. public static class Spans { public const string Turn = "turn"; public const string Middleware = "middleware"; public const string AuthOutbound = "auth.outbound"; public const string ConversationClient = "conversation_client"; } public static class Tags { public const string ActivityType = "activity.type"; public const string ActivityId = "activity.id"; public const string ConversationId = "conversation.id"; public const string ChannelId = "channel.id"; public const string BotId = "bot.id"; public const string ServiceUrl = "service.url"; public const string MiddlewareName = "middleware.name"; public const string MiddlewareIndex = "middleware.index"; public const string AuthFlow = "auth.flow"; public const string AuthScope = "auth.scope"; public const string Operation = "operation"; } public static class Operations { public const string SendActivity = "sendActivity"; public const string UpdateActivity = "updateActivity"; public const string DeleteActivity = "deleteActivity"; } }