/// <summary> /// SendAsync method implementation /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { var httpContext = _httpContextAccessor.HttpContext; // set required headers AddHeaderValue(request, HttpHeaderConstants.ClientCorrelationIdHeaderName, $"{MonitorMessageHelper.GetCurrentCorrelationId(httpContext)}"); AddHeaderValue(request, HttpConstants.ArchitectureMetadataName, $"{MonitorMessageHelper.GetCurrentArchitectureMetadata(httpContext)}"); // log request var monitorMessage = await MonitorMessageHelper.CreateForHttpClient(httpContext, request); if (!String.IsNullOrWhiteSpace(monitorMessage.CorrelationId)) { await _monitorLogger.WriteMessage(monitorMessage); } try { var response = await InnerSendAsync(request, cancellationToken); await MonitorMessageHelper.UpdateForHttpClient(monitorMessage, response); return(response); } catch (Exception ex) { await MonitorMessageHelper.UpdateForHttpClient(monitorMessage, null, ex); throw; } finally { // if this call is done from async process then flush monitor logger messages if (httpContext == null || String.IsNullOrWhiteSpace(httpContext.Request.Method)) { await _monitorLogger.Flush(false); } } }
/// <summary> /// class constructor /// </summary> public MonitorMessage() { ProcessName = MonitorMessageHelper.GetCurrentProcessName(); }