public HttpResponseMessageLogWriter(ILogger <HttpResponseMessageLogWriter> logger,
                                     ITrafficCometMiddlewaresAccessor trafficCometMiddlewaresAccessor,
                                     IWebEventBodyDocumentWriter webEventBodyDocumentWriter,
                                     IHttpContentReader httpContentReader)
     : base(logger, trafficCometMiddlewaresAccessor, webEventBodyDocumentWriter, httpContentReader)
 {
 }
示例#2
0
        public IEnumerable <string> Get([FromServices] ITrafficCometMiddlewaresAccessor cometAccessor)
        {
            cometAccessor.CustomParams.Add("Test custom param", "test value");
            cometAccessor.RequestCustomParams.Add("Request test custom param", "test value");
            cometAccessor.ResponseCustomParams.Add("Response test custom param", "test value");

            return(new string[] { "value1", "value2" });
        }
示例#3
0
        public async Task Invoke(HttpContext httpContext, ITrafficCometMiddlewaresAccessor trafficCometAccessor,
                                 IDynamicBodyReader dynamicBodyReader, IOptionsSnapshot <RequestReadMiddlewareConfig> config)
        {
            if (trafficCometAccessor == null)
            {
                throw new ArgumentNullException(nameof(trafficCometAccessor));
            }

            if (dynamicBodyReader == null)
            {
                throw new ArgumentNullException(nameof(dynamicBodyReader));
            }

            TrafficCometMiddlewaresAccessor internalTrafficCometAccessor = (TrafficCometMiddlewaresAccessor)trafficCometAccessor;

            internalTrafficCometAccessor.IgnoreRequest = !internalTrafficCometAccessor.IgnoreWholeRequest &&
                                                         config.IgnoreRequest(httpContext.Request.Path);

            if (!internalTrafficCometAccessor.IgnoreRequest)
            {
                MemoryStream originalRequestBody = new MemoryStream();
                await httpContext.Request.Body.CopyToAsync(originalRequestBody);

                originalRequestBody.Position = 0L;

                try
                {
                    httpContext.Request.EnableRewind();
                    using (var buffer = new MemoryStream())
                    {
                        await originalRequestBody.CopyToAsync(buffer);

                        originalRequestBody.Position = 0L;

                        var bodyCompressed = httpContext.RequestBodyIsCompressed(out string compressionType);
                        internalTrafficCometAccessor.RequestBody = dynamicBodyReader
                                                                   .ReadBody(buffer, bodyCompressed, compressionType);
                    }
                }
                catch (Exception ex)
                {
                    if (Logger != null && Logger.IsEnabled(LogLevel.Error))
                    {
                        Logger.LogError(new EventId(90, $"TrafficComet.{nameof(RequestReadMiddleware)}"), ex, ex.ToString());
                    }
                }
                finally
                {
                    httpContext.Request.Body = originalRequestBody;
                }
                await Next(httpContext);
            }
            else
            {
                await Next(httpContext);
            }
        }
示例#4
0
        public ResponseLogFactory(IHttpContextAccessor httpContextAccessor, IOptions <ResponseLogFactoryConfig> config,
                                  ITrafficCometMiddlewaresAccessor trafficCometAccessor)
        {
            HttpContextAccessor = httpContextAccessor
                                  ?? throw new ArgumentNullException(nameof(httpContextAccessor));

            TrafficCometAccessor = trafficCometAccessor
                                   ?? throw new ArgumentNullException(nameof(trafficCometAccessor));

            Config = config;
        }
示例#5
0
        public ClientLogFactory(IHttpContextAccessor httpContextAccessor,
                                ITrafficCometMiddlewaresAccessor trafficCometAccessor, IIpAddressReader addressIpReader)
        {
            HttpContextAccessor = httpContextAccessor
                                  ?? throw new ArgumentNullException(nameof(httpContextAccessor));

            TrafficCometAccessor = trafficCometAccessor
                                   ?? throw new ArgumentNullException(nameof(trafficCometAccessor));

            AddressIpReader = addressIpReader
                              ?? throw new ArgumentNullException(nameof(addressIpReader));
        }
        public HttpMessageLogWriter(ILogger <TMessageLogWriter> logger,
                                    ITrafficCometMiddlewaresAccessor trafficCometMiddlewaresAccessor,
                                    IWebEventBodyDocumentWriter webEventBodyDocumentWriter,
                                    IHttpContentReader httpContentReader)
        {
            Logger = logger
                     ?? throw new ArgumentNullException(nameof(logger));

            TrafficCometMiddlewaresAccessor = trafficCometMiddlewaresAccessor
                                              ?? throw new ArgumentNullException(nameof(trafficCometMiddlewaresAccessor));

            WebEventBodyDocumentWriter = webEventBodyDocumentWriter
                                         ?? throw new ArgumentNullException(nameof(webEventBodyDocumentWriter));

            HttpContentReader = httpContentReader
                                ?? throw new ArgumentNullException(nameof(httpContentReader));
        }
