/// <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); }
/// <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> 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); }
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 }); }