Table of Contents

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

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