/// <summary> /// Process exception /// </summary> private void OnEventException(object value) { var request = AgentUtil.FetchPropertyUsingReflection(value, "Request"); var status = AgentUtil.FetchPropertyUsingReflection(value, "StatusCode"); if (request is HttpWebRequest webRequest && status is HttpStatusCode httpStatusCode) { if (CurrentHttpWebRequests.TryRemove(webRequest, out var currentSubsegment)) { HttpRequestUtil.HandleStatus(httpStatusCode, currentSubsegment); HttpRequestUtil.EndSubsegment(currentSubsegment); } } }
private void OnEventStop(object value) { // The value passed in is not castable, use fetch from reflection instead. var request = AgentUtil.FetchPropertyUsingReflection(value, "Request"); var response = AgentUtil.FetchPropertyUsingReflection(value, "Response"); if (request is HttpRequestMessage httpRequestMessage && response is HttpResponseMessage httpResponseMessage) { if (CurrentHttpRequestMessages.TryRemove(httpRequestMessage, out _)) { HttpRequestUtil.ProcessResponse(httpResponseMessage); // End subsegment here HttpRequestUtil.EndSubsegment(); } } }
/// <summary> /// Process http response /// </summary> private void OnEventStop(object value) { var request = AgentUtil.FetchPropertyUsingReflection(value, "Request"); var response = AgentUtil.FetchPropertyUsingReflection(value, "Response"); if (request is HttpWebRequest webRequest && response is HttpWebResponse webResponse) { if (CurrentHttpWebRequests.TryRemove(webRequest, out var currentSubsegment)) { if (webResponse != null) { HttpRequestUtil.ProcessResponse(webResponse.StatusCode, webResponse.ContentLength, currentSubsegment); } HttpRequestUtil.EndSubsegment(currentSubsegment); } } }