From 637399c4beeeca92583e5f216485b40631456267 Mon Sep 17 00:00:00 2001 From: Odonno Date: Sun, 25 Jan 2026 12:31:58 +0100 Subject: [PATCH] feat(surrealdb): override WithOtlpExporter method --- .../SurrealDbBuilderExtensions.cs | 20 ++++++++++++++- .../AddSurrealServerTests.cs | 25 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit.Aspire.Hosting.SurrealDb/SurrealDbBuilderExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.SurrealDb/SurrealDbBuilderExtensions.cs index d6adb118e..60fecd56b 100644 --- a/src/CommunityToolkit.Aspire.Hosting.SurrealDb/SurrealDbBuilderExtensions.cs +++ b/src/CommunityToolkit.Aspire.Hosting.SurrealDb/SurrealDbBuilderExtensions.cs @@ -439,7 +439,7 @@ public static IResourceBuilder WithLogLevel( LogLevel logLevel ) { - ArgumentNullException.ThrowIfNull(builder, nameof(builder)); + ArgumentNullException.ThrowIfNull(builder); string value = logLevel switch { @@ -451,6 +451,24 @@ LogLevel logLevel return builder.WithEnvironment("SURREAL_LOG", value); } + + /// + /// Injects the appropriate environment variables to allow the resource to enable sending telemetry to the dashboard. + /// 1. It sets the OTLP endpoint to the value of the DOTNET_DASHBOARD_OTLP_ENDPOINT_URL environment variable. + /// 2. It sets the service name and instance id to the resource name and UID. Values are injected by the orchestrator. + /// 3. It sets a small batch schedule delay in development. This reduces the delay that OTLP exporter waits to sends telemetry and makes the dashboard telemetry pages responsive. + /// + /// The resource builder. + /// The . + public static IResourceBuilder WithOtlpExporter( + this IResourceBuilder builder + ) + { + builder.WithEnvironment("SURREAL_TELEMETRY_PROVIDER", "otlp"); + OtlpConfigurationExtensions.WithOtlpExporter(builder); + + return builder; + } /// /// Adds a Surrealist UI instance for SurrealDB to the application model. diff --git a/tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests/AddSurrealServerTests.cs b/tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests/AddSurrealServerTests.cs index 15c5ad96e..68b731bdb 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests/AddSurrealServerTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests/AddSurrealServerTests.cs @@ -210,4 +210,29 @@ public async Task AddSurrealServerContainerWithLogLevel(LogLevel logLevel, strin Assert.True(hasValue); Assert.Equal(expected, value); } + + [Fact] + public async Task AddSurrealServerContainerWithOtlpExporter() + { + var appBuilder = DistributedApplication.CreateBuilder(); + + var surrealServer = appBuilder + .AddSurrealServer("surreal") + .WithOtlpExporter(); + + using var app = appBuilder.Build(); + + // Verify that OtlpExporterAnnotation is present (added by WithOtlpExporter) + // This annotation marks the resource as an OTEL exporter + Assert.True(surrealServer.Resource.HasAnnotationOfType()); + +#pragma warning disable CS0618 // Type or member is obsolete + var variables = await surrealServer.Resource.GetEnvironmentVariableValuesAsync(); +#pragma warning restore CS0618 // Type or member is obsolete + + bool hasValue = variables.TryGetValue("SURREAL_TELEMETRY_PROVIDER", out var value); + + Assert.True(hasValue); + Assert.Equal("otlp", value); + } } \ No newline at end of file