示例#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);
        }
示例#2
0
        public async Task <HttpTrackerResponse> InitAsync()
        {
            var response = new HttpTrackerResponse();

            try
            {
                using var conn = _dbConnectionProvider.Connection;
                var sql = $@"IF NOT EXISTS (SELECT * from sysobjects where id = object_id('{TableName}'))
                             BEGIN
                                 CREATE TABLE [dbo].[{TableName}](
	                                 [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
	                                 [Type] [nvarchar](20) NOT NULL,
	                                 [Description] [nvarchar](200) NULL,
	                                 [UserAgent] [nvarchar](200) NULL,
	                                 [Method] [nvarchar](20) NOT NULL,
	                                 [Url] [nvarchar](200) NOT NULL,
	                                 [Referrer] [nvarchar](200) NULL,
	                                 [IpAddress] [nvarchar](20) NOT NULL,
	                                 [Milliseconds] [int] NOT NULL,
	                                 [QueryString] [nvarchar](200) NULL,
	                                 [RequestBody] [nvarchar](max) NULL,
	                                 [Cookies] [nvarchar](max) NULL,
	                                 [Headers] [nvarchar](max) NULL,
	                                 [StatusCode] [int] NOT NULL,
	                                 [ResponseBody] [nvarchar](max) NULL,
	                                 [ServerName] [nvarchar](50) NULL,
	                                 [PId] [int] NULL,
	                                 [Host] [nvarchar](20) NULL,
	                                 [Port] [int] NULL,
	                                 [ExceptionType] [nvarchar](50) NULL,
	                                 [Message] [nvarchar](200) NULL,
	                                 [StackTrace] [nvarchar](max) NULL,
	                                 [CreationTime] [datetime] NOT NULL
                                 )
                             END";
                await conn.ExecuteAsync(sql);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
示例#3
0
        public async Task <HttpTrackerResponse> InitAsync()
        {
            var response = new HttpTrackerResponse();

            try
            {
                using var conn = _dbConnectionProvider.Connection;

                var sql = $@"CREATE TABLE IF NOT EXISTS `{TableName}` (
                               `Id` int(11) NOT NULL AUTO_INCREMENT,
                               `Type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                               `Description` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `UserAgent` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `Method` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                               `Url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                               `Referrer` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `IpAddress` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                               `Milliseconds` int(11) NOT NULL,
                               `QueryString` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `RequestBody` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
                               `Cookies` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
                               `Headers` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
                               `StatusCode` int(11) NOT NULL,
                               `ResponseBody` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
                               `ServerName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `PId` int(11) NULL DEFAULT NULL,
                               `Host` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `Port` int(11) NULL DEFAULT NULL,
                               `ExceptionType` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `Message` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
                               `StackTrace` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
                               `CreationTime` datetime(0) NOT NULL,
                               PRIMARY KEY (`Id`) USING BTREE
                             ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;";
                await conn.ExecuteAsync(sql);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
示例#4
0
        public async Task <HttpTrackerResponse> InitAsync()
        {
            var response = new HttpTrackerResponse();

            try
            {
                using var conn = _dbConnectionProvider.Connection;

                var sql = $@"create table if not exists {TableName}(
                                Id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
                                Type text(20) NOT NULL,
                                Description text(200),
                                UserAgent text(200),
                                Method text(20) NOT NULL,
                                Url text(200) NOT NULL,
                                Referrer text(200),
                                IpAddress text(20) NOT NULL,
                                Milliseconds integer NOT NULL,
                                QueryString text(200),
                                RequestBody text,
                                Cookies text,
                                Headers text,
                                StatusCode integer NOT NULL,
                                ResponseBody text,
                                ServerName text(50),
                                PId integer,
                                Host text(20),
                                Port integer,
                                ExceptionType text(50),
                                Message text(200),
                                StackTrace text,
                                CreationTime text(7) NOT NULL
                             )";
                await conn.ExecuteAsync(sql);
            }
            catch (Exception ex)
            {
                response.IsFailed(ex);
            }

            return(response);
        }
示例#5
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);
        }
示例#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);
        }
示例#7
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);
        }
示例#8
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);
        }
示例#9
0
        public async Task <HttpTrackerResponse <PagedList <HttpTrackerLogDto> > > QueryAsync(QueryInput input)
        {
            var response = new HttpTrackerResponse <PagedList <HttpTrackerLogDto> >();

            var builder = new StringBuilder();

            if (!string.IsNullOrEmpty(input.Type))
            {
                builder.Append($" AND Type LIKE @Type");

                input.Type = $"%{input.Type}%";
            }
            if (!string.IsNullOrEmpty(input.Keyword))
            {
                builder.Append($" AND Description LIKE @Keyword");

                input.Keyword = $"%{input.Keyword}%";
            }

            var where = builder.ToString();

            var sql = $@"SELECT COUNT(1) FROM {TableName} WHERE 1 = 1 {where};
                         SELECT Type, Description, UserAgent, Method, Url , Referrer, IpAddress, Milliseconds, QueryString, RequestBody , Cookies, Headers, StatusCode, ResponseBody, ServerName , PId, Host, Port, ExceptionType, Message , StackTrace, CreationTime FROM {TableName} WHERE 1 = 1 ORDER BY CreationTime DESC LIMIT @page,@limit";

            using var conn = _dbConnectionProvider.Connection;

            input.Page = (input.Page - 1) * input.Limit;

            var query = await conn.QueryMultipleAsync(sql, input);

            var total = await query.ReadFirstOrDefaultAsync <long>();

            var logs = await query.ReadAsync <HttpTrackerLog>();

            var list = logs.Select(x => new HttpTrackerLogDto
            {
                Type        = x.Type,
                Description = x.Description,
                Request     = new RequestInfo
                {
                    UserAgent    = x.UserAgent,
                    Method       = x.Method,
                    Url          = x.Url,
                    Referrer     = x.Referrer,
                    IpAddress    = x.IpAddress,
                    Milliseconds = x.Milliseconds,
                    RequestBody  = x.RequestBody,
                    Cookies      = x.Cookies,
                    Headers      = x.Headers
                },
                Response = new ResponseInfo
                {
                    StatusCode   = x.StatusCode,
                    ResponseBody = x.ResponseBody
                },
                Server = new ServerInfo
                {
                    ServerName = x.ServerName,
                    PId        = x.PId,
                    Host       = x.Host,
                    Port       = x.Port
                },
                Exception = new ExceptionInfo
                {
                    ExceptionType = x.ExceptionType,
                    Message       = x.Message,
                    StackTrace    = x.StackTrace
                },
                CreationTime = x.CreationTime
            }).ToList();

            response.IsSuccess(new PagedList <HttpTrackerLogDto>(Convert.ToInt32(total), list));
            return(response);
        }
示例#10
0
        public async Task <HttpTrackerResponse <PagedList <HttpTrackerLogDto> > > QueryAsync(QueryInput input)
        {
            var response = new HttpTrackerResponse <PagedList <HttpTrackerLogDto> >();

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

            var query = collection.AsQueryable();

            if (!string.IsNullOrEmpty(input.Type))
            {
                query = query.Where(x => x.Type.Contains(input.Type));
            }
            if (!string.IsNullOrEmpty(input.Keyword))
            {
                query = query.Where(x => x.Description.Contains(input.Keyword));
            }

            var total = await query.CountAsync();

            var list = await query.OrderByDescending(x => x.CreationTime)
                       .Skip((input.Page - 1) * input.Limit)
                       .Take(input.Limit)
                       .Select(x => new HttpTrackerLogDto
            {
                Type        = x.Type,
                Description = x.Description,
                Request     = new RequestInfo
                {
                    UserAgent    = x.UserAgent,
                    Method       = x.Method,
                    Url          = x.Url,
                    Referrer     = x.Referrer,
                    IpAddress    = x.IpAddress,
                    Milliseconds = x.Milliseconds,
                    RequestBody  = x.RequestBody,
                    Cookies      = x.Cookies,
                    Headers      = x.Headers
                },
                Response = new ResponseInfo
                {
                    StatusCode   = x.StatusCode,
                    ResponseBody = x.ResponseBody
                },
                Server = new ServerInfo
                {
                    ServerName = x.ServerName,
                    PId        = x.PId,
                    Host       = x.Host,
                    Port       = x.Port
                },
                Exception = new ExceptionInfo
                {
                    ExceptionType = x.ExceptionType,
                    Message       = x.Message,
                    StackTrace    = x.StackTrace
                },
                CreationTime = x.CreationTime
            }).ToListAsync();

            response.IsSuccess(new PagedList <HttpTrackerLogDto>(total, list));
            return(response);
        }
示例#11
0
        public async Task <HttpTrackerResponse <PagedList <HttpTrackerLogDto> > > QueryAsync(QueryInput input)
        {
            var response = new HttpTrackerResponse <PagedList <HttpTrackerLogDto> >();

            var query = new List <QueryContainer>();

            if (!string.IsNullOrEmpty(input.Type))
            {
                query.Add(new MatchPhraseQuery
                {
                    Field = new Field("type"),
                    Query = input.Type
                });
            }
            if (!string.IsNullOrEmpty(input.Keyword))
            {
                query.Add(new MatchPhraseQuery
                {
                    Field = new Field("description"),
                    Query = input.Keyword
                });
            }

            var searchResponse = await Client.SearchAsync <HttpTrackerLog>(x => x.Index(IndexName)
                                                                           .From((input.Page - 1) * input.Limit)
                                                                           .Size(input.Limit)
                                                                           .Query(x => x.Bool(x => x.Should(query.ToArray())))
                                                                           .Sort(s => s.Descending(x => x.CreationTime)));

            var total = Convert.ToInt32(searchResponse.Total);
            var list  = searchResponse.Documents
                        .Select(x => new HttpTrackerLogDto
            {
                Type        = x.Type,
                Description = x.Description,
                Request     = new RequestInfo
                {
                    UserAgent    = x.UserAgent,
                    Method       = x.Method,
                    Url          = x.Url,
                    Referrer     = x.Referrer,
                    IpAddress    = x.IpAddress,
                    Milliseconds = x.Milliseconds,
                    RequestBody  = x.RequestBody,
                    Cookies      = x.Cookies,
                    Headers      = x.Headers
                },
                Response = new ResponseInfo
                {
                    StatusCode   = x.StatusCode,
                    ResponseBody = x.ResponseBody
                },
                Server = new ServerInfo
                {
                    ServerName = x.ServerName,
                    PId        = x.PId,
                    Host       = x.Host,
                    Port       = x.Port
                },
                Exception = new ExceptionInfo
                {
                    ExceptionType = x.ExceptionType,
                    Message       = x.Message,
                    StackTrace    = x.StackTrace
                },
                CreationTime = x.CreationTime
            }).ToList();

            response.IsSuccess(new PagedList <HttpTrackerLogDto>(total, list));
            return(response);
        }