Skip to content
Merged
Changes from 3 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,75 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.FeatureManagement.FeatureFilters;

namespace Microsoft.FeatureManagement.Telemetry.ApplicationInsights
{
/// <summary>
/// Provides extension methods for tracking events with TargetingContext.

@zhiyuanliang-ms zhiyuanliang-ms Jan 9, 2024

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Provides extension methods for tracking events with TargetingContext.
/// Provides extension methods for tracking events with <see cref="TargetingContext"/>.

The same suggestion for other occurrences of the word "TargetingContext"

@zhiyuanliang-ms zhiyuanliang-ms Jan 9, 2024

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in #347 (comment)
I understand we will use TargetingContext instead of ITargetingContext here. But I am wondering why we use ITargetingContext for ContextualTargetingFilter. It seems like ContextualTargetingFilter is the only place we use ITargetingContext.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Contextual filters describe an interface that they handle. This allows a single app context type to satisfy multiple contextual feature filters.

@rossgrambo rossgrambo Jan 9, 2024

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Removing my comment in favor of Jimmy's ^

/// </summary>
public static class TelemetryClientExtensions
{
/// <summary>
/// Extension method to track an event with <see cref="TargetingContext"/>.
/// </summary>
public static void TrackEvent(this TelemetryClient telemetryClient, string eventName, TargetingContext targetingContext, IDictionary<string, string> properties = null, IDictionary<string, double> metrics = null)
{
if (properties == null)
{
properties = new Dictionary<string, string>();
}

properties["TargetingId"] = targetingContext.UserId;

telemetryClient.TrackEvent(eventName, properties, metrics);
}

/// <summary>
/// Extension method to track an <see cref="EventTelemetry"/> with <see cref="TargetingContext"/>.
/// </summary>
public static void TrackEvent(this TelemetryClient telemetryClient, EventTelemetry telemetry, TargetingContext targetingContext)
{
if (telemetry == null)
Comment thread
rossgrambo marked this conversation as resolved.
{
telemetry = new EventTelemetry();
}

telemetry.Properties["TargetingId"] = targetingContext.UserId;
Comment thread
rossgrambo marked this conversation as resolved.

telemetryClient.TrackEvent(telemetry);
}

/// <summary>
/// Extension method to track a metric with <see cref="TargetingContext"/>.
/// </summary>
public static void TrackMetric(this TelemetryClient telemetryClient, string name, double value, TargetingContext targetingContext, IDictionary<string, string> properties = null)
Comment thread
rossgrambo marked this conversation as resolved.
Outdated
{
if (properties == null)
{
properties = new Dictionary<string, string>();
}

properties["TargetingId"] = targetingContext.UserId;

telemetryClient.TrackMetric(name, value, properties);
}

/// <summary>
/// Extension method to track a <see cref="MetricTelemetry"/> with <see cref="TargetingContext"/>.
/// </summary>
public static void TrackMetric(this TelemetryClient telemetryClient, MetricTelemetry telemetry, TargetingContext targetingContext)
{
if (telemetry == null)
{
telemetry = new MetricTelemetry();
}

telemetry.Properties["TargetingId"] = targetingContext.UserId;

telemetryClient.TrackMetric(telemetry);
}
}
}