From 02969d862768e755a9dfe7c99bff1efa59a571eb Mon Sep 17 00:00:00 2001 From: Vera Reynolds Date: Thu, 22 Jul 2021 08:50:26 -0600 Subject: [PATCH] Allow redis instrumentation with dependency injected connection (#74) --- .../ServiceCollectionExtensions.cs | 37 ++++++++++++------- .../TracerProviderBuilderExtensions.cs | 6 +-- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/Honeycomb.OpenTelemetry/ServiceCollectionExtensions.cs b/src/Honeycomb.OpenTelemetry/ServiceCollectionExtensions.cs index d0b8a43..4f20b3b 100644 --- a/src/Honeycomb.OpenTelemetry/ServiceCollectionExtensions.cs +++ b/src/Honeycomb.OpenTelemetry/ServiceCollectionExtensions.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using OpenTelemetry; using OpenTelemetry.Trace; +using StackExchange.Redis; using System.Collections.Generic; namespace Honeycomb.OpenTelemetry @@ -12,7 +13,7 @@ namespace Honeycomb.OpenTelemetry public static class ServiceCollectionExtensions { /// - /// Configures the to send telemetry data to Honycomb using options created from an instance of . + /// Configures the to send telemetry data to Honeycomb using options created from an instance of . /// public static IServiceCollection UseHoneycomb(this IServiceCollection services, IConfiguration configuration) { @@ -20,25 +21,33 @@ public static IServiceCollection UseHoneycomb(this IServiceCollection services, } /// - /// Configures the to send telemetry data to Honycomb using an instance of . + /// Configures the to send telemetry data to Honeycomb using an instance of . /// public static IServiceCollection UseHoneycomb(this IServiceCollection services, HoneycombOptions options) { return services - .AddOpenTelemetryTracing(builder => builder - .UseHoneycomb(options) - .AddAspNetCoreInstrumentation(opts => + .AddOpenTelemetryTracing(hostingBuilder => hostingBuilder.Configure(((serviceProvider, builder) => { - opts.RecordException = true; - opts.Enrich = (activity, eventName, _) => - { - if (eventName == "OnStartActivity") - foreach (KeyValuePair entry in Baggage.Current) + builder + .UseHoneycomb(options) + .AddAspNetCoreInstrumentation(opts => + { + opts.RecordException = true; + opts.Enrich = (activity, eventName, _) => { - activity.SetTag(entry.Key, entry.Value); - } - }; - }) + if (eventName == "OnStartActivity") + foreach (KeyValuePair entry in Baggage.Current) + { + activity.SetTag(entry.Key, entry.Value); + } + }; + }); + if (options.RedisConnection == null && + serviceProvider.GetService(typeof(IConnectionMultiplexer)) != null) + { + builder.AddRedisInstrumentation(); + } + })) ) .AddSingleton(TracerProvider.Default.GetTracer(options.ServiceName)); } diff --git a/src/Honeycomb.OpenTelemetry/TracerProviderBuilderExtensions.cs b/src/Honeycomb.OpenTelemetry/TracerProviderBuilderExtensions.cs index 10c6c2d..b8a5bc6 100644 --- a/src/Honeycomb.OpenTelemetry/TracerProviderBuilderExtensions.cs +++ b/src/Honeycomb.OpenTelemetry/TracerProviderBuilderExtensions.cs @@ -13,7 +13,7 @@ namespace Honeycomb.OpenTelemetry public static class TracerProviderBuilderExtensions { /// - /// Configures the to send telemetry data to Honycomb using options created from command line arguments. + /// Configures the to send telemetry data to Honeycomb using options created from command line arguments. /// public static TracerProviderBuilder UseHoneycomb(this TracerProviderBuilder builder, string[] args) { @@ -21,7 +21,7 @@ public static TracerProviderBuilder UseHoneycomb(this TracerProviderBuilder buil } /// - /// Configures the to send telemetry data to Honycomb using options created from an instance of . + /// Configures the to send telemetry data to Honeycomb using options created from an instance of . /// public static TracerProviderBuilder UseHoneycomb(this TracerProviderBuilder builder, IConfiguration configuration) { @@ -29,7 +29,7 @@ public static TracerProviderBuilder UseHoneycomb(this TracerProviderBuilder buil } /// - /// Configures the to send telemetry data to Honycomb using an instance of . + /// Configures the to send telemetry data to Honeycomb using an instance of . /// public static TracerProviderBuilder UseHoneycomb(this TracerProviderBuilder builder, HoneycombOptions options) {