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
builderTracerProviderBuilderThe 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