Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
changes:
- section: "Other Changes"
description: "AzureBackup: emit AzSubscriptionGuid telemetry tag from each tool so per-subscription telemetry works in namespace server mode."
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, "status-check");

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, "scan");

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, string.IsNullOrEmpty(options.Job) ? "list" : "single");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultAndWorkloadTags(context.Activity, options.VaultType, options.WorkloadType);

var validation = Services.Policy.PolicyCreateValidator.Validate(options);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, string.IsNullOrEmpty(options.Policy) ? "list" : "single");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultAndWorkloadTags(context.Activity, options.VaultType ?? "rsv", options.WorkloadType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, string.IsNullOrEmpty(options.ProtectedItem) ? "list" : "single");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.DatasourceType, AzureBackupTelemetryTags.NormalizeWorkloadType(options.DatasourceType));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, string.IsNullOrEmpty(options.RecoveryPoint) ? "list" : "single");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
_lastVaultType = options.VaultType;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);
context.Activity?.AddTag(AzureBackupTelemetryTags.OperationScope, string.IsNullOrEmpty(options.Vault) ? "list" : "single");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

var options = BindOptions(parseResult);

AzureBackupTelemetryTags.AddSubscriptionTag(context.Activity, options.Subscription);
AzureBackupTelemetryTags.AddVaultTags(context.Activity, options.VaultType);

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@ public static class AzureBackupTelemetryTags
public static readonly string DatasourceType = AddPrefix("DatasourceType");
public static readonly string OperationScope = AddPrefix("OperationScope");

// Unprefixed tag name shared with Microsoft.Mcp.Core's AzureTagName.SubscriptionGuid.
// Duplicated here as a string literal because AzureTagName is internal to that assembly.
// Emitted directly from each AzureBackup tool to ensure per-subscription telemetry is
// captured even in namespace server mode, where the central McpRuntime tag emission
// does not see the nested `subscription` parameter.
public const string SubscriptionGuid = "AzSubscriptionGuid";

/// <summary>
/// Adds the AzSubscriptionGuid tag to the activity. Matches McpRuntime.CallToolHandler
/// behavior by emitting any non-null subscription value (including empty string).
/// </summary>
public static void AddSubscriptionTag(Activity? activity, string? subscription)
{
if (activity is null || subscription is null)
{
return;
}

activity.SetTag(SubscriptionGuid, subscription);
}

/// <summary>
/// Normalizes the vault type to canonical lowercase values (rsv/dpp).
/// Returns "auto" when the input is null or empty (user didn't specify --vault-type).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,58 @@ public void TagConstants_HaveCorrectPrefix()
Assert.Equal("azurebackup/DatasourceType", AzureBackupTelemetryTags.DatasourceType);
Assert.Equal("azurebackup/OperationScope", AzureBackupTelemetryTags.OperationScope);
}

[Fact]
public void SubscriptionGuid_MatchesGlobalAzureTagName()
{
// Must stay in sync with Microsoft.Mcp.Core's internal AzureTagName.SubscriptionGuid.
Assert.Equal("AzSubscriptionGuid", AzureBackupTelemetryTags.SubscriptionGuid);
}
Comment thread
alzimmermsft marked this conversation as resolved.

[Fact]
public void AddSubscriptionTag_NullActivity_DoesNotThrow()
{
AzureBackupTelemetryTags.AddSubscriptionTag(null, "00000000-0000-0000-0000-000000000000");
}

[Fact]
public void AddSubscriptionTag_NullSubscription_DoesNotEmitTag()
{
using var listener = new ActivityListener
{
ShouldListenTo = _ => true,
Sample = (ref ActivityCreationOptions<ActivityContext> _) => ActivitySamplingResult.AllData,
};
ActivitySource.AddActivityListener(listener);

using var source = new ActivitySource("test");
using var activity = source.StartActivity("test-op");
Assert.NotNull(activity);

AzureBackupTelemetryTags.AddSubscriptionTag(activity, null);

Assert.Null(activity.GetTagItem(AzureBackupTelemetryTags.SubscriptionGuid));
}

[Theory]
[InlineData("00000000-0000-0000-0000-000000000000")]
[InlineData("my-subscription-name")]
[InlineData("")]
public void AddSubscriptionTag_NonNullValue_EmitsTag(string subscription)
{
using var listener = new ActivityListener
{
ShouldListenTo = _ => true,
Sample = (ref ActivityCreationOptions<ActivityContext> _) => ActivitySamplingResult.AllData,
};
ActivitySource.AddActivityListener(listener);

using var source = new ActivitySource("test");
using var activity = source.StartActivity("test-op");
Assert.NotNull(activity);

AzureBackupTelemetryTags.AddSubscriptionTag(activity, subscription);

Assert.Equal(subscription, activity.GetTagItem(AzureBackupTelemetryTags.SubscriptionGuid));
}
}