//获取监控数据列表,table显示用 public ActionResult GetLogMonitorData(MonitorSearchVM searchePara) { GetLogMonitorInput monitorIn = ConvertSearchVMToGetLogMonitorInput(searchePara); PagedResultDto <Log_SystemMonitorDto> monitors = _logMonitorService.GetLogMonitors(monitorIn); var result = Abp.AutoMapper.AutoMapExtensions.MapTo <PagedResultDto <Log_OperateMonitorView> >(monitors);// monitors.MapTo<PagedResultDto<Log_OperateMonitorView>>(); result.Items = result.Items.Select(a => { a.RunHours = Convert.ToDouble(a.RunHours.ToString("f2")); a.CpuUsage = Convert.ToDouble(a.CpuUsage.ToString("f2")); a.MemoryUsage = Convert.ToDouble(a.MemoryUsage.ToString("f2")); a.CurProcMem = Convert.ToDouble(a.CurProcMem.ToString("f2")); a.CurProcMemUse = Convert.ToDouble(a.CurProcMemUse.ToString("f2")); a.CurProcCpuUse = Convert.ToDouble(a.CurProcCpuUse.ToString("f2")); a.CurSubProcMem = Convert.ToDouble(a.CurSubProcMem.ToString("f2")); if (string.IsNullOrEmpty(a.DiskSpace)) { a.DiskSpace = null; return(a); } a.DiskSpace = string.Join(";", SerializeHelper.XMLDESerializer <List <DiskSpaceEdm> >(a.DiskSpace).Select(p => p.DiscName.Trim(':') + ":" + p.Free + "G(" + p.Rate + "%)")); return(a); }).ToList(); var json = AbpJson(new { total = result.TotalCount, rows = result.Items }, null, null, JsonRequestBehavior.AllowGet, true, false); return(json); }
/// <summary> /// 获取监控记录(具体实现) /// </summary> /// <param name="input"></param> /// <returns></returns> public PagedResultDto <Log_SystemMonitorDto> GetLogMonitors(GetLogMonitorInput input) { var query = GetLogMonitorIQueryableData(input); var totalCount = query.Count(); var list = query.PageBy(input).ToList(); var listDtos = list.MapTo <List <Log_SystemMonitorDto> >(); return(new PagedResultDto <Log_SystemMonitorDto>(totalCount, listDtos)); }
/// <summary> /// 今日监控日志数量 /// </summary> /// <returns></returns> public int GetTodayMonitorLogNum(List <SysCategory> sysCategoryList) { GetLogMonitorInput input = new GetLogMonitorInput() { SystemID = sysCategoryList, StartT = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")), EndT = Convert.ToDateTime(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")) }; var query = GetLogMonitorIQueryableData(input); return(query.Count()); }
/// <summary> /// 获取监控记录(每个服务器各获取指定的条数) /// </summary> /// <param name="input"></param> /// <returns></returns> public List <ServersViewDto> GetLogMonitorsEveryServer(GetLogMonitorInput input) { var other = (!string.IsNullOrEmpty(input.Other) ? input.Other : "").Split(';'); //input.Other包含时间格式和点数的范围,用;隔开 string chartTimeFormate = other[0]; int dotRange = other.Length < 2 ? 10000 : ((int)Convert.ToDouble(other[1])); dotRange = dotRange < 0 ? -dotRange : dotRange; dotRange = dotRange > 10000 ? 10000 : dotRange;//最多1000点 try { var query = GetLogMonitorIQueryableData(input).OrderByDescending(a => a.LogTime).ToList(); var groups = (from d in query group d by new { /* d.SystemID,*/ d.ServerHost } into g select new { Name = g.Key, // SysID = g.Key.SystemID, HostID = g.Key.ServerHost, count = g.Count(), // datas = g.OrderByDescending(a => a.Time).Take(input.MaxResultCount),//只能取到最新的数据,即使指定范围内有更多的数据 datas = g.OrderByDescending(a => a.LogTime).Take(dotRange).Select((log, index) => SelectSpecialData(index, log, Math.Min(g.Count(), dotRange), input.MaxResultCount , GetDataByInterval(Math.Min(g.Count(), dotRange), input.MaxResultCount))).Where(a => a != null),//指定范围内间隔相等的取出数据 }).ToList(); List <ServersViewDto> sers = new List <ServersViewDto>(); foreach (var item in groups) { var key = item.HostID; var value = item.datas.OrderBy(a => a.LogTime).ToList(); var apps = value.Select(a => a.SystemID).Distinct().ToList(); List <ServerViewDto> Monitors = value.MapTo <List <ServerViewDto> >().ToList(); Monitors = Monitors.Select(a => { a.LogTime = Convert.ToDateTime(a.LogTime).ToString(chartTimeFormate); return(a); }).ToList(); ServersViewDto curServer = new ServersViewDto() { ServerName = key, AppName = string.Join(",", apps), Monitors = Monitors }; sers.Add(curServer); } return(sers); } catch { return(new List <ServersViewDto>()); } }
//根据检索条件获取数据,并排序(未分页) IQueryable <Log_SystemMonitor> GetLogMonitorIQueryableData(GetLogMonitorInput input) { var enumList = GetUserSysCategoryAccordingRoleID(); var query = _logMonitorRepository.GetAll(); query = query.WhereIf(input.StartT != new DateTime(), a => a.LogTime >= input.StartT & a.LogTime < input.EndT); if (!input.SystemID.Contains(SysCategory.ALL)) { query = query.Where(a => input.SystemID.Contains(a.SystemID)); } else { query = query.Where(a => enumList.Contains(a.SystemID)); } query = query.WhereIf(!string.IsNullOrEmpty(input.ServerHost), a => a.ServerHost == input.ServerHost); query = query.WhereIf(!string.IsNullOrEmpty(input.ServerIP), a => a.ServerIP == input.ServerIP); query = query.WhereIf(input.Express != null, input.Express); input.Sorting = input.Sorting.Replace("SysName", "SystemID"); query = query.OrderBy(input.Sorting); return(query); }
GetLogMonitorInput ConvertSearchVMToGetLogMonitorInput(MonitorSearchVM searchePara) { GetLogMonitorInput monitorIn = new GetLogMonitorInput() { MaxResultCount = searchePara.limit, SkipCount = searchePara.offset, Sorting = searchePara.sortby, IsDesc = searchePara.sortway == "asc" ? false : true, StartT = string.IsNullOrEmpty(searchePara.from) ? new DateTime() : Convert.ToDateTime(searchePara.from), EndT = string.IsNullOrEmpty(searchePara.to) ? new DateTime() : Convert.ToDateTime(searchePara.to).AddDays(1), Express = null, ServerHost = searchePara.host, ServerIP = "", SystemID = new List <SysCategory>() { searchePara.app }, Other = searchePara.other }; return(monitorIn); }
/// <summary> /// 获取各个服务器指定范围内的数据,用于曲线显示 /// </summary> /// <param name="range"></param> /// <param name="userId"></param> /// <returns></returns> public LogMonitorVM GetMonitorChartData(string range, long userId) { int limit = 1; string startT = "", endT = ""; string other = ""; var ttt = AbpSession.UserId; string timeFormate = ""; if (!string.IsNullOrEmpty(range)) { //range格式 :模式[_数值1][_数值2]_点数_时间格式,最后两个为点数和时间格式。例如 3_100_100_M:d H:m:s //模式0:自定义时段,两个数值为时间点 //模式1:当天 //模式2:最近xx小时 //模式3:最新xx点 var temp = range.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); timeFormate = temp[temp.Length - 1];//时间格式 other = timeFormate; if (temp.Length != 1) { limit = (int)(Convert.ToDouble(temp[temp.Length - 2])); var mode = temp[0]; if (mode == "0") { startT = temp[1]; endT = temp[2]; } else if (mode == "1") { startT = DateTime.Now.ToString("yyyy-MM-dd"); endT = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); } else if (mode == "2") { startT = DateTime.Now.AddHours(-1 * Convert.ToDouble(temp[1])).ToString("yyyy-M-d H:m:s"); endT = DateTime.Now.ToString(); } else if (mode == "3") { other += ";" + temp[1]; } } else //只获取最新的一条数据 { } } var enumList = GetUserSysCategoryAccordingRoleID(userId); GetLogMonitorInput monitorIn = new GetLogMonitorInput() { MaxResultCount = limit, SkipCount = 0,//searchePara.offset, Sorting = "LogTime", IsDesc = true, StartT = string.IsNullOrEmpty(startT) ? new DateTime() : Convert.ToDateTime(startT), EndT = string.IsNullOrEmpty(endT) ? new DateTime() : Convert.ToDateTime(endT), Express = null, ServerHost = "", //应为空,V-WEBAPI为测试 ServerIP = "", SystemID = enumList, Other = other }; List <ServersViewDto> sers = GetLogMonitorsEveryServer(monitorIn); //if (limit == 1) //测试增加一点的情况,改写数据便于看的清除 //{ // sers = sers.Select(a => { a.Monitors = a.Monitors.Select(m => { m.Time = DateTime.Now.ToString(timeFormate); m.CpuUsage += 5; m.MemoryUsage += 6; m.CurProcThreadNum += 7; m.OnlineCnt += 8; return m; }).ToList(); return a; }).ToList();//测试 //} LogMonitorVM vm = new LogMonitorVM() { ServerData = sers, WebSites = enumList.Select(a => Configuration.SysNameMap.GetMySystemName(a)).ToList(), Servers = GetAllServerList(), LogNum = GetTodayMonitorLogNum(enumList), LogTime = DateTime.Now.ToString("yyyy-M-d H:m:s") }; return(vm); }