Exemple #1
0
 public async Task ExceptionIndiactor(HttpContext httpContext, RequestLogModel requestLog, Exception ex)
 {
     Entities.RequestLog request;
     if (IgnoreRequest(requestLog.Path))
     {
         request = requestLog.SavedLog as Entities.RequestLog;
         _dbContext.RequestLogs.Add(request);
         await _dbContext.SaveChangesAsync();
     }
     else
     {
         request = await _dbContext.RequestLogs.FindAsync(requestLog.Id);
     }
     try
     {
         request.ResponseStatusCode = httpContext.Response.StatusCode;
         request.ExceptionMessage   = ex.GetFullMessage();
         request.ExceptionTitle     = ex.Message;
         request.HadException       = true;
         request.Failed             = true;
         _stopwatch.Stop();
         request.ProcessDuration = _stopwatch.Elapsed.TotalSeconds;
         await _dbContext.SaveChangesAsync();
     }
     catch (Exception loggingException)
     {
         _logger.LogError(ex, "An error occured while processing the request.");
         _logger.LogError(loggingException, "Additionally, an error occured while logging it to database.");
     }
 }
Exemple #2
0
        public async Task Invoke(HttpContext httpContext, RequestLogger requestLogger)
        {
            var log = new RequestLogModel();

            try
            {
                log = await requestLogger.RequestIndiactor(httpContext);

                using (var memStream = new MemoryStream())
                {
                    var originalResponseBody = httpContext.Response.Body;
                    httpContext.Response.Body = memStream;

                    httpContext.Items.Add("RequestLog", log);
                    await _next(httpContext);

                    memStream.Position = 0;
                    log.Response       = new StreamReader(memStream).ReadToEnd();
                    memStream.Position = 0;
                    await memStream.CopyToAsync(originalResponseBody);

                    httpContext.Response.Body = originalResponseBody;
                }
                await requestLogger.ResponseIndiactor(httpContext, log);
            }
            catch (Exception ex)
            {
                await requestLogger.ExceptionIndiactor(httpContext, log, ex);

                throw;
            }
        }
Exemple #3
0
 public static iAFWebHost.Models.RequestLogModel Map(Entities.RequestLog entity)
 {
     iAFWebHost.Models.RequestLogModel model = new RequestLogModel();
     model.Id = entity.Id;
     model.DT = entity.DT;
     model.Raw = entity.Raw;
     model.Referrer = entity.Referrer;
     model.RemoteIP = entity.RemoteIP;
     model.RequestUrl = entity.RequestUrl;
     return model;
 }
Exemple #4
0
 public static iAFWebHost.Models.RequestLogModel Map(Entities.RequestLog entity)
 {
     iAFWebHost.Models.RequestLogModel model = new RequestLogModel();
     model.Id         = entity.Id;
     model.DT         = entity.DT;
     model.Raw        = entity.Raw;
     model.Referrer   = entity.Referrer;
     model.RemoteIP   = entity.RemoteIP;
     model.RequestUrl = entity.RequestUrl;
     return(model);
 }
Exemple #5
0
        public RequestLogModel Add(RequestLogModel requestLog)
        {
            var sql =
                @"
				insert into [dbo].[RequestLogs] 
				(
					[StartTime],
					[UserId],
					[Path],
					[Method],
					[Body],
					[RequestSize],
					[IpAddress],
					[ProcessDuration],
					[Failed],
					[HadException],
					[Response],
					[ResponseStatusCode],
					[ResponseSize],
					[ExceptionTitle],
					[ExceptionMessage]
				) VALUES
				(
					@StartTime,
					@UserId,
					@Path,
					@Method,
					@Body,
					@RequestSize,
					@IpAddress,
					@ProcessDuration,
					@Failed,
					@HadException,
					@Response,
					@ResponseStatusCode,
					@ResponseSize,
					@ExceptionTitle,
					@ExceptionMessage
				);"                 + "SELECT CAST(SCOPE_IDENTITY() as int)";

            using var db = new SqlConnection(_connectionString);
            var id = db.Query <int>(sql, requestLog).Single();

            requestLog.Id = id;
            return(requestLog);
        }
 public void ResponseIndiactor(HttpContext httpContext, RequestLogModel requestLog)
 {
     if (_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier) != null)
     {
         requestLog.UserId = int.Parse(_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier));
     }
     requestLog.ResponseStatusCode = httpContext.Response.StatusCode;
     requestLog.ResponseSize       = httpContext.Response.ContentLength;
     if (requestLog.ResponseSize > 5000)
     {
         requestLog.Response = "Too long";
     }
     requestLog.Failed = httpContext.Response.StatusCode != 200;
     _stopwatch.Stop();
     requestLog.ProcessDuration = _stopwatch.Elapsed.TotalMilliseconds;
     _requeustLogRepository.Update(requestLog);
 }
