Decode.Telemetry
2.1.0
See the version list below for details.
dotnet add package Decode.Telemetry --version 2.1.0
NuGet\Install-Package Decode.Telemetry -Version 2.1.0
<PackageReference Include="Decode.Telemetry" Version="2.1.0" />
<PackageVersion Include="Decode.Telemetry" Version="2.1.0" />
<PackageReference Include="Decode.Telemetry" />
paket add Decode.Telemetry --version 2.1.0
#r "nuget: Decode.Telemetry, 2.1.0"
#:package Decode.Telemetry@2.1.0
#addin nuget:?package=Decode.Telemetry&version=2.1.0
#tool nuget:?package=Decode.Telemetry&version=2.1.0
Decode.Telemetry
OpenTelemetry instrumentation and extension methods for the Decode library ecosystem.
🚀 Features
- Decoupled & Standardized: Built on top of the native OpenTelemetry SDK for .NET.
- Unified Registration: Register tracing and metrics for the instrumented Decode libraries in a single call.
- Trace Support: Spans from
Decode.Data(connections and transactions),Decode.Hosting(background worker cycles) andDecode.Security.Jwt(token generation and validation). - Metrics Support: Counters for
Decode.Security.Jwttoken operations andDecode.Notificationsbusiness alerts.
Coverage. Three activity sources and two meters, listed in full below. The remaining packages —
Decode.Storage.*,Decode.Email.*andDecode.AspNetCore— emit no telemetry of their own today; for HTTP spans use OpenTelemetry'sAddAspNetCoreInstrumentation().
📦 Installation
dotnet add package Decode.Telemetry
🛠️ Setup
Register the instrumentation inside your Program.cs OpenTelemetry builder setup:
using Decode.Telemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddDecodeInstrumentation() // Decode.Data, Decode.Hosting and Decode.Security.Jwt sources
.AddOtlpExporter())
.WithMetrics(metrics => metrics
.AddAspNetCoreInstrumentation()
.AddDecodeInstrumentation() // Decode.Security.Jwt and Decode.Notifications meters
.AddPrometheusExporter());
The two AddDecodeInstrumentation calls are distinct overloads — one on TracerProviderBuilder,
one on MeterProviderBuilder — so both are needed. Registering only one silently drops the other
half of the data.
📊 Telemetry Data Details
Traces
Activity source Decode.Data:
DbSession.CreateConnection: Open operations on database connections.UnitOfWork.BeginTransaction: Transaction startup durations.UnitOfWork.Commit: Transaction commits.UnitOfWork.Rollback: Transaction rollbacks.
Activity source Decode.Security.Jwt:
JwtService.CreateToken: JWT generation times.JwtService.ValidateToken: JWT validation times and internal validation status.
Activity source Decode.Hosting:
{WorkerName}.Execute: one span per execution cycle of aScopedPeriodicWorker, named after the worker type. Carries the tagsworker.nameandworker.execution_id(the sameExecutionIdexposed onWorkerContext, so a span correlates with the worker's own log scope). On an unhandled exception the span status is set toErrorwith the exception message, whether or notWorkerOptions.SuppressExceptionslets the worker continue.
Metrics
The library exposes the following standard .NET Counters:
decode.jwt.tokens.generated: Count of successfully generated tokens.decode.jwt.tokens.validated: Count of successfully validated tokens.decode.jwt.tokens.validation_failures: Count of token validation failures (includes areasontag describing why, e.g., expired or invalid signature).decode.notifications.added: Count of Domain Notifications added in business logic (includes akeytag representing the field name andstatus_codefor the HTTP response type).
🔎 Inspecting the registered names
The two sets are also exposed as public read-only lists, so the registration can be asserted instead of assumed:
IReadOnlyList<string> sources = OpenTelemetryExtensions.ActivitySourceNames;
IReadOnlyList<string> meters = OpenTelemetryExtensions.MeterNames;
They exist because the set is easy to get wrong by omission: Decode.Hosting was missing from the
tracing registration before 2.0.0, which silently dropped every background worker span — nothing
fails, the spans simply never arrive. Use them to pin the expected instrumentation in a test, or to
wire a custom exporter without duplicating the string literals.
📄 License
MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- OpenTelemetry (>= 1.9.0)
-
.NETStandard 2.1
- OpenTelemetry (>= 1.9.0)
-
net8.0
- OpenTelemetry (>= 1.9.0)
-
net9.0
- OpenTelemetry (>= 1.9.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.