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"); } } } }
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(); }
/// <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; }
/// <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"); } } } }
/// <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); }