Пример #1
0
        /// <summary>
        /// 获取白名单外的获取请求总次数
        /// </summary>
        /// <param name="filterOption"></param>
        /// <returns></returns>
        public async Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption filterOption)
        {
            var ipFilter = $"({string.Join(",", filterOption.List.Select(x=> $"'{x}'" ))})";

            if (filterOption.InList)
            {
                ipFilter = "IP IN " + ipFilter;
            }
            else
            {
                ipFilter = "IP NOT IN " + ipFilter;
            }

            var sql = $"SELECT TOP 1 COUNT(1) FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter} Group By IP Order BY COUNT(1) Desc";

            TraceLogSql(sql);

            var max = await LoggingSqlOperation(async connection => await connection.QueryFirstOrDefaultAsync <int>(sql).ConfigureAwait(false));


            sql = $"SELECT COUNT(1) TOTAL FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter}";
            TraceLogSql(sql);
            var all = await LoggingSqlOperation(async connection => await connection.QueryFirstOrDefaultAsync <int>(sql).ConfigureAwait(false));

            return(max, all);
        }
Пример #2
0
        /// <summary>
        /// 获取白名单外的获取请求总次数
        /// </summary>
        /// <param name="filterOption"></param>
        /// <returns></returns>
        public async Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption filterOption)
        {
            var ipFilter = $"({string.Join(",", filterOption.List.Select(x=> $"'{x}'"))})";

            if (filterOption.InList)
            {
                ipFilter = "IP IN " + ipFilter;
            }
            else
            {
                ipFilter = "IP NOT IN " + ipFilter;
            }

            var sql = $"SELECT COUNT(1) TOTAL FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter} GROUP BY IP ORDER BY TOTAL DESC ";

            sql = BuildTopSql(sql, 1);

            TraceLogSql(sql);

            var max = await LoggingSqlOperation(async _ => await _.QueryFirstOrDefaultAsync <int>(sql));

            sql = $"SELECT COUNT(1) TOTAL FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter}";


            TraceLogSql(sql);
            var all = await LoggingSqlOperation(async _ => await _.QueryFirstOrDefaultAsync <int>(sql));

            return(max, all);
        }
Пример #3
0
        public async Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption option)
        {
            int All = 0; int Max = 0;

            var TotalResponse = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())

                                                                       .Query(c => c.HasDateWhere(option.StartTime, option.EndTime)

                                                                              && c.Terms(f => f.Field(e => e.StatusCode).Terms(option.StatusCodes))

                                                                              && c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant()))

                                                                              && c.Bool(f => f.MustNot(

                                                                                            e => e.Terms(m => m.Field(n => n.IP).Terms(option.List))

                                                                                            ))

                                                                              ).Size(0));

            if (TotalResponse != null && TotalResponse.IsValid)
            {
                All = Convert.ToInt32(TotalResponse.Total);
            }

            var MaxResponse = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                                     .Query(d =>

                                                                            d.HasDateWhere(option.StartTime, option.EndTime) &&
                                                                            d.Terms(f => f.Field(e => e.Node).Terms(option.Service)) &&
                                                                            d.Terms(f => f.Field(e => e.StatusCode).Terms(option.StatusCodes)) &&
                                                                            d.Bool(f => f.MustNot(e => e.Terms(m => m.Field(n => n.IP).Terms(option.List))))

                                                                            ).Aggregations(b =>

                                                                                           b.Terms("ip", c => c.Field(e => e.IP).Order(e => e.CountDescending()).Size(1))

                                                                                           ).Size(0));

            if (MaxResponse != null && MaxResponse.IsValid)
            {
                if (MaxResponse.Aggregations.Count > 0)
                {
                    var bucket = (MaxResponse.Aggregations.FirstOrDefault().Value as Nest.BucketAggregate).Items.FirstOrDefault() as Nest.KeyedBucket <object>;

                    Max = Convert.ToInt32(bucket.DocCount.Value);
                }
            }

            return(Max, All);
        }
Пример #4
0
        /// <summary>
        /// 获取白名单外的获取请求总次数
        /// </summary>
        /// <param name="filterOption"></param>
        /// <returns></returns>
        public async Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption filterOption)
        {
            var ipFilter = $"({string.Join(",", filterOption.List.Select(m => $"'{MySqlHelper.EscapeString(m)}'"))})";

            if (filterOption.InList)
            {
                ipFilter = "IP IN " + ipFilter;
            }
            else
            {
                ipFilter = "IP NOT IN " + ipFilter;
            }

            var sql = $"SELECT COUNT(1) TOTAL FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter} GROUP BY IP ORDER BY TOTAL DESC LIMIT 1";

            TraceLogSql(sql);
            var max = await LoggingSqlOperation(async connection => await connection.QueryFirstOrDefaultAsync <int>(sql).ConfigureAwait(false));

            sql = $"SELECT COUNT(1) TOTAL FROM RequestInfo {BuildSqlFilter(filterOption)} AND {ipFilter}";
            TraceLogSql(sql);
            var all = await LoggingSqlOperation(async connection => await connection.QueryFirstOrDefaultAsync <int>(sql).ConfigureAwait(false));

            return(max, all);
        }
Пример #5
0
 public Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption filterOption)
 {
     throw new NotImplementedException();
 }