Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Expand Up @@ -2,6 +2,8 @@
// Licensed under the MIT License.

using System;
using System.Security.Cryptography;
using System.Text;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
Expand Down Expand Up @@ -51,20 +53,31 @@ public void Initialize(ITelemetry telemetry)
var channelId = (string)body["channelId"];

var conversationId = string.Empty;
var sessionId = string.Empty;
var conversation = body["conversation"];
if (!string.IsNullOrWhiteSpace(conversation?.ToString()))
{
conversationId = (string)conversation["id"];

using (var sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(conversationId));
sessionId = Convert.ToBase64String(bytes);
}
}

// Set the user id on the Application Insights telemetry item.
telemetry.Context.User.Id = channelId + userId;

// Set the session id on the Application Insights telemetry item.
telemetry.Context.Session.Id = conversationId;
// Hashed ID is used due to max session ID length for App Insights session Id
telemetry.Context.Session.Id = sessionId;

var telemetryProperties = ((ISupportProperties)telemetry).Properties;

// Set the conversation id
telemetryProperties.Add("conversationId", conversationId);

// Set the activity id https://github.com/Microsoft/botframework-obi/blob/master/botframework-activity/botframework-activity.md#id
if (!telemetryProperties.ContainsKey("activityId"))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT License.

using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using Microsoft.ApplicationInsights.Channel;
Expand Down Expand Up @@ -43,29 +44,41 @@ public void Initialize(ITelemetry telemetry)
var channelId = (string)body["channelId"];

var conversationId = string.Empty;
var sessionId = string.Empty;
var conversation = body["conversation"];

if (!string.IsNullOrWhiteSpace(conversation?.ToString()))
{
conversationId = (string)conversation["id"];

using (var sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(conversationId));
sessionId = System.Convert.ToBase64String(bytes);
}
}

var context = telemetry.Context;

// Set the user id on the Application Insights telemetry item.
context.User.Id = channelId + userId;

// Set the session id on the Application Insights telemetry item.
context.Session.Id = conversationId;
// Set the session id on the Application Insights telemetry item using hashed conversation Id.
// Hashed ID is used due to max session ID length for App Insights session Id
context.Session.Id = sessionId;

var telemetryProperties = ((ISupportProperties)telemetry).Properties;

// Set the activity id https://github.com/Microsoft/botframework-obi/blob/master/botframework-activity/botframework-activity.md#id
// Set the conversation id
telemetryProperties.Add("conversationId", conversationId);

// Set the activity id https://github.com/microsoft/botframework-obi/blob/master/protocols/botframework-activity/botframework-activity.md#id
telemetryProperties.Add("activityId", (string)body["id"]);

// Set the channel id https://github.com/Microsoft/botframework-obi/blob/master/botframework-activity/botframework-activity.md#channel-id
// Set the channel id https://github.com/microsoft/botframework-obi/blob/master/protocols/botframework-activity/botframework-activity.md#channel-id
telemetryProperties.Add("channelId", (string)channelId);

// Set the activity type https://github.com/Microsoft/botframework-obi/blob/master/botframework-activity/botframework-activity.md#type
// Set the activity type https://github.com/microsoft/botframework-obi/blob/master/protocols/botframework-activity/botframework-activity.md#type
telemetryProperties.Add("activityType", (string)body["type"]);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Channel;
Expand Down Expand Up @@ -44,6 +46,7 @@ public void VerifyAllTelemtryPropoerties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -63,7 +66,8 @@ public void VerifyAllTelemtryPropoerties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
Assert.IsTrue(telem.Properties["hello"] == "value");
Assert.IsTrue(telem.Metrics["metric"] == 0.6);
Expand Down Expand Up @@ -93,6 +97,7 @@ public void VerifyOverriddenProperties()
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var activityID = "ACTIVITYID";
var sessionId = GetHashedConversationId(conversationID);
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
activity.ChannelId = channelID;
Expand Down Expand Up @@ -130,7 +135,7 @@ public void VerifyOverriddenProperties()
var telem = sentItems[0] as EventTelemetry;
Assert.IsTrue(telem != null);

Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);

// The TelemetryInitializer honors being overridden
Expand All @@ -142,6 +147,7 @@ public void VerifyOverriddenProperties()
Assert.IsFalse(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Properties["activityType"] == activityTypeValue);
Assert.IsFalse(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Metrics["metric"] == 0.6);
}

Expand All @@ -168,6 +174,7 @@ public void VerifyTraceProperties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -187,7 +194,8 @@ public void VerifyTraceProperties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand All @@ -214,6 +222,7 @@ public void VerifyRequestProperties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -233,7 +242,8 @@ public void VerifyRequestProperties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand All @@ -260,6 +270,7 @@ public void VerifyDependencyProperties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -279,7 +290,8 @@ public void VerifyDependencyProperties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand Down Expand Up @@ -416,5 +428,14 @@ public async Task Telemetry_InitializerMiddleware_LogActivities_Disabled()
Assert.IsTrue(mockHttpContextAccessor.Object.HttpContext.Items.Count == 1);
Assert.AreEqual(mockTelemetryClient.Invocations.Count, 0);
}

private string GetHashedConversationId(string conversationID)
{
using (var sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(conversationID));
return Convert.ToBase64String(bytes);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Channel;
Expand Down Expand Up @@ -43,6 +45,7 @@ public void VerifyAllTelemtryPropoerties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -62,7 +65,8 @@ public void VerifyAllTelemtryPropoerties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
Assert.IsTrue(telem.Properties["hello"] == "value");
Assert.IsTrue(telem.Metrics["metric"] == 0.6);
Expand Down Expand Up @@ -90,6 +94,7 @@ public void VerifyTracePropoerties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -109,7 +114,8 @@ public void VerifyTracePropoerties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand All @@ -135,6 +141,7 @@ public void VerifyRequestPropoerties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -154,7 +161,8 @@ public void VerifyRequestPropoerties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand All @@ -180,6 +188,7 @@ public void VerifyDependencyProperties()
var fromID = "FROMID";
var channelID = "CHANNELID";
var conversationID = "CONVERSATIONID";
var sessionId = GetHashedConversationId(conversationID);
var activityID = "ACTIVITYID";
var activity = Activity.CreateMessageActivity();
activity.From = new ChannelAccount(fromID);
Expand All @@ -199,7 +208,8 @@ public void VerifyDependencyProperties()
Assert.IsTrue(telem.Properties["activityId"] == activityID);
Assert.IsTrue(telem.Properties["activityType"] == "message");
Assert.IsTrue(telem.Properties["channelId"] == "CHANNELID");
Assert.IsTrue(telem.Context.Session.Id == conversationID);
Assert.IsTrue(telem.Properties["conversationId"] == conversationID);
Assert.IsTrue(telem.Context.Session.Id == sessionId);
Assert.IsTrue(telem.Context.User.Id == channelID + fromID);
}

Expand Down Expand Up @@ -247,5 +257,14 @@ public void InvalidMessage_NoConversation()
Assert.IsTrue(properties.Properties["hello"] == "value");
Assert.IsTrue(telem.Metrics["metric"] == 0.6);
}

private string GetHashedConversationId(string conversationID)
{
using (var sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(conversationID));
return Convert.ToBase64String(bytes);
}
}
}
}