From a60bee337c14cdbc97bc4ce81bc5af879db0bc02 Mon Sep 17 00:00:00 2001 From: Zhiyuan Liang Date: Wed, 15 Jan 2025 14:41:12 +0800 Subject: [PATCH 1/2] avoid using boolean.ToString and enum.ToString --- .../ApplicationInsightsEventPublisher.cs | 36 ++++++++++++++++++- .../FeatureManager.cs | 1 + 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs b/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs index 4699c543..3e880d08 100644 --- a/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs +++ b/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs @@ -51,7 +51,41 @@ private void HandleFeatureFlagEvent(ActivityEvent activityEvent) foreach (var tag in activityEvent.Tags) { - properties[tag.Key] = tag.Value?.ToString(); + // FeatureEvaluation event schema: https://github.com/microsoft/FeatureManagement/blob/main/Schema/FeatureEvaluationEvent/FeatureEvaluationEvent.v1.0.0.schema.json + if (tag.Key == "VariantAssignmentReason" && tag.Value is VariantAssignmentReason reason) + { + switch (reason) + { + case VariantAssignmentReason.None: + properties[tag.Key] = "None"; + break; + case VariantAssignmentReason.DefaultWhenDisabled: + properties[tag.Key] = "DefaultWhenDisabled"; + break; + case VariantAssignmentReason.DefaultWhenEnabled: + properties[tag.Key] = "DefaultWhenEnabled"; + break; + case VariantAssignmentReason.User: + properties[tag.Key] = "User"; + break; + case VariantAssignmentReason.Group: + properties[tag.Key] = "Group"; + break; + case VariantAssignmentReason.Percentile: + properties[tag.Key] = "Percentile"; + break; + default: + throw new ArgumentOutOfRangeException(nameof(activityEvent), "The variant assignment reason is unrecognizable."); + } + } + else if (tag.Key == "Enabled" && tag.Value is bool enabled) + { + properties[tag.Key] = enabled ? "True" : "False"; + } + else + { + properties[tag.Key] = tag.Value?.ToString(); + } } _telemetryClient.TrackEvent("FeatureEvaluation", properties); diff --git a/src/Microsoft.FeatureManagement/FeatureManager.cs b/src/Microsoft.FeatureManagement/FeatureManager.cs index dfe794ec..a066078f 100644 --- a/src/Microsoft.FeatureManagement/FeatureManager.cs +++ b/src/Microsoft.FeatureManagement/FeatureManager.cs @@ -380,6 +380,7 @@ private void AddEvaluationActivityEvent(EvaluationEvent evaluationEvent) Debug.Assert(evaluationEvent != null); Debug.Assert(evaluationEvent.FeatureDefinition != null); + // FeatureEvaluation event schema: https://github.com/microsoft/FeatureManagement/blob/main/Schema/FeatureEvaluationEvent/FeatureEvaluationEvent.v1.0.0.schema.json var tags = new ActivityTagsCollection() { { "FeatureName", evaluationEvent.FeatureDefinition.Name }, From b50a1a6f0064e4464e0c12480a2a2a9168623b39 Mon Sep 17 00:00:00 2001 From: zhiyuanliang Date: Thu, 16 Jan 2025 11:27:44 +0800 Subject: [PATCH 2/2] update --- .../ApplicationInsightsEventPublisher.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs b/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs index 3e880d08..594b04e5 100644 --- a/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs +++ b/src/Microsoft.FeatureManagement.Telemetry.ApplicationInsights/ApplicationInsightsEventPublisher.cs @@ -52,7 +52,7 @@ private void HandleFeatureFlagEvent(ActivityEvent activityEvent) foreach (var tag in activityEvent.Tags) { // FeatureEvaluation event schema: https://github.com/microsoft/FeatureManagement/blob/main/Schema/FeatureEvaluationEvent/FeatureEvaluationEvent.v1.0.0.schema.json - if (tag.Key == "VariantAssignmentReason" && tag.Value is VariantAssignmentReason reason) + if (tag.Value is VariantAssignmentReason reason) { switch (reason) { @@ -78,9 +78,9 @@ private void HandleFeatureFlagEvent(ActivityEvent activityEvent) throw new ArgumentOutOfRangeException(nameof(activityEvent), "The variant assignment reason is unrecognizable."); } } - else if (tag.Key == "Enabled" && tag.Value is bool enabled) + else if (tag.Value is bool val) { - properties[tag.Key] = enabled ? "True" : "False"; + properties[tag.Key] = val ? "True" : "False"; } else {