1414// limitations under the License.
1515// </copyright>
1616
17- using System ;
18- using System . Collections . Generic ;
19-
2017namespace OpenTelemetry . Trace
2118{
2219 /// <summary>
2320 /// A collection of helper methods to be used when building spans.
2421 /// </summary>
2522 public static class SpanHelper
2623 {
27- #pragma warning disable CA1805 // Do not initialize unnecessarily
28- private static readonly Status DefaultStatus = default ;
29- #pragma warning restore CA1805 // Do not initialize unnecessarily
30- private static readonly Dictionary < StatusCanonicalCode , string > StatusCanonicalCodeToStringCache = new Dictionary < StatusCanonicalCode , string > ( )
31- {
32- [ StatusCanonicalCode . Ok ] = StatusCanonicalCode . Ok . ToString ( ) ,
33- [ StatusCanonicalCode . Cancelled ] = StatusCanonicalCode . Cancelled . ToString ( ) ,
34- [ StatusCanonicalCode . Unknown ] = StatusCanonicalCode . Unknown . ToString ( ) ,
35- [ StatusCanonicalCode . InvalidArgument ] = StatusCanonicalCode . InvalidArgument . ToString ( ) ,
36- [ StatusCanonicalCode . DeadlineExceeded ] = StatusCanonicalCode . DeadlineExceeded . ToString ( ) ,
37- [ StatusCanonicalCode . NotFound ] = StatusCanonicalCode . NotFound . ToString ( ) ,
38- [ StatusCanonicalCode . AlreadyExists ] = StatusCanonicalCode . AlreadyExists . ToString ( ) ,
39- [ StatusCanonicalCode . PermissionDenied ] = StatusCanonicalCode . PermissionDenied . ToString ( ) ,
40- [ StatusCanonicalCode . ResourceExhausted ] = StatusCanonicalCode . ResourceExhausted . ToString ( ) ,
41- [ StatusCanonicalCode . FailedPrecondition ] = StatusCanonicalCode . FailedPrecondition . ToString ( ) ,
42- [ StatusCanonicalCode . Aborted ] = StatusCanonicalCode . Aborted . ToString ( ) ,
43- [ StatusCanonicalCode . OutOfRange ] = StatusCanonicalCode . OutOfRange . ToString ( ) ,
44- [ StatusCanonicalCode . Unimplemented ] = StatusCanonicalCode . Unimplemented . ToString ( ) ,
45- [ StatusCanonicalCode . Internal ] = StatusCanonicalCode . Internal . ToString ( ) ,
46- [ StatusCanonicalCode . Unavailable ] = StatusCanonicalCode . Unavailable . ToString ( ) ,
47- [ StatusCanonicalCode . DataLoss ] = StatusCanonicalCode . DataLoss . ToString ( ) ,
48- [ StatusCanonicalCode . Unauthenticated ] = StatusCanonicalCode . Unauthenticated . ToString ( ) ,
49- } ;
50-
51- /// <summary>
52- /// Helper method that returns the string version of a <see cref="StatusCanonicalCode"/> using a cache to save on allocations.
53- /// </summary>
54- /// <param name="statusCanonicalCode"><see cref="StatusCanonicalCode"/>.</param>
55- /// <returns>String version of the supplied <see cref="StatusCanonicalCode"/>.</returns>
56- public static string GetCachedCanonicalCodeString ( StatusCanonicalCode statusCanonicalCode )
57- {
58- if ( ! StatusCanonicalCodeToStringCache . TryGetValue ( statusCanonicalCode , out string canonicalCode ) )
59- {
60- return statusCanonicalCode . ToString ( ) ;
61- }
62-
63- return canonicalCode ;
64- }
65-
6624 /// <summary>
6725 /// Helper method that populates span properties from http status code according
68- /// to https://github.com/open-telemetry/opentelemetry-specification/blob/2316771e7e0ca3bfe9b2286d13e3a41ded6b8858 /specification/data- http.md.
26+ /// to https://github.com/open-telemetry/opentelemetry-specification/blob/master /specification/trace/semantic_conventions/ http.md#status .
6927 /// </summary>
7028 /// <param name="httpStatusCode">Http status code.</param>
7129 /// <returns>Resolved span <see cref="Status"/> for the Http status code.</returns>
7230 public static Status ResolveSpanStatusForHttpStatusCode ( int httpStatusCode )
7331 {
74- var newStatus = Status . Unknown ;
32+ var status = Status . Error ;
7533
7634 if ( httpStatusCode >= 100 && httpStatusCode <= 399 )
7735 {
78- newStatus = Status . Ok ;
79- }
80- else if ( httpStatusCode == 400 )
81- {
82- newStatus = Status . InvalidArgument ;
83- }
84- else if ( httpStatusCode == 401 )
85- {
86- newStatus = Status . Unauthenticated ;
87- }
88- else if ( httpStatusCode == 403 )
89- {
90- newStatus = Status . PermissionDenied ;
91- }
92- else if ( httpStatusCode == 404 )
93- {
94- newStatus = Status . NotFound ;
95- }
96- else if ( httpStatusCode == 429 )
97- {
98- newStatus = Status . ResourceExhausted ;
99- }
100- else if ( httpStatusCode == 501 )
101- {
102- newStatus = Status . Unimplemented ;
103- }
104- else if ( httpStatusCode == 503 )
105- {
106- newStatus = Status . Unavailable ;
107- }
108- else if ( httpStatusCode == 504 )
109- {
110- newStatus = Status . DeadlineExceeded ;
36+ status = Status . Unset ;
11137 }
11238
113- return newStatus ;
39+ return status ;
11440 }
11541
11642 /// <summary>
@@ -121,51 +47,17 @@ public static Status ResolveSpanStatusForHttpStatusCode(int httpStatusCode)
12147 /// <returns>Resolved span <see cref="Status"/> for the Grpc status code.</returns>
12248 public static Status ResolveSpanStatusForGrpcStatusCode ( int statusCode )
12349 {
124- var newStatus = Status . Unknown ;
50+ var status = Status . Error ;
12551
12652 if ( typeof ( StatusCanonicalCode ) . IsEnumDefined ( statusCode ) )
12753 {
128- newStatus = new Status ( ( StatusCanonicalCode ) statusCode ) ;
54+ status = ( ( StatusCanonicalCode ) statusCode ) switch
55+ {
56+ StatusCanonicalCode . Ok => Status . Unset ,
57+ _ => Status . Error ,
58+ } ;
12959 }
13060
131- return newStatus ;
132- }
133-
134- /// <summary>
135- /// Helper method that returns Status from <see cref="StatusCanonicalCode"/> to save on allocations.
136- /// </summary>
137- /// <param name="statusCanonicalCode"><see cref="StatusCanonicalCode"/>.</param>
138- /// <returns>Resolved span <see cref="Status"/> for the Canonical status code.</returns>
139- public static Status ResolveCanonicalCodeToStatus ( string statusCanonicalCode )
140- {
141- bool success = Enum . TryParse ( statusCanonicalCode , out StatusCanonicalCode canonicalCode ) ;
142-
143- if ( ! success )
144- {
145- return DefaultStatus ;
146- }
147-
148- var status = canonicalCode switch
149- {
150- StatusCanonicalCode . Cancelled => Status . Cancelled ,
151- StatusCanonicalCode . Unknown => Status . Unknown ,
152- StatusCanonicalCode . InvalidArgument => Status . InvalidArgument ,
153- StatusCanonicalCode . DeadlineExceeded => Status . DeadlineExceeded ,
154- StatusCanonicalCode . NotFound => Status . NotFound ,
155- StatusCanonicalCode . AlreadyExists => Status . AlreadyExists ,
156- StatusCanonicalCode . PermissionDenied => Status . PermissionDenied ,
157- StatusCanonicalCode . ResourceExhausted => Status . ResourceExhausted ,
158- StatusCanonicalCode . FailedPrecondition => Status . FailedPrecondition ,
159- StatusCanonicalCode . Aborted => Status . Aborted ,
160- StatusCanonicalCode . OutOfRange => Status . OutOfRange ,
161- StatusCanonicalCode . Unimplemented => Status . Unimplemented ,
162- StatusCanonicalCode . Internal => Status . Internal ,
163- StatusCanonicalCode . Unavailable => Status . Unavailable ,
164- StatusCanonicalCode . DataLoss => Status . DataLoss ,
165- StatusCanonicalCode . Unauthenticated => Status . Unauthenticated ,
166- _ => Status . Ok ,
167- } ;
168-
16961 return status ;
17062 }
17163 }
0 commit comments