public void ValidateRequestDataSuccess(string activityStatus) { 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); if (activityStatus == "Ok") { activity.SetStatus(Status.Ok); } else if (activityStatus == "Error") { activity.SetStatus(Status.Error); } else { activity.SetStatus(Status.Unset); } activity.SetTag(SemanticConventions.AttributeHttpUrl, "https://www.foo.bar/search"); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var requestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.Equal(activity.GetStatus() != Status.Error, requestData.Success); }
public void ValidateHttpRequestData() { 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.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 requestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.Equal($"GET {activity.DisplayName}", requestData.Name); Assert.Equal(activity.Context.SpanId.ToHexString(), requestData.Id); Assert.Equal(httpUrl, requestData.Url); Assert.Equal("0", requestData.ResponseCode); Assert.Equal(activity.Duration.ToString("c", CultureInfo.InvariantCulture), requestData.Duration); Assert.Equal(activity.GetStatus() != Status.Error, requestData.Success); Assert.Null(requestData.Source); Assert.True(requestData.Properties.Count == 1); //Because of otel_statuscode attribute for activity status. todo: do not add all tags to PartC Assert.True(requestData.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 ValidateHttpRequestDataResponseCode(string httpStatusCode) { 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); var httpResponseCode = httpStatusCode ?? "0"; activity.SetTag(SemanticConventions.AttributeHttpUrl, "https://www.foo.bar/search"); activity.SetTag(SemanticConventions.AttributeHttpStatusCode, httpStatusCode); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var requestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.Equal(httpResponseCode, requestData.ResponseCode); }
public void ValidateSuccessForRequestAndRemoteDependency(string activityStatusCode, string activityStatusDescription) { 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("otel.status_code", activityStatusCode); activity.SetTag("otel.status_description", activityStatusDescription); activity.SetTag(SemanticConventions.AttributeHttpUrl, "https://www.foo.bar/search"); var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var requestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); var remoteDependencyData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.Equal(activity.GetStatus().StatusCode != StatusCode.Error, requestData.Success); Assert.Equal(activity.GetStatus().StatusCode != StatusCode.Error, remoteDependencyData.Success); }
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 RequestNameMatchesOperationName(string httpMethod) { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Server, null, startTime: DateTime.UtcNow); var resource = CreateTestResource(); activity.DisplayName = "displayname"; if (httpMethod != null) { activity.SetTag(SemanticConventions.AttributeHttpMethod, httpMethod); } var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity); var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null); var requestData = TelemetryPartB.GetRequestData(activity, ref monitorTags); Assert.Equal(requestData.Name, telemetryItem.Tags[ContextTagKeys.AiOperationName.ToString()]); }
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); }