Example #1
0
        /// <summary>
        /// 获取首页数据
        /// </summary>
        /// <param name="filterOption"></param>
        /// <returns></returns>
        public async Task <IndexPageData> GetIndexPageDataAsync(IndexPageDataFilterOption filterOption)
        {
            string where = BuildSqlFilter(filterOption);

            string sql = $@"Select COUNT(1) Total From RequestInfo {where};
                Select COUNT(1) Code404 From RequestInfo {where} AND StatusCode = 404;
                Select COUNT(1) Code500 From RequestInfo {where} AND StatusCode = 500;
                Select Count(1) From ( Select Distinct Url From RequestInfo ) A;
                Select AVG(Milliseconds) ART From RequestInfo {where};";

            TraceLogSql(sql);

            IndexPageData result = new IndexPageData();

            await LoggingSqlOperation(async connection =>
            {
                using (var resultReader = await connection.QueryMultipleAsync(sql).ConfigureAwait(false))
                {
                    result.Total           = resultReader.ReadFirstOrDefault <int>();
                    result.NotFound        = resultReader.ReadFirstOrDefault <int>();
                    result.ServerError     = resultReader.ReadFirstOrDefault <int>();
                    result.APICount        = resultReader.ReadFirst <int>();
                    result.ErrorPercent    = result.Total == 0 ? 0 : Convert.ToDouble(result.ServerError) / Convert.ToDouble(result.Total);
                    result.AvgResponseTime = double.TryParse(resultReader.ReadFirstOrDefault <string>(), out var avg) ? avg : 0;
                }
            }, "获取首页数据异常").ConfigureAwait(false);

            return(result);
        }
Example #2
0
        /// <summary>
        /// 获取首页数据
        /// </summary>
        /// <param name="filterOption"></param>
        /// <returns></returns>
        public async Task <IndexPageData> GetIndexPageDataAsync(IndexPageDataFilterOption filterOption)
        {
            string where = BuildSqlFilter(filterOption);

            string sql = $@"
                Select 'Total'    KeyField, COUNT(1) ValueField From RequestInfo {where} Union
                Select 'Code404'  KeyField, COUNT(1) ValueField From RequestInfo {where} AND StatusCode = 404 Union
                Select 'Code500'  KeyField, COUNT(1) ValueField From RequestInfo {where} AND StatusCode = 500 Union
                Select 'APICount' KeyField, Count(1) ValueField  From ( Select Distinct Url From RequestInfo ) A Union
                Select 'ART'      KeyField, Round(AVG(Milliseconds),2) ValueField From RequestInfo {where} ";

            TraceLogSql(sql);

            IndexPageData result = new IndexPageData();

            await LoggingSqlOperation(async connection =>
            {
                var data = await connection.QueryAsync <KVClass <string, string> >(sql).ConfigureAwait(false);

                result.Total           = data.Where(x => x.KeyField == "Total").FirstOrDefault().ValueField.ToInt();
                result.NotFound        = data.Where(x => x.KeyField == "Code404").FirstOrDefault().ValueField.ToInt();
                result.ServerError     = data.Where(x => x.KeyField == "Code500").FirstOrDefault().ValueField.ToInt();
                result.APICount        = data.Where(x => x.KeyField == "APICount").FirstOrDefault().ValueField.ToInt();
                result.ErrorPercent    = result.Total == 0 ? 0 : Convert.ToDouble(result.ServerError) / Convert.ToDouble(result.Total);
                result.AvgResponseTime = data.Where(x => x.KeyField == "ART").FirstOrDefault().ValueField.ToDouble();
            }, "获取首页数据异常").ConfigureAwait(false);

            return(result);
        }
        public async Task <IndexPageData> GetIndexPageDataAsync(IndexPageDataFilterOption option)
        {
            IndexPageData result = new IndexPageData();

            var Total = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                               .Query(c => c.HasDateWhere(option.StartTime, option.EndTime) && c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant())))
                                                               .Aggregations(c => c.ValueCount("Id", d => d.Field(e => e.Id))).Size(0)
                                                               );

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

            var NotFound = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                                  .Query(c => c.HasDateWhere(option.StartTime, option.EndTime) &&
                                                                         c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant())) &&
                                                                         c.Term(f => f.StatusCode, 404)
                                                                         )
                                                                  .Aggregations(c => c.ValueCount("Id", d => d.Field(e => e.Id))).Size(0)
                                                                  );

            if (NotFound != null && NotFound.IsValid)
            {
                result.NotFound = Convert.ToInt32(NotFound.Total);
            }

            var ServerError = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                                     .Query(c => c.HasDateWhere(option.StartTime, option.EndTime) &&
                                                                            c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant())) &&
                                                                            c.Term(f => f.StatusCode, 500)
                                                                            )
                                                                     .Aggregations(c => c.ValueCount("Id", d => d.Field(e => e.Id))).Size(0)
                                                                     );

            if (ServerError != null && ServerError.IsValid)
            {
                result.ServerError = Convert.ToInt32(ServerError.Total);
            }

            var APICount = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                                  .Query(c => c.HasDateWhere(option.StartTime, option.EndTime) && c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant())))
                                                                  .Aggregations(c => c.Cardinality("url", t => t.Field(e => e.Url)))
                                                                  .Size(0)
                                                                  );

            if (APICount != null && APICount.IsValid)
            {
                if (APICount.Aggregations.Count > 0)
                {
                    var model = (APICount.Aggregations.FirstOrDefault().Value as Nest.ValueAggregate);

                    result.APICount = model.Value.HasValue ? model.Value.Value.ToInt() : 0;
                }
            }

            var Avg = await Client.SearchAsync <RequestInfo>(x => x.Index(GetIndexName <RequestInfo>())
                                                             .Query(c => c.HasDateWhere(option.StartTime, option.EndTime) && c.Terms(f => f.Field(e => e.Node).Terms(option.Service.ToLowerInvariant())))
                                                             .Aggregations(c => c.Average("average", d => d.Field(e => e.Milliseconds)))
                                                             .Size(0)
                                                             );

            if (Avg != null && Avg.IsValid)
            {
                if (Avg.Aggregations.Count > 0)
                {
                    var model = (Avg.Aggregations.FirstOrDefault().Value as Nest.ValueAggregate);

                    result.AvgResponseTime = model.Value.HasValue ? model.Value.Value.ToInt() : 0;
                }
            }

            result.ErrorPercent = result.Total == 0 ? 0 : Convert.ToDouble(result.ServerError) / Convert.ToDouble(result.Total);

            return(result);
        }
