private void ProcessEnd(WebResponseMessage message, HttpContext httpContext) { var request = httpContext.Request; var response = httpContext.Response; // build message message.Url = $"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}"; // TODO: check if there is a better way of doing this message.Headers = response.Headers.ToDictionary(h => h.Key, h => h.Value); message.StatusCode = response.StatusCode; message.StatusMessage = ""; // TODO: need to fetch var webBody = (object)null; if (httpContext.Items.TryGetValue("__GlimpseCoreWebBody", out webBody)) { message.Body = webBody as WebBody; } // add timing data var timing = _broker.EndLogicalOperation <WebRequestMessage>(); if (timing != null) { message.Duration = Math.Round(timing.Elapsed.TotalMilliseconds, 2); message.EndTime = timing.End.ToUniversalTime(); } else { // in this case still want to publish but setting duration to 0 message.Duration = 0.0; message.EndTime = DateTime.UtcNow; _logger.LogCritical("ProcessEndRequest: Still published `WebResponseMessage` but couldn't find `BeginRequestMessage` in stack"); } }
public void OnEndRequest(HttpContext httpContext) { var message = new WebResponseMessage(); ProcessEnd(message, httpContext); _broker.SendMessage(message); }