Ejemplo n.º 1
0
        public async Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
        {
            var response = new HttpTrackerResponse();

            if (httpTrackerLog == null)
            {
                response.IsFailed("HttpTrackerLog is null");
                return(response);
            }

            try
            {
                var collection = Database.GetCollection <HttpTrackerLog>(CollectionName);

                // 解决时区问题
                httpTrackerLog.CreationTime = DateTime.SpecifyKind(httpTrackerLog.CreationTime, DateTimeKind.Utc);

                await collection.InsertOneAsync(httpTrackerLog);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
Ejemplo n.º 2
0
        public async Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
        {
            var response = new HttpTrackerResponse();

            if (httpTrackerLog == null)
            {
                response.IsFailed("HttpTrackerLog is null");
                return(response);
            }

            try
            {
                await Client.IndexAsync(httpTrackerLog, x => x.Index(IndexName));
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
        public async Task InsertAsync()
        {
            var factory    = Services.BuildServiceProvider().GetRequiredService <IHttpTrackerLogRepositoryFactory>();
            var repository = factory.CreateInstance(HttpTrackerInstance.InstanceName);

            Assert.NotNull(repository);

            var log = new HttpTrackerLog
            {
                Type          = HttpTrackerLog.Types.Debug,
                Description   = "this is a test",
                UserAgent     = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.85 Safari/537.36 Edg/84.0.522.35",
                Method        = "GET",
                Url           = "https://meowv.com",
                Referrer      = "https://meowv.com",
                IpAddress     = "192.168.1.111",
                Milliseconds  = new Random().Next(1, 9999),
                QueryString   = "",
                RequestBody   = "",
                Cookies       = "",
                Headers       = "",
                StatusCode    = 200,
                ResponseBody  = "我是返回数据",
                ServerName    = "test",
                PId           = Process.GetCurrentProcess()?.Id,
                Host          = "192.168.1.1",
                Port          = 5000,
                ExceptionType = "",
                Message       = "",
                StackTrace    = ""
            };

            var response = await repository.InsertAsync(log);

            Assert.True(response.Success);
        }
Ejemplo n.º 4
0
        public async Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
        {
            var response = new HttpTrackerResponse();

            if (httpTrackerLog == null)
            {
                response.IsFailed("HttpTrackerLog is null");
                return(response);
            }

            try
            {
                var sql = $@"INSERT INTO {TableName}(Type ,Description ,UserAgent ,Method ,Url ,Referrer ,IpAddress ,Milliseconds ,QueryString ,RequestBody ,Cookies ,Headers ,StatusCode ,ResponseBody ,ServerName ,PId ,Host ,Port ,ExceptionType ,Message ,StackTrace ,CreationTime) VALUES (@Type, @Description, @UserAgent, @Method, @Url, @Referrer, @IpAddress, @Milliseconds, @QueryString, @RequestBody, @Cookies, @Headers, @StatusCode, @ResponseBody, @ServerName, @PId, @Host, @Port, @ExceptionType, @Message, @StackTrace, @CreationTime);";

                using var conn = _dbConnectionProvider.Connection;
                await conn.ExecuteAsync(sql, httpTrackerLog);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
Ejemplo n.º 5
0
        public async Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
        {
            var response = new HttpTrackerResponse();

            if (httpTrackerLog == null)
            {
                response.IsFailed("HttpTrackerLog is null");
                return(response);
            }

            try
            {
                var sql = $@"INSERT INTO [dbo].[{TableName}] ([Type] ,[Description] ,[UserAgent] ,[Method] ,[Url] ,[Referrer] ,[IpAddress] ,[Milliseconds] ,[QueryString] ,[RequestBody] ,[Cookies] ,[Headers] ,[StatusCode] ,[ResponseBody] ,[ServerName] ,[PId] ,[Host] ,[Port] ,[ExceptionType] ,[Message] ,[StackTrace] ,[CreationTime]) VALUES (@Type, @Description, @UserAgent, @Method, @Url, @Referrer, @IpAddress, @Milliseconds, @QueryString, @RequestBody, @Cookies, @Headers, @StatusCode, @ResponseBody, @ServerName, @PId, @Host, @Port, @ExceptionType, @Message, @StackTrace, @CreationTime);";

                using var conn = _dbConnectionProvider.Connection;
                await conn.ExecuteAsync(sql, httpTrackerLog);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
Ejemplo n.º 6
0
        public async Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
        {
            var response = new HttpTrackerResponse();

            if (httpTrackerLog == null)
            {
                response.IsFailed("HttpTrackerLog is null");
                return(response);
            }

            try
            {
                var sql = $@"INSERT INTO `{TableName}`(`Type`, `Description`, `UserAgent`, `Method`, `Url`, `Referrer`, `IpAddress`, `Milliseconds`, `QueryString`, `RequestBody`, `Cookies`, `Headers`, `StatusCode`, `ResponseBody`, `ServerName`, `PId`, `Host`, `Port`, `ExceptionType`, `Message`, `StackTrace`, `CreationTime`) VALUES (@Type, @Description, @UserAgent, @Method, @Url, @Referrer, @IpAddress, @Milliseconds, @QueryString, @RequestBody, @Cookies, @Headers, @StatusCode, @ResponseBody, @ServerName, @PId, @Host, @Port, @ExceptionType, @Message, @StackTrace, @CreationTime);";

                using var conn = _dbConnectionProvider.Connection;
                await conn.ExecuteAsync(sql, httpTrackerLog);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
Ejemplo n.º 7
0
 public Task <HttpTrackerResponse> InsertAsync(HttpTrackerLog httpTrackerLog)
 {
     throw new NotImplementedException();
 }
        public async Task InvokeAsync(HttpContext context)
        {
            var endpoint = context.Features.Get <IEndpointFeature>()?.Endpoint;

            if (endpoint == null || FilterRequest(context) || DisabledRequestTracker(endpoint, out string description))
            {
                await _next(context);

                return;
            }

            var originalBodyStream   = context.Response.Body;
            var responseMemoryStream = new MemoryStream();

            var stopwatch = Stopwatch.StartNew();

            stopwatch.Start();

            try
            {
                context.Response.Body = responseMemoryStream;

                await _next(context);
            }
            catch (Exception ex)
            {
                log.ExceptionType = ex?.GetType().ToString();
                log.Message       = ex?.Message;
                log.StackTrace    = ex?.StackTrace;
            }
            finally
            {
                stopwatch.Stop();

                log = new HttpTrackerLog()
                {
                    Type         = HttpTrackerLog.Types.Debug,
                    Description  = description,
                    UserAgent    = context.GetUserAgent(),
                    Method       = context.GetHttpMethod(),
                    Url          = context.GetAbsoluteUri(),
                    Referrer     = context.GetReferer(),
                    IpAddress    = context.GetIpAddress(),
                    Milliseconds = Convert.ToInt32(stopwatch.ElapsedMilliseconds),
                    QueryString  = context.GetQueryString(),
                    RequestBody  = await context.GetRequestBodyAsync(),
                    Cookies      = context.GetCookies(),
                    Headers      = context.GetHeaders(),
                    StatusCode   = context.GetStatusCode(),
                    ResponseBody = await context.GetResponseBodyAsync(),
                    ServerName   = Options.ServerName,
                    PId          = Process.GetCurrentProcess()?.Id,
                    Host         = Options.ServerHost,
                    Port         = Options.ServerPort
                };

                await responseMemoryStream.CopyToAsync(originalBodyStream);

                responseMemoryStream.Dispose();

                var repository = _factory.CreateInstance(HttpTrackerInstance.InstanceName);
                await repository.InsertAsync(log);
            }
        }