Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
8 changes: 4 additions & 4 deletions src/OpenFeature/Telemetry/EvaluationEventBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ namespace OpenFeature.Telemetry;
/// <summary>
/// Class for creating evaluation events for feature flags.
/// </summary>
public sealed class EvaluationEventBuilder
public sealed class EvaluationEventBuilder<T>
{
private const string EventName = "feature_flag.evaluation";

/// <summary>
/// Gets the default instance of the <see cref="EvaluationEventBuilder"/>.
/// Gets the default instance of the <see cref="EvaluationEventBuilder{T}"/>.
/// </summary>
public static EvaluationEventBuilder Default { get; } = new();
public static EvaluationEventBuilder<T> Default { get; } = new();

/// <summary>
/// Creates an evaluation event based on the provided hook context and flag evaluation details.
/// </summary>
/// <param name="hookContext">The context of the hook containing flag key and provider metadata.</param>
/// <param name="details">The details of the flag evaluation including reason, variant, and metadata.</param>
/// <returns>An instance of <see cref="EvaluationEvent"/> containing the event name, attributes, and body.</returns>
public EvaluationEvent Build(HookContext<Value> hookContext, FlagEvaluationDetails<Value> details)
public static EvaluationEvent Build(HookContext<T> hookContext, FlagEvaluationDetails<T> details)
{
var attributes = new Dictionary<string, object?>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace OpenFeature.Tests.Telemetry;

public class EvaluationEventBuilderTests
{
private readonly EvaluationEventBuilder _builder = EvaluationEventBuilder.Default;
private readonly EvaluationEventBuilder<Value> _builder = EvaluationEventBuilder<Value>.Default;

[Fact]
public void Build_ShouldReturnEventWithCorrectAttributes()
Expand All @@ -25,7 +25,7 @@ public void Build_ShouldReturnEventWithCorrectAttributes()
reason: "reason", variant: "variant", flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Equal("feature_flag.evaluation", evaluationEvent.Name);
Expand Down Expand Up @@ -55,7 +55,7 @@ public void Build_ShouldHandleErrorDetails()
errorMessage: "errorMessage", reason: "reason", variant: "variant", flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Equal("general", evaluationEvent.Attributes[TelemetryConstants.ErrorCode]);
Expand All @@ -79,7 +79,7 @@ public void Build_ShouldHandleMissingVariant()
reason: "reason", variant: null, flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Null(evaluationEvent.Attributes[TelemetryConstants.Variant]);
Expand All @@ -98,7 +98,7 @@ public void Build_ShouldHandleMissingFlagMetadata()
reason: "reason", variant: "", flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Null(evaluationEvent.Attributes[TelemetryConstants.ContextId]);
Expand All @@ -122,7 +122,7 @@ public void Build_ShouldHandleMissingReason(string? reason)
reason: reason, variant: "", flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Equal(Reason.Unknown.ToLowerInvariant(), evaluationEvent.Attributes[TelemetryConstants.Reason]);
Expand All @@ -144,7 +144,7 @@ public void Build_ShouldHandleErrorWithEmptyErrorMessage(string? errorMessage)
errorMessage: errorMessage, reason: "reason", variant: "", flagMetadata: flagMetadata);

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Equal("general", evaluationEvent.Attributes[TelemetryConstants.ErrorCode]);
Expand All @@ -164,7 +164,7 @@ public void Build_ShouldIncludeValueAttributeInEvent()
reason: "reason", variant: "variant", flagMetadata: new ImmutableMetadata());

// Act
var evaluationEvent = _builder.Build(hookContext, details);
var evaluationEvent = EvaluationEventBuilder<Value>.Build(hookContext, details);

// Assert
Assert.Equal(testValue, evaluationEvent.Attributes[TelemetryConstants.Value]);
Expand Down
Loading