diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/DataCollection/DocumentHelper.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/DataCollection/DocumentHelper.cs index f937f1e1c61a..8530af59916b 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/DataCollection/DocumentHelper.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/DataCollection/DocumentHelper.cs @@ -7,7 +7,9 @@ using System.Runtime.CompilerServices; using System.Text; using Azure.Monitor.OpenTelemetry.Exporter.Internals; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Internals.Diagnostics; using Azure.Monitor.OpenTelemetry.LiveMetrics.Models; +using OpenTelemetry.Logs; using ExceptionDocument = Azure.Monitor.OpenTelemetry.LiveMetrics.Models.Exception; namespace Azure.Monitor.OpenTelemetry.LiveMetrics.Internals.DataCollection @@ -19,7 +21,87 @@ internal static class DocumentHelper { // TODO: NEED TO HANDLE UNIQUE MAXLENGTH VALUES FOR DOCUMENT TYPES. SEE SWAGGER FOR MAXLENGTH VALUES. - internal static RemoteDependency ConvertToRemoteDependency(Activity activity) + #region Document Buffer Extension Methods + public static void AddExceptionDocument(this DoubleBuffer buffer, ActivityEvent activityEvent) + { + try + { + var exceptionDocument = ConvertToExceptionDocument(activityEvent); + buffer.WriteDocument(exceptionDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("ExceptionDocument", ex); + } + } + + public static void AddExceptionDocument(this DoubleBuffer buffer, System.Exception exception) + { + try + { + var exceptionDocument = ConvertToExceptionDocument(exception); + buffer.WriteDocument(exceptionDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("ExceptionDocument", ex); + } + } + + public static void AddLogDocument(this DoubleBuffer buffer, ActivityEvent activityEvent) + { + try + { + var logDocument = ConvertToLogDocument(activityEvent); + buffer.WriteDocument(logDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("LogDocument", ex); + } + } + + public static void AddLogDocument(this DoubleBuffer buffer, LogRecord logRecord) + { + try + { + var logDocument = ConvertToLogDocument(logRecord); + buffer.WriteDocument(logDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("LogDocument", ex); + } + } + + public static void AddDependencyDocument(this DoubleBuffer buffer, Activity activity) + { + try + { + var dependencyDocument = ConvertToDependencyDocument(activity); + buffer.WriteDocument(dependencyDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("DependencyDocument", ex); + } + } + + public static void AddRequestDocument(this DoubleBuffer buffer, Activity activity) + { + try + { + var requestDocument = ConvertToRequestDocument(activity); + buffer.WriteDocument(requestDocument); + } + catch (System.Exception ex) + { + LiveMetricsExporterEventSource.Log.FailedToCreateTelemetryDocument("RequestDocument", ex); + } + } + #endregion + + internal static RemoteDependency ConvertToDependencyDocument(Activity activity) { // TODO: Investigate if we can have a minimal/optimized version of ActivityTagsProcessor for LiveMetric. var atp = new ActivityTagsProcessor(); @@ -86,7 +168,7 @@ internal static RemoteDependency ConvertToRemoteDependency(Activity activity) return remoteDependencyDocumentIngress; } - internal static Request ConvertToRequest(Activity activity) + internal static Request ConvertToRequestDocument(Activity activity) { string httpResponseStatusCode = string.Empty; string urlScheme = string.Empty; @@ -163,8 +245,29 @@ internal static Request ConvertToRequest(Activity activity) return requestDocumentIngress; } - internal static ExceptionDocument CreateException(string exceptionType, string exceptionMessage) + internal static ExceptionDocument ConvertToExceptionDocument(ActivityEvent activityEvent) { + string exceptionType = string.Empty; + string exceptionMessage = string.Empty; + + foreach (ref readonly var tag in activityEvent.EnumerateTagObjects()) + { + if (tag.Value == null) + { + continue; + } + else if (tag.Key == SemanticConventions.AttributeExceptionType) + { + exceptionType = tag.Value.ToString()!; + continue; + } + else if (tag.Key == SemanticConventions.AttributeExceptionMessage) + { + exceptionMessage = tag.Value.ToString()!; + continue; + } + } + ExceptionDocument exceptionDocumentIngress = new() { DocumentType = DocumentType.Exception, @@ -176,6 +279,38 @@ internal static ExceptionDocument CreateException(string exceptionType, string e return exceptionDocumentIngress; } + internal static ExceptionDocument ConvertToExceptionDocument(System.Exception exception) + { + ExceptionDocument exceptionDocumentIngress = new() + { + DocumentType = DocumentType.Exception, + ExceptionType = exception.GetType().FullName, + ExceptionMessage = exception.Message, + }; + + return exceptionDocumentIngress; + } + + internal static Models.Trace ConvertToLogDocument(LogRecord logRecord) + { + return new Models.Trace() + { + DocumentType = DocumentType.Trace, + Message = logRecord.FormattedMessage ?? logRecord.Body, // TODO: MAY NEED TO BUILD THE FORMATTED MESSAGE IF NOT AVAILABLE + // TODO: Properties = new Dictionary(), - UX supports up to 10 custom properties + }; + } + + internal static Models.Trace ConvertToLogDocument(ActivityEvent activityEvent) + { + return new Models.Trace() + { + DocumentType = DocumentType.Trace, + Message = activityEvent.Name, + // TODO: Properties = new Dictionary(), - UX supports up to 10 custom properties + }; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool IsHttpSuccess(Activity activity, string? responseCode) { diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Diagnostics/LiveMetricsExporterEventSource.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Diagnostics/LiveMetricsExporterEventSource.cs index a0a43c8d2088..968048e97765 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Diagnostics/LiveMetricsExporterEventSource.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Diagnostics/LiveMetricsExporterEventSource.cs @@ -204,5 +204,17 @@ public void DroppedDocument(DocumentType documentType) [Event(15, Message = "Calculated Cpu Counter: Period: {0}. DiffValue: {1}. CalculatedValue: {2}. ProcessorCount: {3}. NormalizedValue: {4}", Level = EventLevel.Verbose)] public void ProcessCountersCpuCounter(long period, long diffValue, double calculatedValue, int processorCount, double normalizedValue) => WriteEvent(15, period, diffValue, calculatedValue, processorCount, normalizedValue); + + [NonEvent] + public void FailedToCreateTelemetryDocument(string documentTypeName, System.Exception ex) + { + if (IsEnabled(EventLevel.Error)) + { + FailedToCreateTelemetryDocument(documentTypeName, ex.ToInvariantString()); + } + } + + [Event(16, Message = "Failed to create telemetry document due to an exception. DocumentType: {0}. Exception: {1}", Level = EventLevel.Error)] + public void FailedToCreateTelemetryDocument(string documentTypeName, string exceptionMessage) => WriteEvent(16, documentTypeName, exceptionMessage); } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs index 2f29298a79d9..0faeb9fc5549 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs @@ -37,59 +37,27 @@ public override void OnEnd(Activity activity) if (activity.Kind == ActivityKind.Server || activity.Kind == ActivityKind.Consumer) { - AddRequestDocument(activity); + _manager._documentBuffer.AddRequestDocument(activity); } else { - AddRemoteDependencyDocument(activity); + _manager._documentBuffer.AddDependencyDocument(activity); } if (activity.Events != null) { foreach (ref readonly var @event in activity.EnumerateEvents()) { - string exceptionType = string.Empty; - string exceptionMessage = string.Empty; - - foreach (ref readonly var tag in @event.EnumerateTagObjects()) + if (@event.Name == SemanticConventions.AttributeExceptionEventName) { - if (tag.Value == null) - { - continue; - } - else if (tag.Key == SemanticConventions.AttributeExceptionType) - { - exceptionType = tag.Value.ToString()!; - continue; - } - else if (tag.Key == SemanticConventions.AttributeExceptionMessage) - { - exceptionMessage = tag.Value.ToString()!; - continue; - } + _manager._documentBuffer.AddExceptionDocument(@event); + } + else + { + _manager._documentBuffer.AddLogDocument(@event); } - - AddExceptionDocument(exceptionType, exceptionMessage); } } } - - private void AddExceptionDocument(string exceptionType, string exceptionMessage) - { - var exceptionDocumentIngress = DocumentHelper.CreateException(exceptionType, exceptionMessage); - _manager._documentBuffer.WriteDocument(exceptionDocumentIngress); - } - - private void AddRemoteDependencyDocument(Activity activity) - { - var remoteDependencyDocumentIngress = DocumentHelper.ConvertToRemoteDependency(activity); - _manager._documentBuffer.WriteDocument(remoteDependencyDocumentIngress); - } - - private void AddRequestDocument(Activity activity) - { - var requestDocumentIngress = DocumentHelper.ConvertToRequest(activity); - _manager._documentBuffer.WriteDocument(requestDocumentIngress); - } } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsLogProcessor.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsLogProcessor.cs new file mode 100644 index 000000000000..306975e2fff5 --- /dev/null +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsLogProcessor.cs @@ -0,0 +1,69 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Monitor.OpenTelemetry.LiveMetrics.Internals; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Internals.DataCollection; +using OpenTelemetry; +using OpenTelemetry.Logs; + +namespace Azure.Monitor.OpenTelemetry.LiveMetrics +{ + internal class LiveMetricsLogProcessor : BaseProcessor + { + private bool _disposed; + private LiveMetricsResource? _resource; + private readonly Manager _manager; + + internal LiveMetricsResource? LiveMetricsResource => _resource ??= ParentProvider?.GetResource().CreateAzureMonitorResource(); + + public LiveMetricsLogProcessor(Manager manager) + { + _manager = manager; + } + + public override void OnEnd(LogRecord data) + { + // Check if live metrics is enabled. + if (!_manager.ShouldCollect()) + { + return; + } + + // Resource is not available at initialization and must be set later. + if (_manager.LiveMetricsResource == null && LiveMetricsResource != null) + { + _manager.LiveMetricsResource = LiveMetricsResource; + } + + if (data.Exception is null) + { + _manager._documentBuffer.AddLogDocument(data); + } + else + { + _manager._documentBuffer.AddExceptionDocument(data.Exception); + } + } + + protected override void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + try + { + _manager.Dispose(); + } + catch (System.Exception) + { + } + } + + _disposed = true; + } + + base.Dispose(disposing); + } + } +} diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/ActivityEventTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/ActivityEventTests.cs new file mode 100644 index 000000000000..30b30e3e96af --- /dev/null +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/ActivityEventTests.cs @@ -0,0 +1,103 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Diagnostics; +using System.Linq; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Internals.DataCollection; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Models; +using OpenTelemetry.Trace; +using Xunit; +using Xunit.Abstractions; + +namespace Azure.Monitor.OpenTelemetry.LiveMetrics.Tests.DocumentTests +{ + public class ActivityEventTests : DocumentTestBase + { + public ActivityEventTests(ITestOutputHelper output) : base(output) + { + } + + [Fact] + public void VerifyActivityWithExceptions() + { + // SETUP + var uniqueTestId = Guid.NewGuid(); + + var activitySourceName = $"activitySourceName{uniqueTestId}"; + using var activitySource = new ActivitySource(activitySourceName); + // TODO: Replace this ActivityListener with an OpenTelemetry provider. + var listener = new ActivityListener + { + ShouldListenTo = _ => true, + Sample = (ref ActivityCreationOptions options) => ActivitySamplingResult.AllData, + }; + + ActivitySource.AddActivityListener(listener); + + // ACT + using var activity = activitySource.StartActivity(name: "HelloWorld"); + Assert.NotNull(activity); + + try + { + throw new System.Exception("Test exception"); + } + catch (System.Exception ex) + { + activity.SetStatus(ActivityStatusCode.Error); + activity.RecordException(ex, new TagList + { + { "someKey", "someValue" }, + }); + } + + var exceptionDocument = DocumentHelper.ConvertToExceptionDocument(activity.Events.First()); + + // ASSERT + Assert.Equal(DocumentType.Exception, exceptionDocument.DocumentType); + Assert.Equal(typeof(System.Exception).FullName, exceptionDocument.ExceptionType); + Assert.Equal("Test exception", exceptionDocument.ExceptionMessage); + + // The following "EXTENSION" properties are used to calculate metrics. These are not serialized. + // These properties are not used for Exception and should be default values. + Assert.Equal(default, exceptionDocument.Extension_Duration); + Assert.False(exceptionDocument.Extension_IsSuccess); + } + + [Fact] + public void VerifyActivityWithLogs() + { + // SETUP + var uniqueTestId = Guid.NewGuid(); + + var activitySourceName = $"activitySourceName{uniqueTestId}"; + using var activitySource = new ActivitySource(activitySourceName); + // TODO: Replace this ActivityListener with an OpenTelemetry provider. + var listener = new ActivityListener + { + ShouldListenTo = _ => true, + Sample = (ref ActivityCreationOptions options) => ActivitySamplingResult.AllData, + }; + + ActivitySource.AddActivityListener(listener); + + // ACT + using var activity = activitySource.StartActivity(name: "HelloWorld"); + Assert.NotNull(activity); + + activity.AddEvent(new ActivityEvent("This is a log message")); + + var logDocument = DocumentHelper.ConvertToLogDocument(activity.Events.First()); + + // ASSERT + Assert.Equal(DocumentType.Trace, logDocument.DocumentType); + Assert.Equal("This is a log message", logDocument.Message); + + // The following "EXTENSION" properties are used to calculate metrics. These are not serialized. + // These properties are not used for Exception and should be default values. + Assert.Equal(default, logDocument.Extension_Duration); + Assert.False(logDocument.Extension_IsSuccess); + } + } +} diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/HttpClientDependecyTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/HttpClientDependecyTests.cs index ebefa084e2d6..1131f8e24462 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/HttpClientDependecyTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/HttpClientDependecyTests.cs @@ -50,7 +50,7 @@ public void VerifyHttpClientAttributes() dependencyActivity.SetTag("http.response.status_code", 200); dependencyActivity.Stop(); - var dependencyDocument = DocumentHelper.ConvertToRemoteDependency(dependencyActivity); + var dependencyDocument = DocumentHelper.ConvertToDependencyDocument(dependencyActivity); // ASSERT Assert.Equal("http://bing.com", dependencyDocument.CommandName); @@ -102,7 +102,7 @@ public async Task VerifyHttpClientDependency(bool successfulRequest) // Assert var dependencyActivity = exportedActivities.Last(); PrintActivity(dependencyActivity); - var dependencyDocument = DocumentHelper.ConvertToRemoteDependency(dependencyActivity); + var dependencyDocument = DocumentHelper.ConvertToDependencyDocument(dependencyActivity); Assert.Equal(requestUrl, dependencyDocument.CommandName); Assert.Equal(DocumentType.RemoteDependency, dependencyDocument.DocumentType); diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/LogTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/LogTests.cs new file mode 100644 index 000000000000..065514d00033 --- /dev/null +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/LogTests.cs @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Internals.DataCollection; +using Azure.Monitor.OpenTelemetry.LiveMetrics.Models; +using Microsoft.Extensions.Logging; +using OpenTelemetry.Logs; +using Xunit; +using Xunit.Abstractions; + +namespace Azure.Monitor.OpenTelemetry.LiveMetrics.Tests.DocumentTests +{ + public class LogTests : DocumentTestBase + { + public LogTests(ITestOutputHelper output) : base(output) + { + } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void VerifyLogRecord(bool formatMessage) + { + // SETUP + var uniqueTestId = Guid.NewGuid(); + + var logCategoryName = $"logCategoryName{uniqueTestId}"; + + List telemetryItems = new(); + + var loggerFactory = LoggerFactory.Create(builder => + builder.AddOpenTelemetry(options => + { + options.IncludeFormattedMessage = formatMessage; + options.AddInMemoryExporter(telemetryItems); + })); + + // ACT + var logger = loggerFactory.CreateLogger(logCategoryName); + logger.Log( + logLevel: LogLevel.Information, + eventId: 0, + exception: null, + message: "Hello {name}.", + args: new object[] { "World" }); + + // CLEANUP + loggerFactory.Dispose(); + + Assert.True(telemetryItems.Any(), "Unit test failed to collect telemetry."); + var logDocument = DocumentHelper.ConvertToLogDocument(telemetryItems.First()); + + // ASSERT + Assert.Equal(DocumentType.Trace, logDocument.DocumentType); + + if (formatMessage) + { + Assert.Equal("Hello World.", logDocument.Message); + } + else + { + Assert.Equal("Hello {name}.", logDocument.Message); + } + + // The following "EXTENSION" properties are used to calculate metrics. These are not serialized. + // These properties are not used for Exception and should be default values. + Assert.Equal(default, logDocument.Extension_Duration); + Assert.False(logDocument.Extension_IsSuccess); + } + + [Fact] + public void VerifyLogRecordWithException() + { + // SETUP + var uniqueTestId = Guid.NewGuid(); + + var logCategoryName = $"logCategoryName{uniqueTestId}"; + + List telemetryItems = new(); + + var loggerFactory = LoggerFactory.Create(builder => + builder.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(telemetryItems); + })); + + // ACT + var logger = loggerFactory.CreateLogger(logCategoryName); + + try + { + throw new System.Exception("Test exception"); + } + catch (System.Exception ex) + { + logger.Log( + logLevel: LogLevel.Error, + eventId: 0, + exception: ex, + message: "Hello {name}.", + args: new object[] { "World" }); + } + + // CLEANUP + loggerFactory.Dispose(); + + Assert.True(telemetryItems.Any(), "Unit test failed to collect telemetry."); + var logRecord = telemetryItems.First(); + Assert.NotNull(logRecord.Exception); + + var exceptionDocument = DocumentHelper.ConvertToExceptionDocument(logRecord.Exception); + + // ASSERT + Assert.Equal(DocumentType.Exception, exceptionDocument.DocumentType); + Assert.Equal(typeof(System.Exception).FullName, exceptionDocument.ExceptionType); + Assert.Equal("Test exception", exceptionDocument.ExceptionMessage); + + // The following "EXTENSION" properties are used to calculate metrics. These are not serialized. + // These properties are not used for Exception and should be default values. + Assert.Equal(default, exceptionDocument.Extension_Duration); + Assert.False(exceptionDocument.Extension_IsSuccess); + } + } +} diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/RequestTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/RequestTests.cs index 19362bb0effb..d9f43f1786ea 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/RequestTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/RequestTests.cs @@ -53,7 +53,7 @@ public void VerifyRequestAttributes() requestActivity.SetTag("url.query", "?q=OpenTelemetry"); requestActivity.Stop(); - var requestDocument = DocumentHelper.ConvertToRequest(requestActivity); + var requestDocument = DocumentHelper.ConvertToRequestDocument(requestActivity); // ASSERT Assert.Equal(DocumentType.Request, requestDocument.DocumentType); @@ -97,7 +97,7 @@ public async Task VerifyRequest() // Assert var requestActivity = exportedActivities.First(x => x.Kind == ActivityKind.Server)!; PrintActivity(requestActivity); - var requestDocument = DocumentHelper.ConvertToRequest(requestActivity); + var requestDocument = DocumentHelper.ConvertToRequestDocument(requestActivity); Assert.Equal(DocumentType.Request, requestDocument.DocumentType); Assert.Equal(requestActivity.Duration.ToString("c"), requestDocument.Duration); diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/SqlClientDependencyTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/SqlClientDependencyTests.cs index f13e31d7a998..cd692cfc71fa 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/SqlClientDependencyTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/tests/Azure.Monitor.OpenTelemetry.LiveMetrics.Tests/DocumentTests/SqlClientDependencyTests.cs @@ -54,7 +54,7 @@ public void VerifySqlClientAttributes() dependencyActivity.SetTag("db.statement", "select * from sys.databases"); dependencyActivity.Stop(); - var dependencyDocument = DocumentHelper.ConvertToRemoteDependency(dependencyActivity); + var dependencyDocument = DocumentHelper.ConvertToDependencyDocument(dependencyActivity); // ASSERT Assert.Equal("select * from sys.databases", dependencyDocument.CommandName); @@ -122,7 +122,7 @@ public void VerifySqlClientDependency( var dependencyActivity = exportedActivities.First(x => x.Kind == ActivityKind.Client)!; PrintActivity(dependencyActivity); - var dependencyDocument = DocumentHelper.ConvertToRemoteDependency(dependencyActivity); + var dependencyDocument = DocumentHelper.ConvertToDependencyDocument(dependencyActivity); Assert.Equal(commandText, dependencyDocument.CommandName); Assert.Equal(DocumentType.RemoteDependency, dependencyDocument.DocumentType); @@ -194,7 +194,7 @@ public void VerifySqlClientDependencyWithException( var dependencyActivity = exportedActivities.First(x => x.Kind == ActivityKind.Client)!; PrintActivity(dependencyActivity); - var dependencyDocument = DocumentHelper.ConvertToRemoteDependency(dependencyActivity); + var dependencyDocument = DocumentHelper.ConvertToDependencyDocument(dependencyActivity); Assert.Equal(commandText, dependencyDocument.CommandName); Assert.Equal(DocumentType.RemoteDependency, dependencyDocument.DocumentType);