public async Task <List <ResponeTimeGroup> > GetGroupedResponeTimeStatisticsAsync(GroupResponeTimeFilterOption option)
        {
            List <ResponeTimeGroup> responeTimeGroups = new List <ResponeTimeGroup>();

            var response = 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()))

                                                                         ).Aggregations(a => a.Range("timeRange", b => b.Field(c => c.Milliseconds).Ranges(

                                                                                                         GetTimeRangeFunc(option.TimeGroup)

                                                                                                         ))).Size(0)

                                                                  );

            if (response != null && response.IsValid)
            {
                if (response.Aggregations.Count > 0)
                {
                    var buckets = (response.Aggregations.FirstOrDefault().Value as Nest.BucketAggregate).Items.ToList();

                    foreach (var item in buckets)
                    {
                        var model = item as Nest.RangeBucket;

                        responeTimeGroups.Add(new ResponeTimeGroup
                        {
                            Name  = model.Key,
                            Total = Convert.ToInt32(model.DocCount)
                        });
                    }
                }
            }

            return(responeTimeGroups);
        }
Example #2
0
        public async Task <List <ResponeTimeGroup> > GetGroupedResponeTimeStatisticsAsync(GroupResponeTimeFilterOption filterOption)
        {
            string where = BuildSqlFilter(filterOption);

            var sqlBuilder = new StringBuilder("Select Name,Total from (", 512);

            var group      = filterOption.TimeGroup;
            var groupCount = group.Length / group.Rank;

            for (int i = 0; i < groupCount; i++)
            {
                var min = group[i, 0];
                var max = group[i, 1];
                if (min < max)
                {
                    sqlBuilder.Append($"Select {i + 1} Id,'{min}-{max}' Name, Count(1) Total From RequestInfo {where} AND Milliseconds >= {min} AND Milliseconds < {max} union ");
                }
                else
                {
                    sqlBuilder.Append($"Select {i + 1} Id,'{min}以上' Name, Count(1) Total From RequestInfo {where} AND Milliseconds >= {min} union ");
                }
            }

            var sql = sqlBuilder.Remove(sqlBuilder.Length - 6, 6).Append(")T Order By ID").ToString();

            TraceLogSql(sql);

            List <ResponeTimeGroup> result = null;

            await LoggingSqlOperation(async connection =>
            {
                result = (await connection.QueryAsync <ResponeTimeGroup>(sql).ConfigureAwait(false)).ToList();
            }, "获取http状态码分组统计异常").ConfigureAwait(false);

            return(result);
        }
Example #3
0
 public Task <List <ResponeTimeGroup> > GetGroupedResponeTimeStatisticsAsync(GroupResponeTimeFilterOption filterOption)
 {
     throw new NotImplementedException();
 }