ResilienceStrategyTelemetry
Resilience telemetry is used by individual resilience strategies to report some important events.
using Polly.Utils;
using System.Runtime.CompilerServices;
namespace Polly.Telemetry
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public sealed class ResilienceStrategyTelemetry
{
internal bool Enabled { get; }
[System.Runtime.CompilerServices.Nullable(2)]
[field: System.Runtime.CompilerServices.Nullable(2)]
internal TelemetryListener Listener {
[System.Runtime.CompilerServices.NullableContext(2)]
get;
}
internal ResilienceTelemetrySource TelemetrySource { get; }
internal ResilienceStrategyTelemetry(ResilienceTelemetrySource source, [System.Runtime.CompilerServices.Nullable(2)] TelemetryListener listener)
{
TelemetrySource = source;
Listener = listener;
Enabled = (listener != null);
}
public void Report<[System.Runtime.CompilerServices.Nullable(2)] TArgs>(ResilienceEvent resilienceEvent, ResilienceContext context, TArgs args)
{
Guard.NotNull(context, "context");
if (Listener != null && resilienceEvent.Severity != 0) {
TelemetryListener listener = Listener;
TelemetryEventArguments<object, TArgs> args2 = new TelemetryEventArguments<object, TArgs>(TelemetrySource, resilienceEvent, context, args, (Outcome<object>?)null);
listener.Write<object, TArgs>(ref args2);
}
}
public void Report<[System.Runtime.CompilerServices.Nullable(2)] TArgs, [System.Runtime.CompilerServices.Nullable(2)] TResult>(ResilienceEvent resilienceEvent, ResilienceContext context, [System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})] Outcome<TResult> outcome, TArgs args)
{
if (Listener != null && resilienceEvent.Severity != 0) {
TelemetryListener listener = Listener;
TelemetryEventArguments<TResult, TArgs> args2 = new TelemetryEventArguments<TResult, TArgs>(TelemetrySource, resilienceEvent, context, args, (Outcome<TResult>?)outcome);
listener.Write<TResult, TArgs>(ref args2);
}
}
internal void Report<[System.Runtime.CompilerServices.Nullable(0)] TArgs, [System.Runtime.CompilerServices.Nullable(2)] TResult>(ResilienceEvent resilienceEvent, TArgs args) where TArgs : IOutcomeArguments<TResult>
{
if (Listener != null && resilienceEvent.Severity != 0) {
TelemetryListener listener = Listener;
TelemetryEventArguments<TResult, TArgs> args2 = new TelemetryEventArguments<TResult, TArgs>(TelemetrySource, resilienceEvent, ((IOutcomeArguments<TResult>)args).Context, args, (Outcome<TResult>?)((IOutcomeArguments<TResult>)args).Outcome);
listener.Write<TResult, TArgs>(ref args2);
}
}
}
}