Skip to content
Merged
Changes from 1 commit
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,72 @@
using Microsoft.ApplicationInsights;
Comment thread
rossgrambo marked this conversation as resolved.
Outdated
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 ApplicationInsightsTelemetryExtensions
Comment thread
rossgrambo marked this conversation as resolved.
Outdated
{
/// <summary>
/// Extension method to track an event with 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.Add("TargetingId", targetingContext.UserId);
Comment thread
rossgrambo marked this conversation as resolved.
Outdated

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

/// <summary>
/// Extension method to track an EventTelemetry with TargetingContext.
Comment thread
rossgrambo marked this conversation as resolved.
Outdated
/// </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 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.Add("TargetingId", targetingContext.UserId);

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

/// <summary>
/// Extension method to track a MetricTelemetry with TargetingContext.
Comment thread
rossgrambo marked this conversation as resolved.
Outdated
/// </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);
}
}
}