// 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";
}
}