Skip to content
18 changes: 18 additions & 0 deletions src/OpenTelemetry.Api/Trace/ActivityExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,17 @@ public static class ActivityExtensions
/// </summary>
/// <param name="activity">Activity instance.</param>
/// <param name="status">Activity execution status.</param>
[Obsolete("Use https://learn.microsoft.com//dotnet/api/system.diagnostics.activity.setstatus?view=net-7.0")]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void SetStatus(this Activity activity, Status status)
{
Debug.Assert(activity != null, "Activity should not be null");

activity.SetTag(SpanAttributeConstants.StatusCodeKey, StatusHelper.GetTagValueForStatusCode(status.StatusCode));
activity.SetTag(SpanAttributeConstants.StatusDescriptionKey, status.Description);

// For processors\exporters that do not look up tags
SetActivityStatusProperty(activity, status);
}

/// <summary>
Expand Down Expand Up @@ -108,5 +112,19 @@ public static void RecordException(this Activity activity, Exception ex, in TagL

activity.AddEvent(new ActivityEvent(SemanticConventions.AttributeExceptionEventName, default, tagsCollection));
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void SetActivityStatusProperty(Activity activity, Status status)
{
switch (status.StatusCode)
{
case StatusCode.Ok:
activity.SetStatus(ActivityStatusCode.Ok);
break;
case StatusCode.Error:
activity.SetStatus(ActivityStatusCode.Error, status.Description);
break;
}
}
}
}
10 changes: 10 additions & 0 deletions test/OpenTelemetry.Tests/Trace/ActivityExtensionsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public void SetStatus()
activity?.Stop();

Assert.Equal(Status.Ok, activity.GetStatus());
Assert.Equal(ActivityStatusCode.Ok, activity.Status);
}

[Fact]
Expand All @@ -56,6 +57,9 @@ public void SetStatusWithDescription()
var status = activity.GetStatus();
Assert.Equal(StatusCode.Error, status.StatusCode);
Assert.Equal("Not Found", status.Description);

Assert.Equal(ActivityStatusCode.Error, activity.Status);
Assert.Equal("Not Found", activity.StatusDescription);
}

[Fact]
Expand Down Expand Up @@ -93,6 +97,9 @@ public void SetStatusWithIgnoredDescription()
var status = activity.GetStatus();
Assert.Equal(StatusCode.Ok, status.StatusCode);
Assert.Null(status.Description);

Assert.Equal(ActivityStatusCode.Ok, activity.Status);
Assert.Null(activity.StatusDescription);
}

[Fact]
Expand All @@ -109,6 +116,7 @@ public void SetCancelledStatus()
activity?.Stop();

Assert.True(activity.GetStatus().StatusCode.Equals(Status.Error.StatusCode));
Assert.Equal(ActivityStatusCode.Error, activity.Status);
}

[Fact]
Expand All @@ -124,6 +132,7 @@ public void GetStatusWithNoStatusInActivity()
activity?.Stop();

Assert.Equal(Status.Unset, activity.GetStatus());
Assert.Equal(ActivityStatusCode.Unset, activity.Status);
}

[Fact]
Expand All @@ -141,6 +150,7 @@ public void LastSetStatusWins()
activity?.Stop();

Assert.Equal(Status.Ok, activity.GetStatus());
Assert.Equal(ActivityStatusCode.Ok, activity.Status);
}

[Fact]
Expand Down