From 45d9bd1f1a21c20bdc8cd7b6245289f0502b9a22 Mon Sep 17 00:00:00 2001 From: Matt Lindsay Date: Mon, 29 Jan 2024 12:37:53 +0000 Subject: [PATCH] Dependency updates and new builder method added for configuring Open Telemetry --- .../RedisConnectionBuilderExtensions.cs | 22 ++++++++++++++++++- src/Extensions/StringExtensions.cs | 8 +++---- src/NRedisKit.csproj | 17 ++++++++------ test/UnitTest/NRedisKit.UnitTest.csproj | 4 ++-- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/DependencyInjection/Extensions/RedisConnectionBuilderExtensions.cs b/src/DependencyInjection/Extensions/RedisConnectionBuilderExtensions.cs index 0026a62..60bec95 100644 --- a/src/DependencyInjection/Extensions/RedisConnectionBuilderExtensions.cs +++ b/src/DependencyInjection/Extensions/RedisConnectionBuilderExtensions.cs @@ -9,6 +9,9 @@ using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Authentication.Cookies; +using OpenTelemetry.Trace; +using OpenTelemetry.Instrumentation.StackExchangeRedis; + using NRedisKit.Diagnostics; using NRedisKit.Authentication; using NRedisKit.Messaging; @@ -166,7 +169,7 @@ internal static IRedisConnectionBuilder ConfigureRedisConnection( /// /// The modified to be further chained to. /// Thrown when is null. - public static IRedisConnectionBuilder AddHealthCheck(this IRedisConnectionBuilder builder) + public static IRedisConnectionBuilder AddRedisHealthCheck(this IRedisConnectionBuilder builder) { if (builder is null) throw new ArgumentNullException(nameof(builder)); @@ -233,5 +236,22 @@ public static IRedisConnectionBuilder AddRedisStreamsProducer( return builder; } + public static IRedisConnectionBuilder AddRedisOpenTelemetry( + this IRedisConnectionBuilder builder, + Action configure) + { + if (builder is null) throw new ArgumentNullException(nameof(builder)); + + builder.Services.AddOpenTelemetry().WithTracing(b => b.AddRedisInstrumentation($"Redis:{builder.Name}", null, configure).ConfigureRedisInstrumentation((s, i) => + { + IRedisConnectionProvider provider = s.GetRequiredService(); + IRedisContext context = provider.GetRequiredConnection(builder.Name); + + i.AddConnection(context.Connection); + })); + + return builder; + } + #endregion } diff --git a/src/Extensions/StringExtensions.cs b/src/Extensions/StringExtensions.cs index a4a797a..934b57a 100644 --- a/src/Extensions/StringExtensions.cs +++ b/src/Extensions/StringExtensions.cs @@ -2,9 +2,9 @@ namespace NRedisKit.Extensions; -internal static class StringExtensions +public static class StringExtensions { - public static object? ChangeType(this string source, Type type) + internal static object? ChangeType(this string source, Type type) { // Try to 'Parse' the value into Type first as this will be // more better for performance due to not requiring any boxing. @@ -17,7 +17,7 @@ internal static class StringExtensions : default; } - private static bool TryGetStructOrEnum(this string source, Type type, out object value) + public static bool TryGetStructOrEnum(this string source, Type type, out object value) { if (type == typeof(Guid)) return source.TryGetGuid(out value); @@ -31,7 +31,7 @@ private static bool TryGetStructOrEnum(this string source, Type type, out object return false; } - private static bool TryGetGuid(this string source, out object value) + public static bool TryGetGuid(this string source, out object value) { if (Guid.TryParse(source, out Guid result)) { diff --git a/src/NRedisKit.csproj b/src/NRedisKit.csproj index 52fd0f3..14ff904 100644 --- a/src/NRedisKit.csproj +++ b/src/NRedisKit.csproj @@ -19,17 +19,20 @@ - - - - - - + + + + + + + + + - + diff --git a/test/UnitTest/NRedisKit.UnitTest.csproj b/test/UnitTest/NRedisKit.UnitTest.csproj index af23bee..6df9766 100644 --- a/test/UnitTest/NRedisKit.UnitTest.csproj +++ b/test/UnitTest/NRedisKit.UnitTest.csproj @@ -8,9 +8,9 @@ - + - +