mirror of
https://github.com/davidkaya/aryx.git
synced 2026-08-04 02:48:44 +02:00
- Fix ActivitySource name from 'Microsoft.Agents.AI' to 'Experimental.Microsoft.Agents.AI' matching the Agent Framework default - Wrap agents with UseOpenTelemetry() via AIAgentBuilder so agent invocation spans are emitted to the configured OTLP collector - Add proper disposal of OpenTelemetryAgent wrappers via SyncDisposableAdapter bridging IDisposable to IAsyncDisposable - Enable workflow-level telemetry on WorkflowRunner custom graph builds via WithOpenTelemetry() (HandoffWorkflowBuilder and GroupChatWorkflowBuilder do not expose this API — framework limitation) - Fix settings panel help text to be user-facing instead of dev jargon - Update test assertion for corrected ActivitySource name Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
88 lines
3.3 KiB
C#
88 lines
3.3 KiB
C#
using Aryx.AgentHost.Services;
|
|
using OpenTelemetry.Exporter;
|
|
using OpenTelemetry.Trace;
|
|
|
|
namespace Aryx.AgentHost.Tests;
|
|
|
|
public sealed class OpenTelemetrySetupTests
|
|
{
|
|
[Fact]
|
|
public void ResolveTracingConfiguration_ReturnsNullWhenEndpointMissing()
|
|
{
|
|
OpenTelemetryTracingConfiguration? configuration = OpenTelemetrySetup.ResolveTracingConfiguration([]);
|
|
|
|
Assert.Null(configuration);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveTracingConfiguration_UsesGrpcByDefault()
|
|
{
|
|
OpenTelemetryTracingConfiguration? configuration = OpenTelemetrySetup.ResolveTracingConfiguration(
|
|
[
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
|
|
]);
|
|
|
|
Assert.NotNull(configuration);
|
|
Assert.Equal(new Uri("http://localhost:4317"), configuration.Endpoint);
|
|
Assert.Equal(OtlpExportProtocol.Grpc, configuration.Protocol);
|
|
Assert.Collection(
|
|
configuration.ActivitySourceNames,
|
|
source => Assert.Equal("Experimental.Microsoft.Agents.AI", source),
|
|
source => Assert.Equal("Microsoft.Agents.AI.Workflows", source));
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveTracingConfiguration_UsesHttpProtobufWhenRequested()
|
|
{
|
|
OpenTelemetryTracingConfiguration? configuration = OpenTelemetrySetup.ResolveTracingConfiguration(
|
|
[
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4318"),
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_PROTOCOL", "http/protobuf"),
|
|
]);
|
|
|
|
Assert.NotNull(configuration);
|
|
Assert.Equal(new Uri("http://localhost:4318"), configuration.Endpoint);
|
|
Assert.Equal(OtlpExportProtocol.HttpProtobuf, configuration.Protocol);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveTracingConfiguration_ThrowsWhenEndpointInvalid()
|
|
{
|
|
InvalidOperationException error = Assert.Throws<InvalidOperationException>(() =>
|
|
OpenTelemetrySetup.ResolveTracingConfiguration(
|
|
[
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_ENDPOINT", "localhost:4317"),
|
|
]));
|
|
|
|
Assert.Contains("OTEL_EXPORTER_OTLP_ENDPOINT", error.Message, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveTracingConfiguration_ThrowsWhenProtocolUnsupported()
|
|
{
|
|
InvalidOperationException error = Assert.Throws<InvalidOperationException>(() =>
|
|
OpenTelemetrySetup.ResolveTracingConfiguration(
|
|
[
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_PROTOCOL", "http/json"),
|
|
]));
|
|
|
|
Assert.Contains("OTEL_EXPORTER_OTLP_PROTOCOL", error.Message, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateTracerProvider_CreatesProviderAndWritesDiagnosticsWhenConfigured()
|
|
{
|
|
StringWriter diagnosticsWriter = new();
|
|
|
|
using TracerProvider? tracerProvider = OpenTelemetrySetup.CreateTracerProvider(
|
|
[
|
|
new KeyValuePair<string, string?>("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
|
|
],
|
|
diagnosticsWriter);
|
|
|
|
Assert.NotNull(tracerProvider);
|
|
Assert.Contains("Aryx.AgentHost OpenTelemetry tracing enabled", diagnosticsWriter.ToString(), StringComparison.Ordinal);
|
|
}
|
|
}
|