ActivityExtensions
Extensions for Activity and ActivitySource that provide
common Open Telemetry tracing functionality for clients built on System.ClientModel.
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace System.ClientModel.Primitives
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public static class ActivityExtensions
{
private const string ScmScopeLabel = "scm.sdk.scope";
private static readonly object ScmScopeValue = bool.TrueString;
[return: System.Runtime.CompilerServices.Nullable(2)]
public static Activity StartClientActivity(this ActivitySource activitySource, ClientPipelineOptions options, string name, ActivityKind kind = ActivityKind.Internal, ActivityContext parentContext = default(ActivityContext), [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1,
2
})] IEnumerable<KeyValuePair<string, object>> tags = null)
{
bool? enableDistributedTracing = options.EnableDistributedTracing;
bool flag = false;
if ((enableDistributedTracing.GetValueOrDefault() == flag) & enableDistributedTracing.HasValue)
return null;
bool flag2 = kind == ActivityKind.Client || kind == ActivityKind.Internal;
bool flag3 = ScmScopeValue.Equals(Activity.Current?.GetCustomProperty("scm.sdk.scope"));
if (flag2 & flag3)
return null;
Activity activity = activitySource.StartActivity(name, kind, parentContext, tags, null, default(DateTimeOffset));
if (flag2)
activity?.SetCustomProperty("scm.sdk.scope", ScmScopeValue);
return activity;
}
public static Activity MarkClientActivityFailed(this Activity activity, [System.Runtime.CompilerServices.Nullable(2)] Exception exception)
{
activity.SetStatus(ActivityStatusCode.Error, exception?.Message);
string text = null;
ClientResultException ex = exception as ClientResultException;
if (ex != null)
text = ex.Status.ToString();
if (text == null)
text = exception?.GetType().FullName;
if (text == null)
text = "_OTHER";
activity.SetTag("error.type", text);
return activity;
}
}
}