Example #4
0
 public Task <IndexPageData> GetIndexPageDataAsync(IndexPageDataFilterOption filterOption)
 {
     throw new NotImplementedException();
 }
Example #5
0
        public async Task <string> GetServiceBasicData(QueryRequest request)
        {
            var start = request.Start.ToDateTime();
            var end   = request.End.ToDateTime();

            #region BuildService
            if (request.Service.IsEmpty() || request.Service == "ALL")
            {
                request.Service = "";
            }

            if (request.Instance.IsEmpty() || request.Instance == "ALL")
            {
                request.LocalIP   = "";
                request.LocalPort = 0;
            }
            else
            {
                request.LocalIP   = request.Instance.Substring(0, request.Instance.LastIndexOf(':'));
                request.LocalPort = request.Instance.Substring(request.Instance.LastIndexOf(':') + 1).ToInt();
            }

            #endregion

            IndexPageDataFilterOption option = new IndexPageDataFilterOption
            {
                Service         = request.Service,
                LocalIP         = request.LocalIP,
                LocalPort       = request.LocalPort,
                StartTime       = start,
                EndTime         = end,
                StartTimeFormat = "yyyy-MM-dd HH:mm:ss",
                EndTimeFormat   = "yyyy-MM-dd HH:mm:ss",
                Take            = 6
            };

            BasicFilter filter = new BasicFilter {
                Service   = request.Service,
                Instance  = request.Instance,
                StartTime = start,
                EndTime   = end,
                Count     = 6
            };

            var route = await _storage.GetGroupData(filter, GroupType.Route);

            var instance = await _storage.GetGroupData(filter, GroupType.Instance);

            var range = GetTimeRange(option.StartTime.Value, option.EndTime.Value);

            var app = await _storage.GetAppStatus(filter, range);


            return(Json(new HttpResultEntity(1, "ok", new
            {
                route = route,
                instance = instance,
                range = range,
                app = app
            })));
        }
Example #6
0
        public async Task <string> GetIndexBasicData(QueryRequest request)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            var start = request.Start.ToDateTime();
            var end   = request.End.ToDateTime();

            #region BuildService
            if (request.Service.IsEmpty() || request.Service == "ALL")
            {
                request.Service = "";
            }

            if (request.Instance.IsEmpty() || request.Instance == "ALL")
            {
                request.LocalIP   = "";
                request.LocalPort = 0;
            }
            else
            {
                request.LocalIP   = request.Instance.Substring(0, request.Instance.LastIndexOf(':'));
                request.LocalPort = request.Instance.Substring(request.Instance.LastIndexOf(':') + 1).ToInt();
            }

            #endregion

            IndexPageDataFilterOption option = new IndexPageDataFilterOption {
                Service         = request.Service,
                LocalIP         = request.LocalIP,
                LocalPort       = request.LocalPort,
                StartTime       = start,
                EndTime         = end,
                StartTimeFormat = "yyyy-MM-dd HH:mm:ss",
                EndTimeFormat   = "yyyy-MM-dd HH:mm:ss",
                Take            = 6
            };


            BasicFilter filter = new BasicFilter
            {
                Service   = request.Service,
                Instance  = request.Instance,
                StartTime = start,
                EndTime   = end,
                Count     = 6
            };


            var a0 = stopwatch.ElapsedMilliseconds;

            var basic = await _storage.GetIndexBasicDataAsync(filter);

            var a1 = stopwatch.ElapsedMilliseconds;

            var top = await _storage.GetGroupData(filter, GroupType.Service);

            var a2 = stopwatch.ElapsedMilliseconds;

            var range = GetTimeRange(option.StartTime.Value, option.EndTime.Value);

            var trend = await _storage.GetServiceTrend(filter, range);

            var a3 = stopwatch.ElapsedMilliseconds;

            var heatmap = await _storage.GetServiceHeatMap(filter, range);

            var a4 = stopwatch.ElapsedMilliseconds;

            //await Task.WhenAll(basic,top,trend,heatmap);

            stopwatch.Stop();

            return(Json(new HttpResultEntity(1, "ok", new
            {
                Total = basic.Total,
                ServerError = basic.ServerError,
                Service = basic.Service,
                Instance = basic.Instance,
                Top = top,
                Trend = trend,
                HeatMap = heatmap,
                Cost = stopwatch.ElapsedMilliseconds
            })));
        }