Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: do not alter telemetry ctx pt.2 #547

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 @@ -127,8 +127,6 @@ public static void LogHttpDependency(
Guard.NotNull(request, nameof(request), "Requires a HTTP request message to track a HTTP dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the HTTP dependency operation");

context = context ?? new Dictionary<string, object>();

LogHttpDependency(logger, request, statusCode, startTime, duration, dependencyId: null, context);
}

Expand Down Expand Up @@ -193,7 +191,7 @@ public static void LogHttpDependency(
Guard.NotLessThan(statusCode, 100, nameof(statusCode), "Requires a valid HTTP response status code that's within the range of 100 to 599, inclusive");
Guard.NotGreaterThan(statusCode, 599, nameof(statusCode), "Requires a valid HTTP response status code that's within the range of 100 to 599, inclusive");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

string requestUri = request.Path;
string targetName = request.Host.Host;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ public static void LogRequest(
Guard.NotNull(response, nameof(response), "Requires a HTTP response instance to track a HTTP request operation");
Guard.NotNull(measurement, nameof(measurement), "Requires an measurement instance to time the duration of the HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, response, measurement.StartTime, measurement.Elapsed, context);
}

Expand Down Expand Up @@ -99,8 +97,6 @@ public static void LogRequest(
Guard.NotNull(response, nameof(response), "Requires a HTTP response instance to track a HTTP request operation");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, response.StatusCode, operationName: null, startTime, duration, context);
}

Expand Down Expand Up @@ -160,8 +156,6 @@ public static void LogRequest(
Guard.NotNull(response, nameof(response), "Requires a HTTP response instance to track a HTTP request operation");
Guard.NotNull(measurement, nameof(measurement), "Requires an measurement instance to time the duration of the HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, response, operationName, measurement.StartTime, measurement.Elapsed, context);
}

Expand Down Expand Up @@ -191,8 +185,6 @@ public static void LogRequest(
Guard.NotNull(response, nameof(response), "Requires a HTTP response instance to track a HTTP request operation");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, response.StatusCode, operationName, startTime, duration, context);
}

Expand Down Expand Up @@ -254,8 +246,6 @@ public static void LogRequest(
Guard.NotLessThan(responseStatusCode, 0, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");
Guard.NotGreaterThan(responseStatusCode, 999, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, responseStatusCode, measurement.StartTime, measurement.Elapsed, context);
}

Expand Down Expand Up @@ -287,8 +277,6 @@ public static void LogRequest(
Guard.NotGreaterThan(responseStatusCode, 999, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, responseStatusCode, operationName: null, startTime, duration, context);
}

Expand Down Expand Up @@ -353,8 +341,6 @@ public static void LogRequest(
Guard.NotLessThan(responseStatusCode, 0, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");
Guard.NotGreaterThan(responseStatusCode, 999, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");

context = context ?? new Dictionary<string, object>();

LogRequest(logger, request, responseStatusCode, operationName, measurement.StartTime, measurement.Elapsed, context);
}

Expand Down Expand Up @@ -388,7 +374,7 @@ public static void LogRequest(
Guard.NotGreaterThan(responseStatusCode, 999, nameof(responseStatusCode), "Requires a HTTP response status code that's within the 0-999 range to track a HTTP request");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the HTTP request");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.RequestFormat,
RequestLogEntry.CreateForHttpRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ public static void LogAzureSearchDependency(
Guard.NotNullOrWhitespace(operationName, nameof(operationName), "Requires a non-blank name for the Azure Search service to track the Azure Service dependency");
Guard.NotNull(measurement, nameof(measurement), "Requires a dependency measurement instance to track the latency of the Azure Search resource when tracking the Azure Search dependency");

context = context ?? new Dictionary<string, object>();

LogAzureSearchDependency(logger, searchServiceName, operationName, isSuccessful, measurement.StartTime, measurement.Elapsed, context);
}

Expand Down Expand Up @@ -98,8 +96,6 @@ public static void LogAzureSearchDependency(
Guard.NotNullOrWhitespace(operationName, nameof(operationName), "Requires a non-blank name for the Azure Search service to track the Azure Service dependency");
Guard.NotNull(measurement, nameof(measurement), "Requires a dependency measurement instance to track the latency of the Azure Search resource when tracking the Azure Search dependency");

context = context ?? new Dictionary<string, object>();

LogAzureSearchDependency(logger, searchServiceName, operationName, isSuccessful, measurement.StartTime, measurement.Elapsed, dependencyId, context);
}

Expand Down Expand Up @@ -129,8 +125,6 @@ public static void LogAzureSearchDependency(
Guard.NotNullOrWhitespace(operationName, nameof(operationName), "Requires a non-blank name for the Azure Search service to track the Azure Service dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Search operation");

context = context ?? new Dictionary<string, object>();

LogAzureSearchDependency(logger, searchServiceName, operationName, isSuccessful, startTime, duration, dependencyId: null, context);
}

Expand Down Expand Up @@ -162,7 +156,7 @@ public static void LogAzureSearchDependency(
Guard.NotNullOrWhitespace(operationName, nameof(operationName), "Requires a non-blank name for the Azure Search service to track the Azure Service dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Search operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.DependencyFormat, new DependencyLogEntry(
dependencyType: "Azure Search",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,6 @@ public static void LogCosmosSqlDependency(
Guard.NotNullOrWhitespace(container, nameof(container), "Requires a non-blank container name of the Cosmos SQL storage to track a Cosmos SQL dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Cosmos SQL operation");

context = context ?? new Dictionary<string, object>();

LogCosmosSqlDependency(logger, accountName, database, container, isSuccessful, startTime, duration, dependencyId: null, context);
}

Expand Down Expand Up @@ -173,7 +171,7 @@ public static void LogCosmosSqlDependency(
Guard.NotNullOrWhitespace(container, nameof(container), "Requires a non-blank container name of the Cosmos SQL storage to track a Cosmos SQL dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Cosmos SQL operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
string data = $"{database}/{container}";

logger.LogWarning(MessageFormats.DependencyFormat, new DependencyLogEntry(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -636,8 +636,6 @@ public static void LogDependency(
Guard.NotNull(dependencyData, nameof(dependencyData), "Requires custom dependency data when tracking the custom dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the dependency operation");

context = context ?? new Dictionary<string, object>();

LogDependency(logger, dependencyType, dependencyData, targetName, isSuccessful, dependencyName, startTime, duration, dependencyId: null, context);
}

Expand Down Expand Up @@ -676,7 +674,7 @@ public static void LogDependency(
Guard.NotNull(dependencyData, nameof(dependencyData), "Requires custom dependency data when tracking the custom dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the dependency operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.DependencyFormat, new DependencyLogEntry(
dependencyType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public static void LogCustomEvent(this ILogger logger, string name, Dictionary<s
Guard.NotNull(logger, nameof(logger), "Requires a logger instance to track telemetry");
Guard.NotNullOrWhitespace(name, nameof(name), "Requires a non-blank event name to track an custom event");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.EventFormat, new EventLogEntry(name, context));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,6 @@ public static void LogEventHubsDependency(
Guard.NotNullOrWhitespace(eventHubName, nameof(eventHubName), "Requires a non-blank Azure Event Hub name to track an Azure Event Hub dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Events Hubs operation");

context = context ?? new Dictionary<string, object>();

LogEventHubsDependency(logger, namespaceName, eventHubName, isSuccessful, startTime, duration, dependencyId: null, context);
}

Expand Down Expand Up @@ -158,7 +156,7 @@ public static void LogEventHubsDependency(
Guard.NotNullOrWhitespace(eventHubName, nameof(eventHubName), "Requires a non-blank Azure Event Hub name to track an Azure Event Hub dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Events Hubs operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.DependencyFormat, new DependencyLogEntry(
dependencyType: "Azure Event Hubs",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public static void LogEventHubsRequest(
operationName = ContextProperties.RequestTracking.EventHubs.DefaultOperationName;
}

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
context[ContextProperties.RequestTracking.EventHubs.Namespace] = eventHubsNamespace;
context[ContextProperties.RequestTracking.EventHubs.ConsumerGroup] = consumerGroup;
context[ContextProperties.RequestTracking.EventHubs.Name] = eventHubsName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public static void LogCustomRequest(
operationName = ContextProperties.RequestTracking.DefaultOperationName;
}

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);

logger.LogWarning(MessageFormats.RequestFormat, RequestLogEntry.CreateForCustomRequest(requestSource, operationName, isSuccessful, duration, startTime, context));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ public static void LogServiceBusDependency(
Guard.NotNullOrWhitespace(entityName, nameof(entityName), "Requires a non-blank Azure Service Bus entity name to track an Azure Service Bus dependency");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Service Bus operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
context[ContextProperties.DependencyTracking.ServiceBus.EntityType] = entityType;
context[ContextProperties.DependencyTracking.ServiceBus.Endpoint] = serviceBusNamespaceEndpoint;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public static void LogServiceBusTopicRequestWithSuffix(
Guard.NotNullOrWhitespace(subscriptionName, nameof(subscriptionName), "Requires an Azure Service Bus subscription name on the to track the topic request");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Service Bus topic request operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
context[ContextProperties.RequestTracking.ServiceBus.Topic.SubscriptionName] = subscriptionName;

LogServiceBusRequestWithSuffix(logger, serviceBusNamespace, serviceBusNamespaceSuffix, topicName, operationName, isSuccessful, duration, startTime, ServiceBusEntityType.Topic, context);
Expand Down Expand Up @@ -159,7 +159,7 @@ public static void LogServiceBusTopicRequest(
Guard.NotNullOrWhitespace(subscriptionName, nameof(subscriptionName), "Requires an Azure Service Bus subscription name on the to track the topic request");
Guard.NotLessThan(duration, TimeSpan.Zero, nameof(duration), "Requires a positive time duration of the Azure Service Bus topic request operation");

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
context[ContextProperties.RequestTracking.ServiceBus.Topic.SubscriptionName] = subscriptionName;

LogServiceBusRequest(logger, serviceBusNamespace, topicName, operationName, isSuccessful, duration, startTime, ServiceBusEntityType.Topic, context);
Expand Down Expand Up @@ -431,7 +431,7 @@ public static void LogServiceBusRequest(
operationName = ContextProperties.RequestTracking.ServiceBus.DefaultOperationName;
}

context = context ?? new Dictionary<string, object>();
context = context is null ? new Dictionary<string, object>() : new Dictionary<string, object>(context);
context[ContextProperties.RequestTracking.ServiceBus.Endpoint] = serviceBusNamespace;
context[ContextProperties.RequestTracking.ServiceBus.EntityName] = entityName;
context[ContextProperties.RequestTracking.ServiceBus.EntityType] = entityType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Arcus.Observability.Telemetry.Core;
using Arcus.Observability.Telemetry.Core.Logging;
using Bogus;
Expand Down Expand Up @@ -307,5 +308,25 @@ public void LogAzureSearchDependencyWithDependencyIdWithDurationMeasurement_With
Assert.ThrowsAny<ArgumentException>(
() => logger.LogAzureSearchDependency(searchServiceName, operationName, isSuccessful, measurement: (DurationMeasurement)null, dependencyId));
}

[Fact]
public void LogAzureSearchDependency_WithContext_DoesNotAlterContext()
{
// Arrange
var logger = new TestLogger();
string searchServiceName = _bogusGenerator.Commerce.ProductName();
string operationName = _bogusGenerator.Commerce.ProductName();
bool isSuccessful = _bogusGenerator.PickRandom(true, false);
string dependencyId = _bogusGenerator.Lorem.Word();
var startTime = _bogusGenerator.Date.RecentOffset();
var duration = _bogusGenerator.Date.Timespan();
var context = new Dictionary<string, object>();

// Act
logger.LogAzureSearchDependency(searchServiceName, operationName, isSuccessful, startTime, duration, dependencyId, context);

// Assert
Assert.Empty(context);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Arcus.Observability.Telemetry.Core;
using Arcus.Observability.Telemetry.Core.Logging;
using Bogus;
Expand Down Expand Up @@ -801,5 +802,26 @@ public void LogServiceBusTopicDependencyWithDependencyIdWithDurationMeasurement_
Assert.ThrowsAny<ArgumentException>(
() => logger.LogServiceBusTopicDependency(namespaceEndpoint, topicName, isSuccessful, measurement: null, dependencyId));
}

[Fact]
public void LogServiceBusDependency_WithContext_DoesNotAlterContext()
{
// Arrange
var logger = new TestLogger();
string namespaceEndpoint = BogusGenerator.Commerce.Product();
string topicName = BogusGenerator.Commerce.Product();
bool isSuccessful = BogusGenerator.PickRandom(true, false);
string dependencyId = BogusGenerator.Lorem.Word();
var startTime = BogusGenerator.Date.RecentOffset();
var duration = BogusGenerator.Date.Timespan();
var entityType = BogusGenerator.PickRandom<ServiceBusEntityType>();
var context = new Dictionary<string, object>();

// Act
logger.LogServiceBusDependency(namespaceEndpoint, topicName, isSuccessful, startTime, duration, dependencyId, entityType, context);

// Assert
Assert.Empty(context);
}
}
}
Loading
Loading