未验证 提交 974e96bd 编写于 作者: T Tarek Mahmoud Sayed 提交者: GitHub

Activity Status support (#47506)

* Activity Status support

* Apply the agreed on behavior
上级 f638a75f
......@@ -46,6 +46,8 @@ public partial class Activity : IDisposable
public string? RootId { get { throw null; } }
public System.Diagnostics.ActivitySpanId SpanId { get { throw null; } }
public System.DateTime StartTimeUtc { get { throw null; } }
public System.Diagnostics.ActivityStatusCode Status { get { throw null; } }
public string? StatusDescription { get { throw null; } }
public System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string?>> Tags { get { throw null; } }
public System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object?>> TagObjects { get { throw null; } }
public System.Collections.Generic.IEnumerable<System.Diagnostics.ActivityEvent> Events { get { throw null; } }
......@@ -65,6 +67,7 @@ public partial class Activity : IDisposable
public System.Diagnostics.Activity SetParentId(System.Diagnostics.ActivityTraceId traceId, System.Diagnostics.ActivitySpanId spanId, System.Diagnostics.ActivityTraceFlags activityTraceFlags = System.Diagnostics.ActivityTraceFlags.None) { throw null; }
public System.Diagnostics.Activity SetParentId(string parentId) { throw null; }
public System.Diagnostics.Activity SetStartTime(System.DateTime startTimeUtc) { throw null; }
public System.Diagnostics.Activity SetStatus(System.Diagnostics.ActivityStatusCode code, string? description = null) { throw null; }
public System.Diagnostics.Activity Start() { throw null; }
public void Stop() { throw null; }
public void Dispose() { throw null; }
......@@ -104,6 +107,12 @@ public struct Enumerator : System.Collections.Generic.IEnumerator<System.Collect
void System.Collections.IEnumerator.Reset() { throw null; }
}
}
public enum ActivityStatusCode
{
Unset = 0,
Ok = 1,
Error = 2
}
public enum ActivityIdFormat
{
Unknown = 0,
......
......@@ -34,6 +34,7 @@
<ItemGroup Condition="'$(TargetFramework)' != 'netstandard1.1'">
<Compile Include="$(CommonPath)System\HexConverter.cs" Link="Common\System\HexConverter.cs" />
<Compile Include="System\Diagnostics\Activity.cs" />
<Compile Include="System\Diagnostics\ActivityStatusCode.cs" />
<Compile Include="System\Diagnostics\ActivityTagsCollection.cs" />
<Compile Include="System\Diagnostics\ActivityContext.cs" />
<Compile Include="System\Diagnostics\ActivityCreationOptions.cs" />
......
......@@ -82,6 +82,35 @@ public partial class Activity : IDisposable
private LinkedList<ActivityEvent>? _events;
private Dictionary<string, object>? _customProperties;
private string? _displayName;
private ActivityStatusCode _statusCode;
private string? _statusDescription;
/// <summary>
/// Gets status code of the current activity object.
/// </summary>
public ActivityStatusCode Status => _statusCode;
/// <summary>
/// Gets the status descrition of the current activity object.
/// </summary>
public string? StatusDescription => _statusDescription;
/// <summary>
/// Sets the status code and description on the current activity object.
/// </summary>
/// <param name="code">The status code</param>
/// <param name="description">The error status descrition</param>
/// <returns>'this' for convenient chaining</returns>
/// <remarks>
/// When passing code value different than ActivityStatusCode.Error, the Activity.StatusDescription will reset to null value.
/// The description paramater will be respected only when passing ActivityStatusCode.Error value.
/// </remarks>
public Activity SetStatus(ActivityStatusCode code, string? description = null)
{
_statusCode = code;
_statusDescription = code == ActivityStatusCode.Error ? description : null;
return this;
}
/// <summary>
/// Gets the relationship between the Activity, its parents, and its children in a Trace.
......
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace System.Diagnostics
{
/// <summary>
/// Define the status code of the Activity which indicate the status of the instrumented operation.
/// </summary>
public enum ActivityStatusCode
{
/// <summary>
/// Unset status code is the default value indicating the status code is not initialized.
/// </summary>
Unset = 0,
/// <summary>
/// Status code indicating the operation has been validated and completed successfully.
/// </summary>
Ok = 1,
/// <summary>
/// Status code indicating an error is encountered during the operation.
/// </summary>
Error = 2
}
}
\ No newline at end of file
......@@ -1694,6 +1694,46 @@ public void StructEnumerator_TagsLinkedList()
Assert.True(method.ReturnType.IsValueType);
}
[Fact]
public void TestStatus()
{
Activity a = new Activity("Status");
Assert.Equal(ActivityStatusCode.Unset, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Ok); // Default description null parameter
Assert.Equal(ActivityStatusCode.Ok, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Ok, null); // explicit description null parameter
Assert.Equal(ActivityStatusCode.Ok, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Ok, "Ignored Description"); // explicit non null description
Assert.Equal(ActivityStatusCode.Ok, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Error); // Default description null parameter
Assert.Equal(ActivityStatusCode.Error, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Error, "Error Code"); // Default description null parameter
Assert.Equal(ActivityStatusCode.Error, a.Status);
Assert.Equal("Error Code", a.StatusDescription);
a.SetStatus(ActivityStatusCode.Ok, "Description will reset to null");
Assert.Equal(ActivityStatusCode.Ok, a.Status);
Assert.Null(a.StatusDescription);
a.SetStatus(ActivityStatusCode.Error, "Another Error Code Description");
Assert.Equal(ActivityStatusCode.Error, a.Status);
Assert.Equal("Another Error Code Description", a.StatusDescription);
a.SetStatus((ActivityStatusCode) 100, "Another Error Code Description");
Assert.Equal((ActivityStatusCode) 100, a.Status);
Assert.Null(a.StatusDescription);
}
[Fact]
public void StructEnumerator_GenericLinkedList()
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册