/// <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); }
/// <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); }
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); }
/// <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); }
public Task <(int Max, int All)> GetRequestCountWithWhiteListAsync(RequestCountWithListFilterOption filterOption) { throw new NotImplementedException(); }