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);
        }
Example #3
0
        public async Task <IndexPageData> GetIndexBasicDataAsync(BasicFilter filter)
        {
            IndexPageData result = new IndexPageData();

            var expression = GetServiceExpression(filter);

            result.Total       = (await freeSql.Select <RequestInfo>().Where(expression).CountAsync()).ToInt();
            result.ServerError = (await freeSql.Select <RequestInfo>().Where(expression).Where(x => x.StatusCode == 500).CountAsync()).ToInt();
            result.Service     = (await freeSql.Select <RequestInfo>().Where(expression).GroupBy(x => x.Service).CountAsync()).ToInt();
            result.Instance    = (await freeSql.Select <RequestInfo>().Where(expression).GroupBy(x => x.Instance).CountAsync()).ToInt();

            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 #5
0
        public new ActionResult Content(string iiid)
        {
            var handleUnknownFormat = Request["handleunknownformat"] == "1";
            var request             = GetSearchMetadataRequest(iiid);
            var result = SearchService.GetMetadata(request);

            if (result == null)
            {
                return(View("NotFound"));
            }
            IndexPageData pagedata     = null;
            var           userbehavior = new UserBehavior();

            userbehavior.Referer = Request.UrlReferrer?.ToString() ?? "";
            userbehavior.IIId    = result.IIId;
            userbehavior.System  = result.GetValue(MetadataConsts.System).ToString();
            userbehavior.Title   = result.Title;
            userbehavior.Type    = "预览";
            userbehavior.LogDate = DateTime.UtcNow;
            if ((string.IsNullOrWhiteSpace(result.PageId) || result.PageId == "0"))
            {
                handleUnknownFormat = true;
                userbehavior.Url    = "/DataRender/DownloadFile";
            }
            else
            {
                pagedata         = PageDataService.Get(result.PageId ?? result[MetadataConsts.PageId].ToString());
                userbehavior.Url = pagedata.ContentRef;
            }
            var principal = this.PKSUser;

            userbehavior.User = principal.Identity.Name;
            userbehavior.Role = principal.Roles.First().Name;
            UserBehaviorService.Add(userbehavior);

            //处理未知格式,作下载处理
            var showType = result.ShowType;

            if (handleUnknownFormat)
            {
                return(Redirect("/DataRender/DownloadFile?iiid=" + iiid + "&dataid=" + result.DataId));
            }
            //string[] list = pagedata.ContentRef.Split('/');
            string relativeUrl = pagedata.ContentRef;

            if (pagedata.System == PKSSubSystems.Forum)
            {
                relativeUrl = Regex.Replace(relativeUrl, @"\[(?<tag>[^\]+])\]", match => result[match.Groups["tag"].Value].ToString());
            }
            else if (pagedata.ContentRef.IndexOf("?") > -1)
            {
                relativeUrl = relativeUrl + "&iiid=" + iiid + "&dataid=" + result.DataId;
            }
            else
            {
                relativeUrl = relativeUrl + "?iiid=" + iiid + "&dataid=" + result.DataId;
            }
            Uri uri = new Uri(new Uri(HttpContext.GetSubSystemUrl(pagedata.System)), relativeUrl);

            return(Redirect(uri.ToString()));
            //return RedirectToAction(list[2], list[1], new { iiid = iiid, dataid = result.DataId });
        }