Table of Contents

Class CvoTracingExtensions

Namespace
FunctionalDdd
Assembly
FunctionalDdd.CommonValueObjects.dll

Provides extension methods for configuring OpenTelemetry tracing for Common Value Objects (CVO).

public static class CvoTracingExtensions
Inheritance
CvoTracingExtensions
Inherited Members

Remarks

This class enables distributed tracing and monitoring for value object operations such as creation, validation, and parsing. When configured, value object operations will automatically generate trace spans in your OpenTelemetry pipeline.

Methods

AddFunctionalDddCvoInstrumentation(TracerProviderBuilder)

Adds CommonValueObjects instrumentation to the OpenTelemetry tracing pipeline. Enables distributed tracing for value object creation, validation, and parsing operations.

public static TracerProviderBuilder AddFunctionalDddCvoInstrumentation(this TracerProviderBuilder builder)

Parameters

builder TracerProviderBuilder

The OpenTelemetry.Trace.TracerProviderBuilder to configure.

Returns

TracerProviderBuilder

The configured OpenTelemetry.Trace.TracerProviderBuilder for method chaining.

Examples

Basic OpenTelemetry configuration in ASP.NET Core:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry()
    .WithTracing(tracerProviderBuilder =>
        tracerProviderBuilder
            .AddFunctionalDddCvoInstrumentation()  // Enable CVO tracing
            .AddAspNetCoreInstrumentation()         // Add ASP.NET Core tracing
            .AddHttpClientInstrumentation()         // Add HTTP client tracing
            .AddConsoleExporter());                 // Export to console

var app = builder.Build();
app.Run();

Configuration with Application Insights:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracerProviderBuilder =>
        tracerProviderBuilder
            .AddFunctionalDddCvoInstrumentation()
            .AddAspNetCoreInstrumentation()
            .AddAzureMonitorTraceExporter(options =>
            {
                options.ConnectionString = 
                    builder.Configuration["ApplicationInsights:ConnectionString"];
            }));

// Now you can see CVO traces in Application Insights:
// - Search for operations like "EmailAddress.TryCreate"
// - View validation success/failure rates
// - Analyze performance metrics

Trace hierarchy example in a typical API call:

// HTTP Request: POST /users
app.MapPost("/users", (CreateUserRequest request) =>
    EmailAddress.TryCreate(request.Email)
        .Combine(FirstName.TryCreate(request.FirstName))
        .Combine(LastName.TryCreate(request.LastName))
        .Bind((email, first, last) => _userService.CreateUser(email, first, last))
        .ToHttpResult());

// Resulting trace hierarchy:
// POST /users (200ms)
//   ├─ EmailAddress.TryCreate (1ms) [Status: Ok]
//   ├─ FirstName.TryCreate (0.5ms) [Status: Ok]
//   ├─ LastName.TryCreate (0.5ms) [Status: Ok]
//   └─ UserService.CreateUser (195ms)
//      ├─ Repository.Add (180ms)
//      │  └─ SQL INSERT (175ms)
//      └─ EventBus.Publish (15ms)

Monitoring validation failures:

// When validation fails, traces show error status:
// EmailAddress.TryCreate (1ms) [Status: Error]
//   └─ Error: "Email address is not valid."

// Query Application Insights for failed validations:
// requests
// | where operation_Name == "EmailAddress.TryCreate"
// | where success == false
// | summarize count() by bin(timestamp, 1h)

Remarks

This extension method registers the CommonValueObjects ActivitySource with OpenTelemetry, allowing you to observe and monitor value object operations in your distributed tracing system.

Once enabled, operations like TryCreate(string?, string?) will automatically create trace spans with:

  • Operation name (e.g., "EmailAddress.TryCreate")
  • Success/error status
  • Duration metrics
  • Parent-child relationship with calling code

Benefits of enabling CVO instrumentation:

  • Monitor validation performance and identify slow operations
  • Track validation failure rates and patterns
  • Correlate value object operations with business transactions
  • Debug distributed systems by following trace hierarchies
  • Analyze user input validation patterns
See Also
TracerProviderBuilder