Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DiagnosticsHandler.cs
Go to the documentation of this file.
7
8namespace System.Net.Http;
9
11{
12 private sealed class ActivityStartData
13 {
15
19 [DynamicDependency("Host", typeof(Uri))]
20 [DynamicDependency("Port", typeof(Uri))]
25
26 public override string ToString()
27 {
28 return $"{{ {"Request"} = {Request} }}";
29 }
30 }
31
32 private sealed class ActivityStopData
33 {
35
37
39
46
47 public override string ToString()
48 {
49 return $"{{ {"Response"} = {Response}, {"Request"} = {Request}, {"RequestTaskStatus"} = {RequestTaskStatus} }}";
50 }
51 }
52
53 private sealed class ExceptionData
54 {
55 public Exception Exception { get; }
56
58
62 [DynamicDependency("Host", typeof(Uri))]
63 [DynamicDependency("Port", typeof(Uri))]
65 [DynamicDependency("StackTrace", typeof(Exception))]
71
72 public override string ToString()
73 {
74 return $"{{ {"Exception"} = {Exception}, {"Request"} = {Request} }}";
75 }
76 }
77
78 private sealed class RequestData
79 {
81
82 public Guid LoggingRequestId { get; }
83
84 public long Timestamp { get; }
85
89 [DynamicDependency("Host", typeof(Uri))]
90 [DynamicDependency("Port", typeof(Uri))]
97
98 public override string ToString()
99 {
100 return $"{{ {"Request"} = {Request}, {"LoggingRequestId"} = {LoggingRequestId}, {"Timestamp"} = {Timestamp} }}";
101 }
102 }
103
104 private sealed class ResponseData
105 {
107
108 public Guid LoggingRequestId { get; }
109
110 public long Timestamp { get; }
111
113
122
123 public override string ToString()
124 {
125 return $"{{ {"Response"} = {Response}, {"LoggingRequestId"} = {LoggingRequestId}, {"Timestamp"} = {Timestamp}, {"RequestTaskStatus"} = {RequestTaskStatus} }}";
126 }
127 }
128
129 private static readonly DiagnosticListener s_diagnosticListener = new DiagnosticListener("HttpHandlerDiagnosticListener");
130
132
134
136
138 {
141 if (!autoRedirect)
142 {
143 return;
144 }
146 if (fields == null || fields.Count <= 0)
147 {
148 return;
149 }
151 foreach (string item in fields)
152 {
153 if (item != null && HeaderDescriptor.TryGet(item, out var descriptor))
154 {
155 list.Add(descriptor);
156 }
157 }
158 _propagatorFields = list.ToArray();
159 }
160
161 private static bool IsEnabled()
162 {
163 if (Activity.Current == null)
164 {
165 return s_diagnosticListener.IsEnabled();
166 }
167 return true;
168 }
169
174
187
189 {
190 if (request == null)
191 {
193 }
194 if (request.WasRedirected())
195 {
197 if (propagatorFields != null)
198 {
200 foreach (HeaderDescriptor descriptor in array)
201 {
202 request.Headers.Remove(descriptor);
203 }
204 }
205 }
206 Activity activity2 = null;
208 if (!diagnosticListener.IsEnabled())
209 {
210 activity2 = new Activity("System.Net.Http.HttpRequestOut");
211 activity2.Start();
213 try
214 {
216 }
217 finally
218 {
219 activity2.Stop();
220 }
221 }
223 if (diagnosticListener.IsEnabled("System.Net.Http.HttpRequestOut", request))
224 {
225 activity2 = new Activity("System.Net.Http.HttpRequestOut");
226 if (diagnosticListener.IsEnabled("System.Net.Http.HttpRequestOut.Start"))
227 {
229 }
230 else
231 {
232 activity2.Start();
233 }
234 }
235 if (diagnosticListener.IsEnabled("System.Net.Http.Request"))
236 {
239 Write(diagnosticListener, "System.Net.Http.Request", new RequestData(request, loggingRequestId, timestamp));
240 }
241 Activity current = Activity.Current;
242 if (current != null)
243 {
244 InjectHeaders(current, request);
245 }
247 TaskStatus taskStatus = TaskStatus.RanToCompletion;
248 try
249 {
252 return response;
253 }
255 {
256 taskStatus = TaskStatus.Canceled;
257 throw;
258 }
259 catch (Exception exception)
260 {
261 taskStatus = TaskStatus.Faulted;
262 if (diagnosticListener.IsEnabled("System.Net.Http.Exception"))
263 {
264 Write(diagnosticListener, "System.Net.Http.Exception", new ExceptionData(exception, request));
265 }
266 throw;
267 }
268 finally
269 {
270 if (activity2 != null)
271 {
273 }
274 if (diagnosticListener.IsEnabled("System.Net.Http.Response"))
275 {
277 Write(diagnosticListener, "System.Net.Http.Response", new ResponseData(response, loggingRequestId, timestamp2, taskStatus));
278 }
279 }
280 }
281
282 protected override void Dispose(bool disposing)
283 {
284 if (disposing)
285 {
287 }
288 base.Dispose(disposing);
289 }
290
292 {
294 {
295 if (carrier is HttpRequestMessage httpRequestMessage && key != null && HeaderDescriptor.TryGet(key, out var descriptor) && !httpRequestMessage.Headers.TryGetHeaderValue(descriptor, out var _))
296 {
297 httpRequestMessage.Headers.TryAddWithoutValidation(descriptor, value);
298 }
299 });
300 }
301
302 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:UnrecognizedReflectionPattern", Justification = "The values being passed into Write have the commonly used properties being preserved with DynamicDependency.")]
303 private static void Write<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T>(DiagnosticSource diagnosticSource, string name, T value)
304 {
305 diagnosticSource.Write(name, value);
306 }
307
308 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:UnrecognizedReflectionPattern", Justification = "The args being passed into StartActivity have the commonly used properties being preserved with DynamicDependency.")]
310 {
311 return diagnosticSource.StartActivity(activity, args);
312 }
313
314 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:UnrecognizedReflectionPattern", Justification = "The args being passed into StopActivity have the commonly used properties being preserved with DynamicDependency.")]
316 {
317 diagnosticSource.StopActivity(activity, args);
318 }
319}
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
static ? Activity Current
Definition Activity.cs:662
void Inject(Activity? activity, object? carrier, PropagatorSetterCallback? setter)
ActivityStopData(HttpResponseMessage response, HttpRequestMessage request, TaskStatus requestTaskStatus)
ExceptionData(Exception exception, HttpRequestMessage request)
RequestData(HttpRequestMessage request, Guid loggingRequestId, long timestamp)
ResponseData(HttpResponseMessage response, Guid loggingRequestId, long timestamp, TaskStatus requestTaskStatus)
void InjectHeaders(Activity currentActivity, HttpRequestMessage request)
readonly HeaderDescriptor[] _propagatorFields
static readonly DiagnosticListener s_diagnosticListener
DiagnosticsHandler(HttpMessageHandler innerHandler, DistributedContextPropagator propagator, bool autoRedirect=false)
async ValueTask< HttpResponseMessage > SendAsyncCore(HttpRequestMessage request, bool async, CancellationToken cancellationToken)
override void Dispose(bool disposing)
readonly DistributedContextPropagator _propagator
override ValueTask< HttpResponseMessage > SendAsync(HttpRequestMessage request, bool async, CancellationToken cancellationToken)
readonly HttpMessageHandler _innerHandler
Task< HttpResponseMessage > SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
virtual HttpResponseMessage Send(HttpRequestMessage request, CancellationToken cancellationToken)
virtual void Dispose(bool disposing)
static string net_http_handler_norequest
Definition SR.cs:70
Definition SR.cs:7
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
static Guid NewGuid()
Definition Guid.cs:1283
static readonly Guid Empty
Definition Guid.cs:86
static bool TryGet(string headerName, out HeaderDescriptor descriptor)