コード例 #1
0
        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");
            }
        }
コード例 #2
0
        public void OnEndRequest(HttpContext httpContext)
        {
            var message = new WebResponseMessage();

            ProcessEnd(message, httpContext);

            _broker.SendMessage(message);
        }