public override void ProcessEvent(string key, object value)
        {
            if (!STOP_EVENT.Equals(key))
            {
                return;
            }

            Activity current = Activity.Current;

            if (current == null)
            {
                return;
            }

            if (value == null)
            {
                return;
            }

            GetProperty(value, out IOwinContext context);

            if (context != null)
            {
                HttpTrace trace = MakeTrace(context, current.Duration);
                _queue.Enqueue(trace);

                if (_queue.Count > _options.Capacity)
                {
                    if (!_queue.TryDequeue(out HttpTrace discard))
                    {
                        _logger?.LogDebug("Stop - Dequeue failed");
                    }
                }
            }
        }
Пример #2
0
        public async Task InvokeAsync(HttpContext httpContext, Func <Task> next)
        {
            var   start = DateTime.Now;
            Route route = null;

            try
            {
                route = (Route)router.TryFindRoute(httpContext.Request);
                if (route != null)
                {
                    var message = await this.messageDeserializer.DeserializeMessageAsync <IMessage>(httpContext.Request, route);

                    var response = await messageBus.ExecuteAsync(message);

                    await responseWriter.WriteResponseAsync(response, httpContext.Response);
                }
                else
                {
                    throw new RouteNotFoundException(httpContext);
                }
            }
            catch (Exception exception)
            {
                await errorBus.HandleAsync(exception);

                await errorWriter.WriteErrorAsync(exception, httpContext.Response);
            }

            var trace = new HttpTrace(httpContext, start, DateTime.Now);
            await tracer.Trace(trace);

            // next if route not found  ?
            //if (route == null)
            //    await next();
        }
Пример #3
0
        /// <summary>
        /// Logs and saves an HTTP <see cref="ProxyRequest"/>
        /// </summary>
        /// <param name="request">The <see cref="ProxyRequest"/> to be traced, and logged.</param>
        public void TraceProxyRequest(ProxyRequest request)
        {
            var httpTrace = new HttpTrace
            {
                ClientIPAddress = request.IPAddress,
                ContentSize     = request.ContentLength,
                HttpCommand     = $"{request.Method} {request.RemoteUri} HTTP/{request.HttpVersion.ToString(2)}",
                RemoteUri       = new Uri(request.RemoteUri),
                RequestDate     = request.RequestDateTime,
                StatusCode      = request.StatusCode,
                Method          = request.Method
            };

            this.HttpTraceRepository.CreateTrace(httpTrace);
            this.HttpTraceRepository.SaveChanges();

            this.GUI.TraceViewModel.CurrentTrace = httpTrace;
        }
Пример #4
0
        /// <summary>
        /// Logs and saves an HTTP <see cref="SocketRequest"/>
        /// </summary>
        /// <param name="request">The <see cref="SocketRequest"/> to be traced, and logged.</param>
        public void TraceSocketRequest(SocketRequest request)
        {
            var httpTrace = new HttpTrace
            {
                ClientIPAddress = request.IPAddress,
                ContentSize     = request.ContentLength,
                HttpCommand     = request.HttpCommand,
                RemoteUri       = request.RemoteUri,
                RequestDate     = request.RequestDateTime,
                StatusCode      = request.StatusCode,
                Method          = request.Method
            };

            this.HttpTraceRepository.CreateTrace(httpTrace);
            this.HttpTraceRepository.SaveChanges();

            this.GUI.TraceViewModel.CurrentTrace = httpTrace;
        }
        public override void ProcessEvent(string key, object value)
        {
            Activity current = null;

            if (key == STOP_EVENT)
            {
                current = Activity.Current;
            }
            else if (key == STOP_EVENT_ACTIVITY_RESTORED)
            {
                current = DiagnosticHelpers.GetProperty <Activity>(value, "Activity");
            }
            else if (key == STOP_EVENT_ACTIVITY_LOST)
            {
                current = DiagnosticHelpers.GetProperty <Activity>(value, "activity");
            }

            if (current == null)
            {
                return;
            }

            HttpContext context = HttpContext.Current;

            if (context != null)
            {
                TimeSpan duration = current.Duration;
                if (duration.Ticks == 0)
                {
                    duration = DateTime.UtcNow - current.StartTimeUtc;
                }

                HttpTrace trace = MakeTrace(context, duration);
                _queue.Enqueue(trace);

                if (_queue.Count > _options.Capacity)
                {
                    if (!_queue.TryDequeue(out HttpTrace discard))
                    {
                        _logger?.LogDebug("Stop - Dequeue failed");
                    }
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Stores an <see cref="HttpTrace"/> in the database defined.
        /// </summary>
        /// <param name="trace">The HttpTrace to be stored</param>
        public void CreateTrace(HttpTrace trace)
        {
            trace.Id = Guid.NewGuid().ToString();

            this.Context.HttpTraces.Add(trace.Id, trace);
        }