public void ValidateDbRemoteDependencyData() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), startTime: DateTime.UtcNow); activity.Stop(); activity.SetStatus(Status.Ok); activity.SetTag(SemanticConventions.AttributeDbSystem, "mssql"); activity.SetTag(SemanticConventions.AttributePeerService, "localhost"); // only adding test via peer.service. all possible combinations are covered in HttpHelperTests. activity.SetTag(SemanticConventions.AttributeDbStatement, "Select * from table"); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var remoteDependencyData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags); Assert.Equal(ActivityName, remoteDependencyData.Name); Assert.Equal(activity.Context.SpanId.ToHexString(), remoteDependencyData.Id); Assert.Equal("Select * from table", remoteDependencyData.Data); Assert.Null(remoteDependencyData.ResultCode); Assert.Equal(activity.Duration.ToString("c", CultureInfo.InvariantCulture), remoteDependencyData.Duration); Assert.Equal(activity.GetStatus() != Status.Error, remoteDependencyData.Success); Assert.True(remoteDependencyData.Properties.Count == 0); Assert.True(remoteDependencyData.Measurements.Count == 0); }
public void ValidateHttpRemoteDependencyData() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), startTime: DateTime.UtcNow); activity.Stop(); var httpUrl = "https://www.foo.bar/search"; activity.SetStatus(Status.Ok); activity.SetTag(SemanticConventions.AttributeHttpMethod, "GET"); activity.SetTag(SemanticConventions.AttributeHttpUrl, httpUrl); // only adding test via http.url. all possible combinations are covered in HttpHelperTests. activity.SetTag(SemanticConventions.AttributeHttpStatusCode, null); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var remoteDependencyData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags); Assert.Equal("GET /search", remoteDependencyData.Name); Assert.Equal(activity.Context.SpanId.ToHexString(), remoteDependencyData.Id); Assert.Equal(httpUrl, remoteDependencyData.Data); Assert.Equal("0", remoteDependencyData.ResultCode); Assert.Equal(activity.Duration.ToString("c", CultureInfo.InvariantCulture), remoteDependencyData.Duration); Assert.Equal(activity.GetStatus() != Status.Error, remoteDependencyData.Success); Assert.True(remoteDependencyData.Properties.Count == 0); Assert.True(remoteDependencyData.Measurements.Count == 0); }
public void LinksAreTruncatedWhenCannotFitInMaxLength(string telemetryType) { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); List <ActivityLink> links = new List <ActivityLink>(); int numberOfLinks = 150; //arbitrary number > 100 for (int i = 0; i < numberOfLinks; i++) { ActivityLink activityLink = new ActivityLink(new ActivityContext( ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None), null); links.Add(activityLink); } string expectedMSlinks = GetExpectedMSlinks(links.GetRange(0, MaxLinksAllowed)); string actualMSlinks = null; using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: default, null, links, startTime: DateTime.UtcNow); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); if (telemetryType == "RequestData") { var telemetryPartBRequestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.True(telemetryPartBRequestData.Properties.TryGetValue(msLinks, out actualMSlinks)); } if (telemetryType == "RemoteDependencyData") { var telemetryPartBRemoteDependencyData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags); Assert.True(telemetryPartBRemoteDependencyData.Properties.TryGetValue(msLinks, out actualMSlinks)); } // Check for valid JSON string try { JsonDocument document = JsonDocument.Parse(actualMSlinks); } catch (Exception) { Assert.True(false, "_MSlinks should be a JSON formatted string"); } Assert.True(actualMSlinks.Length <= MaxLength); Assert.Equal(actualMSlinks, expectedMSlinks); }
public void DependencyTypeisSetToInProcForInternalSpanWithParent() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var parentActivity = activitySource.StartActivity("ParentActivity", ActivityKind.Internal); using var childActivity = activitySource.StartActivity("ChildActivity", ActivityKind.Internal); var monitorTagsParent = AzureMonitorConverter.EnumerateActivityTags(parentActivity); var remoteDependencyDataTypeForParent = TelemetryPartB.GetRemoteDependencyData(parentActivity, ref monitorTagsParent).Type; Assert.Null(remoteDependencyDataTypeForParent); var monitorTagsChild = AzureMonitorConverter.EnumerateActivityTags(childActivity); var remoteDependencyDataTypeForChild = TelemetryPartB.GetRemoteDependencyData(childActivity, ref monitorTagsChild).Type; Assert.Equal("InProc", remoteDependencyDataTypeForChild); }
public void ValidateDBDependencyType(string dbSystem) { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Server, parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), startTime: DateTime.UtcNow); activity.SetTag(SemanticConventions.AttributeDbSystem, dbSystem); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var remoteDependencyDataType = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags).Type; var expectedType = TelemetryPartB.SqlDbs.Contains(dbSystem) ? "SQL" : dbSystem; Assert.Equal(expectedType, remoteDependencyDataType); }
public void HttpDependencyNameIsActivityDisplayNameByDefault() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), startTime: DateTime.UtcNow); activity.SetTag(SemanticConventions.AttributeHttpMethod, "GET"); activity.DisplayName = "HTTP GET"; var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var remoteDependencyDataName = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags).Name; Assert.Equal(activity.DisplayName, remoteDependencyDataName); }
public void TelemetryPartBPropertiesDoesNotContainMSLinksWhenActivityHasNoLinks(string telemetryType) { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: default, startTime: DateTime.UtcNow); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); if (telemetryType == "RequestData") { var telemetryPartBRequestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.False(telemetryPartBRequestData.Properties.TryGetValue(msLinks, out var mslinks)); } if (telemetryType == "RemoteDependencyData") { var telemetryPartBRemoteDependencyData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags); Assert.False(telemetryPartBRemoteDependencyData.Properties.TryGetValue(msLinks, out var mslinks)); } }
public void TelemetryPartBPropertiesContainsMSLinksWhenActivityHasLinks(string telemetryType) { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); ActivityLink activityLink = new ActivityLink(new ActivityContext( ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None), null); List <ActivityLink> links = new List <ActivityLink>(); links.Add(activityLink); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: default, null, links, startTime: DateTime.UtcNow); string expectedMSlinks = GetExpectedMSlinks(links); string actualMSlinks = null; var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); if (telemetryType == "RequestData") { var telemetryPartBRequestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.True(telemetryPartBRequestData.Properties.TryGetValue(msLinks, out actualMSlinks)); } if (telemetryType == "RemoteDependencyData") { var telemetryPartBRemoteDependencyData = TelemetryPartB.GetRemoteDependencyData(activity, ref monitorTags); Assert.True(telemetryPartBRemoteDependencyData.Properties.TryGetValue(msLinks, out actualMSlinks)); } Assert.Equal(expectedMSlinks, actualMSlinks); }