コード例 #1
0
        //获取监控数据列表,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);
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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());
        }
コード例 #4
0
        /// <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>());
            }
        }
コード例 #5
0
        //根据检索条件获取数据,并排序(未分页)
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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);
        }