Skip to content

Commit dad175d

Browse files
authored
fix: add missing variant dimension in MetricsHook metrics (#742)
add variant handling in MetricsHook and corresponding tests Signed-off-by: André Silva <2493377+askpt@users.noreply.github.com>
1 parent 178f836 commit dad175d

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

src/OpenFeature/Hooks/MetricsHook.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ public override ValueTask AfterAsync<T>(HookContext<T> context, FlagEvaluationDe
6868
{ TelemetryConstants.Reason, details.Reason ?? Reason.Unknown.ToString() }
6969
};
7070

71+
if (details.Variant != null)
72+
{
73+
tagList.Add(TelemetryConstants.Variant, details.Variant);
74+
}
75+
7176
this.AddCustomDimensions(ref tagList);
7277
this.AddFlagMetadataDimensions(details.FlagMetadata, ref tagList);
7378

test/OpenFeature.Tests/Hooks/MetricsHookTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,35 @@ await metricsHook.AfterAsync(ctx,
3232
Assert.Equal("my-flag", measurements.Tags["feature_flag.key"]);
3333
Assert.Equal("my-provider", measurements.Tags["feature_flag.provider.name"]);
3434
Assert.Equal("STATIC", measurements.Tags["feature_flag.result.reason"]);
35+
Assert.Equal("default", measurements.Tags["feature_flag.result.variant"]);
36+
}
37+
38+
[Fact]
39+
public async Task Without_Variant_After_Test_Does_Not_Include_Variant()
40+
{
41+
// Arrange
42+
var metricsHook = new MetricsHook();
43+
44+
using var collector = new MetricCollector<long>(metricsHook._evaluationSuccessCounter);
45+
46+
var evaluationContext = EvaluationContext.Empty;
47+
var ctx = new HookContext<string>("my-flag", "foo", Constant.FlagValueType.String,
48+
new ClientMetadata("my-client", "1.0"), new Metadata("my-provider"), evaluationContext);
49+
50+
// Act
51+
await metricsHook.AfterAsync(ctx,
52+
new FlagEvaluationDetails<string>("my-flag", "foo", Constant.ErrorType.None, "STATIC", variant: null),
53+
new Dictionary<string, object>()).ConfigureAwait(true);
54+
55+
var measurements = collector.LastMeasurement;
56+
57+
// Assert
58+
Assert.NotNull(measurements);
59+
60+
Assert.Equal("my-flag", measurements.Tags["feature_flag.key"]);
61+
Assert.Equal("my-provider", measurements.Tags["feature_flag.provider.name"]);
62+
Assert.Equal("STATIC", measurements.Tags["feature_flag.result.reason"]);
63+
Assert.DoesNotContain("feature_flag.result.variant", measurements.Tags.Keys);
3564
}
3665

3766
[Fact]

0 commit comments

Comments
 (0)