Class PrimitiveValueObjectTraceProviderBuilderExtensions
- Namespace
- Trellis
- Assembly
- Trellis.Primitives.dll
Provides extension methods for configuring OpenTelemetry tracing for Primitive Value Objects (PVO).
public static class PrimitiveValueObjectTraceProviderBuilderExtensions
- Inheritance
-
PrimitiveValueObjectTraceProviderBuilderExtensions
- 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
AddPrimitiveValueObjectInstrumentation(TracerProviderBuilder)
Adds PrimitiveValueObjects instrumentation to the OpenTelemetry tracing pipeline. Enables distributed tracing for value object creation, validation, and parsing operations.
public static TracerProviderBuilder AddPrimitiveValueObjectInstrumentation(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
.AddPrimitiveValueObjectInstrumentation() // Enable PVO 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
.AddPrimitiveValueObjectInstrumentation()
.AddAspNetCoreInstrumentation()
.AddAzureMonitorTraceExporter(options =>
{
options.ConnectionString =
builder.Configuration["ApplicationInsights:ConnectionString"];
}));
// Now you can see PVO 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 PrimitiveValueObjects 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 PVO 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