Exemple #7
0
        public void Update(RequestLogModel requestLog)
        {
            using var db = new SqlConnection(_connectionString);
            db.Query(@"
							update [dbo].[RequestLogs] 
							SET [ProcessDuration] = @ProcessDuration,
								[Failed] = @Failed,
								[HadException] = @HadException,
								[Response] = @Response,
								[ResponseStatusCode] = @ResponseStatusCode,
								[ResponseSize] = @ResponseSize,
								[ExceptionTitle] = @ExceptionTitle,
								[ExceptionMessage] = @ExceptionMessage,
								[UserId] = @UserId
							WHERE Id = @Id
							"                            ,
                     requestLog);
        }
        public async Task <RequestLogModel> RequestIndiactor(HttpContext httpContext)
        {
            _stopwatch.Start();
            var request = new RequestLogModel
            {
                IpAddress = httpContext.Connection.RemoteIpAddress.ToString(),
                Path      = httpContext.Request.Path,
                Method    = httpContext.Request.Method,
                StartTime = DateTime.Now,
            };

            if (httpContext.Request?.Body != null && !string.IsNullOrWhiteSpace(httpContext.Request.ContentType) &&
                !httpContext.Request.ContentType.StartsWith("multipart/form-data", StringComparison.InvariantCultureIgnoreCase))
            {
                #region Get Request Body
                // This condition is because I dont want to save usurs password into my database

                request.Body = await new StreamReader(httpContext.Request.Body).ReadToEndAsync();
                var injectedRequestStream = new MemoryStream();
                var bytesToWrite          = Encoding.UTF8.GetBytes(request.Body);
                injectedRequestStream.Write(bytesToWrite, 0, bytesToWrite.Length);
                injectedRequestStream.Seek(0, SeekOrigin.Begin);
                httpContext.Request.Body = injectedRequestStream;

                if (request.Body.Contains("password\":"))
                {
                    request.Body = "Not visible(password is in content)";
                }
                #endregion
            }

            request.RequestSize = httpContext.Request.ContentLength;
            request.Id          = _requeustLogRepository.Add(request).Id;
            return(new RequestLogModel
            {
                Id = request.Id,
                Body = request.Body,
                IpAddress = request.IpAddress,
                Method = request.Method,
                Path = request.Path,
                StartTime = request.StartTime,
                UserId = request.UserId,
            });
        }
        public RestApiFacade WriteReqLog()
        {
            this._reqLog = new RequestLogModel
            {
                LogId            = _id,
                ClassName        = this._executeModel.ClassName,
                MethodName       = this._executeModel.MethodName,
                ExecuteParameter = this._executeModel.ExecuteParameter,
            };

            if (!String.IsNullOrEmpty(this._executeModel.UaString))
            {
                this._reqLog.UserAgent = (UserAgentModel)UserAgent.Parse(this._executeModel.UaString);
            }

            this._logger.Info(JsonConvert.SerializeObject(this._reqLog));

            return(this);
        }
 public void ExceptionIndiactor(HttpContext httpContext, RequestLogModel requestLog, Exception ex)
 {
     try
     {
         requestLog.ResponseStatusCode = httpContext.Response.StatusCode;
         requestLog.ExceptionMessage   = JsonConvert.SerializeObject(ex);
         requestLog.ExceptionTitle     = ex.Message;
         requestLog.HadException       = true;
         requestLog.Failed             = true;
         _stopwatch.Stop();
         requestLog.ProcessDuration = _stopwatch.Elapsed.TotalSeconds;
         _requeustLogRepository.Update(requestLog);
     }
     catch (Exception loggingException)
     {
         throw (loggingException);
         // STORE THE LOG ON DISC
     }
 }
Exemple #11
0
        public async Task ResponseIndiactor(HttpContext httpContext, RequestLogModel requestLog)
        {
            if (IgnoreRequest(requestLog.Path))
            {
                return;
            }
            var request = await _dbContext.RequestLogs.FindAsync(requestLog.Id);

            request.ResponseStatusCode = httpContext.Response.StatusCode;
            request.ResponseSize       = httpContext.Response.ContentLength;
            request.Failed             = httpContext.Response.StatusCode == 200 ? false : true;
            request.EntityTypeId       = ((RequestLogModel)httpContext.Items["RequestLog"]).EntityTypeId;
            request.PropertyId         = ((RequestLogModel)httpContext.Items["RequestLog"]).PropertyId;
            request.AppInstanceId      = ((RequestLogModel)httpContext.Items["RequestLog"]).AppInstanceId;
            request.AppTypeId          = ((RequestLogModel)httpContext.Items["RequestLog"]).AppTypeId;
            _stopwatch.Stop();
            request.ProcessDuration = _stopwatch.Elapsed.TotalSeconds;
            await _dbContext.SaveChangesAsync();
        }
        public async Task Invoke(HttpContext httpContext)
        {
            var log = new RequestLogModel();

            try
            {
                if (
                    httpContext.Request.Path != "/" &&
                    !httpContext.Request.Path.ToString().Contains(".js") &&
                    !httpContext.Request.Path.ToString().Contains(".mp3") &&
                    !httpContext.Request.Path.ToString().Contains(".ico") &&
                    !httpContext.Request.Path.ToString().Contains(".png"))
                {
                    log = await RequestIndiactor(httpContext);

                    using (var memStream = new MemoryStream())
                    {
                        var originalResponseBody = httpContext.Response.Body;
                        httpContext.Response.Body = memStream;
                        httpContext.Items.Add("RequestLog", log);

                        await _next(httpContext);

                        memStream.Position = 0;
                        log.Response       = new StreamReader(memStream).ReadToEnd();
                        memStream.Position = 0;
                        await memStream.CopyToAsync(originalResponseBody);

                        httpContext.Response.Body = originalResponseBody;
                    }
                    ResponseIndiactor(httpContext, log);
                }
                else
                {
                    await _next(httpContext);
                }
            }
            catch (Exception ex)
            {
                ExceptionIndiactor(httpContext, log, ex);
            }
        }