示例#7
0
        public TrafficLogFactory(IRequestLogFactory requestLogFactory,
                                 IResponseLogFactory responseLogFactory, IDatesTrafficFactory datesTrafficFactory,
                                 IClientLogFactory clientLogFactory, IServerLogFactory serverLogFactory,
                                 ITrafficCometMiddlewaresAccessor trafficCometAccessor)
        {
            RequestLogFactory = requestLogFactory
                                ?? throw new ArgumentNullException(nameof(requestLogFactory));

            ResponseLogFactory = responseLogFactory
                                 ?? throw new ArgumentNullException(nameof(responseLogFactory));

            DatesTrafficFactory = datesTrafficFactory
                                  ?? throw new ArgumentNullException(nameof(datesTrafficFactory));

            ClientLogFactory = clientLogFactory
                               ?? throw new ArgumentNullException(nameof(clientLogFactory));

            ServerLogFactory = serverLogFactory
                               ?? throw new ArgumentNullException(nameof(serverLogFactory));

            TrafficCometMiddlewaresAccessor = trafficCometAccessor
                                              ?? throw new ArgumentNullException(nameof(trafficCometAccessor));
        }
示例#8
0
        internal static RequestLogFactory CreateRequestLogFactory(IHttpContextAccessor httpContextAccessor        = null,
                                                                  RequestLogFactoryConfig requestLogFactoryConfig = null, ITrafficCometMiddlewaresAccessor trafficCometMiddlewaresAccessor = null)
        {
            if (httpContextAccessor == null)
            {
                httpContextAccessor = CreateHttpContextAccessor();
            }

            var options = CreateOptionsForRequestLogFactory(requestLogFactoryConfig);

            if (trafficCometMiddlewaresAccessor == null)
            {
                trafficCometMiddlewaresAccessor = ITrafficCometMiddlewaresAccessorMockFactory.CreateObjectMock(
                    requestCustomParams: MockStaticData.RequestCustomParams,
                    responseCustomParams: MockStaticData.ResponseCustomParams);
            }

            var requestLogFactory = new RequestLogFactory(httpContextAccessor, options, trafficCometMiddlewaresAccessor);

            return(requestLogFactory);
        }
示例#9
0
 public DatesTrafficFactory(ITrafficCometMiddlewaresAccessor trafficCometMiddlewaresAccessor)
 {
     TrafficCometMiddlewaresAccessor = trafficCometMiddlewaresAccessor
                                       ?? throw new ArgumentNullException(nameof(trafficCometMiddlewaresAccessor));
 }
示例#10
0
        public async Task Invoke(HttpContext httpContext, ITrafficCometMiddlewaresAccessor trafficCometAccessor,
                                 ITrafficLogWriter logWriter, ITrafficLogFactory logFactory, ITraceIdGenerator traceIdGenerator,
                                 IClientIdGenerator clientUniqueIdGenerator, IOptionsSnapshot <TrafficCometMiddlewareConfig> config)
        {
            if (trafficCometAccessor == null)
            {
                throw new ArgumentNullException(nameof(trafficCometAccessor));
            }

            if (logWriter == null)
            {
                throw new ArgumentNullException(nameof(logWriter));
            }

            if (logFactory == null)
            {
                throw new ArgumentNullException(nameof(logFactory));
            }

            if (traceIdGenerator == null)
            {
                throw new ArgumentNullException(nameof(traceIdGenerator));
            }

            if (clientUniqueIdGenerator == null)
            {
                throw new ArgumentNullException(nameof(clientUniqueIdGenerator));
            }

            TrafficCometMiddlewaresAccessor internalTrafficCometAccessor = (TrafficCometMiddlewaresAccessor)trafficCometAccessor;

            internalTrafficCometAccessor.InitContextValues();
            internalTrafficCometAccessor.ApplicationId      = config.Value.ApplicationId;
            internalTrafficCometAccessor.IgnoreWholeRequest = config.IgnoreRequest(httpContext.Request.Path);

            var clientIdReaded = clientUniqueIdGenerator.TryGenerateClientId(out string clientId);
            var traceIdReaded  = traceIdGenerator.TryGenerateTraceId(out string traceId);

            if (!internalTrafficCometAccessor.IgnoreWholeRequest && clientIdReaded && traceIdReaded)
            {
                BeforeExecuteNextMiddleware(ref internalTrafficCometAccessor, clientId, traceId);
                await Next(httpContext);

                try
                {
                    AfterExecutedNextMiddleware(ref internalTrafficCometAccessor);
                    var ignoreRequest  = internalTrafficCometAccessor.IgnoreRequest;
                    var ignoreResponse = internalTrafficCometAccessor.IgnoreResponse;

                    var log = logFactory.Create();
                    if (log != null)
                    {
                        _ = logWriter.SaveLog(log);
                    }
                }
                catch (Exception ex)
                {
                    if (Logger != null && Logger.IsEnabled(LogLevel.Error))
                    {
                        Logger.LogError(new EventId(92, $"TrafficComet.{nameof(TrafficCometMiddleware)}"), ex, ex.ToString());
                    }
                }
            }
            else
            {
                await Next(httpContext);
            }
        }