コード例 #1
0
        public ActionResult Chart(string Fday, string Nday, string key, int pageindex = 1)
        {
            if (string.IsNullOrWhiteSpace(Fday))
            {
                Fday = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
            }
            if (string.IsNullOrWhiteSpace(Nday))
            {
                Nday = DateTime.Now.ToString("yyyy-MM-dd");
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                key = "avgcpu";
            }
            ViewBag.Fday = Fday;
            ViewBag.Nday = Nday;
            ViewBag.Key  = key;
            List <ChartModel>      model    = new List <ChartModel>();
            PagedList <ChartModel> pageList = null;
            int pagesize = 10;
            int count    = 0;
            tb_performance_dayreport_dal dal = new tb_performance_dayreport_dal();

            using (DbConn PubConn = DbConfig.CreateConn(Config.ClusterConnectString))
            {
                PubConn.Open();
                model    = dal.GetKeyChartJson(PubConn, Fday, Nday, key, pagesize, pageindex, out count);
                pageList = new PagedList <ChartModel>(model, pageindex, pagesize, count);
            }
            if (Request.IsAjaxRequest())
            {
                return(PartialView("List", pageList));
            }
            return(View(pageList));
        }
コード例 #2
0
        //
        // GET: /Cluster/PerformanceDayReport/

        public ActionResult Index(string serverip, string serverid, string timebegin, string timeend, string orderby = "", string datatype = "", int pageindex = 1, int pagesize = 15)
        {
            if (string.IsNullOrWhiteSpace(timebegin))
            {
                timebegin = DateTime.Now.Date.AddDays(-10).ToString("yyyy-MM-dd");
            }
            ViewBag.timebegin = timebegin;
            if (string.IsNullOrWhiteSpace(timeend))
            {
                timeend = DateTime.Now.Date.ToString("yyyy-MM-dd");
            }
            ViewBag.timeend = timeend;
            ViewBag.orderby = orderby; ViewBag.datatype = datatype; ViewBag.serverip = serverip; ViewBag.serverid = serverid;
            tb_performance_dayreport_dal dal = new tb_performance_dayreport_dal();
            PagedList <tb_performance_dayreport_model> pageList = null;
            int count = 0;

            using (DbConn PubConn = DbConfig.CreateConn(Config.ClusterConnectString))
            {
                PubConn.Open();
                List <tb_performance_dayreport_model> List = dal.GetList(PubConn, serverip, serverid, timebegin, timeend, orderby, datatype, pagesize, pageindex, out count);
                pageList = new PagedList <tb_performance_dayreport_model>(List, pageindex, pagesize, count);
            }
            if (Request.IsAjaxRequest())
            {
                return(PartialView("List", pageList));
            }
            return(View(pageList));
        }
コード例 #3
0
        public ActionResult ChartJson(string Sday, string Eday, string key)
        {
            List <Dictionary <string, object> > dic = new List <Dictionary <string, object> >();
            tb_performance_dayreport_dal        dal = new tb_performance_dayreport_dal();

            using (DbConn PubConn = DbConfig.CreateConn(Config.ClusterConnectString))
            {
                PubConn.Open();
                dic = dal.GetChartJson(PubConn, Sday, Eday, key);
            }
            return(Json(new { data = dic }));
        }
コード例 #4
0
        public ActionResult Chart(string serverip, string serverid, string date, string columns = "cpu,memory,ioread,iowrite,networkupload,networkdownload", string datatype = "avg")
        {
            if (string.IsNullOrWhiteSpace(date))
            {
                date = DateTime.Now.Date.ToString("yyyy-MM-dd");
            }
            ViewBag.columns = columns; ViewBag.serverip = serverip; ViewBag.serverid = serverid; ViewBag.date = date; ViewBag.datatype = datatype;
            List <TimeChartModel> ms = new List <TimeChartModel>();

            if (string.IsNullOrWhiteSpace(serverip) && string.IsNullOrWhiteSpace(serverid))
            {
                return(View(ms));
            }
            TimeChartDataType chartdatatype = (TimeChartDataType)Enum.Parse(typeof(TimeChartDataType), datatype);
            TimeChartType     charttype     = TimeChartType.Day;

            if (date.Split('-').Length == 3)
            {
                charttype = TimeChartType.Day;
            }
            else if (date.Split('-').Length == 2)
            {
                charttype = TimeChartType.Month;
            }
            else if (date.Split('-').Length == 1)
            {
                charttype = TimeChartType.Year;
                date      = new DateTime(Convert.ToInt32(date), 1, 1, 0, 0, 0).ToString("yyyy-MM-dd");
            }

            var startDate = DateTime.Parse(date).Date;

            string[] cs = columns.TrimEnd(',').Split(',');

            foreach (var c in cs)
            {
                if (c == "")
                {
                    continue;
                }
                var model = new TimeChartModel();
                model.DataType  = chartdatatype;
                model.Type      = charttype;
                model.StartDate = startDate;
                model.Key       = c;
                if (c == "cpu")
                {
                    model.Title    = "CPU";
                    model.UnitText = "%";
                }
                if (c == "memory")
                {
                    model.Title    = "可用内存";
                    model.UnitText = "M";
                }
                if (c == "networkupload")
                {
                    model.Title    = "网络上传";
                    model.UnitText = "Byte";
                }
                if (c == "networkdownload")
                {
                    model.Title    = "网络下载";
                    model.UnitText = "Byte";
                }
                if (c == "ioread")
                {
                    model.Title    = "磁盘读";
                    model.UnitText = "Byte";
                }
                if (c == "iowrite")
                {
                    model.Title    = "磁盘写";
                    model.UnitText = "Byte";
                }
                if (c == "iisrequest")
                {
                    model.Title    = "iis请求";
                    model.UnitText = "次/s";
                }
                model.SubTitle = model.Title + "【" + model.DataType.ToString() + "】值统计图";
                if (model.Type == TimeChartType.Day)
                {
                    model.PointInterval = "60 * 1000";//一分钟
                    model.EndDate       = model.StartDate.AddDays(1);
                    model.MaxZoom       = "60 * 60 * 1000";
                    model.SubTitle     += ",采集单位【分钟】";
                }
                else if (model.Type == TimeChartType.Month)
                {
                    model.PointInterval = "24 * 60 * 60 * 1000";//一天
                    model.EndDate       = model.StartDate.AddMonths(1);
                    model.MaxZoom       = "10 * 24 * 60 * 60 * 1000";
                    model.SubTitle     += ",采集单位【天】";
                }
                else if (model.Type == TimeChartType.Year)
                {
                    model.PointInterval = "24 * 60 * 60 * 1000";//一天
                    model.EndDate       = model.StartDate.AddYears(1);
                    model.MaxZoom       = "10 * 24 * 60 * 60 * 1000";
                    model.SubTitle     += ",采集单位【天】";
                }


                Dictionary <DateTime, double> dic = new Dictionary <DateTime, double>();
                using (DbConn PubConn = DbConfig.CreateConn(Config.ClusterConnectString))
                {
                    PubConn.Open();
                    if (model.Type == TimeChartType.Day)
                    {
                        tb_performance_collect_dal dal = new tb_performance_collect_dal();
                        dic = dal.GetTimeChart(PubConn, c, model.StartDate, serverip, serverid, model.DataType.ToString());
                    }
                    else
                    {
                        tb_performance_dayreport_dal dal = new tb_performance_dayreport_dal();
                        dic = dal.GetTimeChart(PubConn, c, model.StartDate, model.EndDate, serverip, serverid, model.DataType.ToString());
                    }
                }

                DateTime dtbegin = model.StartDate; DateTime dtend = model.EndDate;
                while (true)
                {
                    if (!dic.ContainsKey(dtbegin))
                    {
                        dic.Add(dtbegin, 0);
                    }
                    if (model.Type == TimeChartType.Day)
                    {
                        dtbegin = dtbegin.AddMinutes(1);
                    }
                    else
                    {
                        dtbegin = dtbegin.AddDays(1);
                    }
                    if (dtbegin >= dtend)
                    {
                        break;
                    }
                }
                model.DataJson = new XXF.Serialization.JsonHelper().Serializer(dic.OrderBy(c1 => c1.Key).Select(c1 => c1.Value));
                ms.Add(model);
            }
            using (DbConn PubConn = DbConfig.CreateConn(Config.PlatformManageConnectString))
            {
                PubConn.Open();
                tb_cluster_dal dal = new tb_cluster_dal();
                ViewBag.ServerName = dal.GetServerName(PubConn, serverip, serverid);
            }
            return(View(ms));
        }
コード例 #5
0
        public bool StatisServerMinitor()
        {
            List <tb_cluster_model>        dataBaseList    = GetEnableServer();
            tb_performance_dayreport_dal   dal             = new tb_performance_dayreport_dal();
            tb_performance_dayreport_model staticDayReport = new tb_performance_dayreport_model();
            DateTime dateNow           = new DateTime();
            string   day               = "";
            string   date              = "";
            string   ConnectionCluster = "";
            int      updateMinite      = 0;

            using (DbConn ManConn = DbConfig.CreateConn(XXF.Common.XXFConfig.MonitorPlatformConnectionString))
            {
                ManConn.Open();
                ConnectionCluster = new tb_database_config_dal().GetDataBaseSqlConn(ManConn, (int)DataBaseType.Cluster);
                dateNow           = ManConn.GetServerDate();
                day  = dateNow.ToString("yyyyMMdd");
                date = dateNow.ToString("yyyy-MM-dd");
                tb_keyvalue_config_model keymodel = new tb_keyvalue_config_dal().Get(ManConn, "SaveServerMonitorIntervalTime");
                updateMinite = Convert.ToInt32(keymodel.value);
            }
            using (DbConn PubConn = DbConfig.CreateConn(ConnectionCluster))
            {
                PubConn.Open();
                if ((dateNow - LastReserverdServerMonitorTime).TotalMinutes > updateMinite)
                {
                    int i = new tb_cluster_monitorinfo_dal().ReseverdServerMonitor(PubConn);
                    LastReserverdServerMonitorTime = dateNow;
                }
                Dictionary <int, tb_performance_dayreport_model> dayReportList = new tb_performance_dayreport_dal().GetAutoTaskList(PubConn, date);
                foreach (tb_cluster_model m in dataBaseList)
                {
                    if (dayReportList.Keys.Contains(m.id))
                    {
                        tb_performance_dayreport_model oldStaticDayReport = dayReportList[m.id];
                        staticDayReport = dal.GetStaticMonitor(PubConn, day, oldStaticDayReport.serverid, oldStaticDayReport.lastmaxid);
                        if (staticDayReport != null)
                        {
                            tb_performance_dayreport_model newStaticDayReport = new tb_performance_dayreport_model()
                            {
                                id       = oldStaticDayReport.id,
                                serverid = m.id,
                                avgcpu   = (oldStaticDayReport.avgcpu * oldStaticDayReport.count + staticDayReport.avgcpu * staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                maxcpu   = oldStaticDayReport.maxcpu > staticDayReport.maxcpu ? oldStaticDayReport.maxcpu : staticDayReport.maxcpu,
                                mincpu   = oldStaticDayReport.mincpu <staticDayReport.mincpu?oldStaticDayReport.mincpu : staticDayReport.mincpu,
                                                                      avgmemory = (oldStaticDayReport.avgmemory *oldStaticDayReport.count + staticDayReport.avgmemory *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                      maxmemory = oldStaticDayReport.maxmemory> staticDayReport.maxmemory ? oldStaticDayReport.maxmemory : staticDayReport.maxmemory,
                                minmemory = oldStaticDayReport.minmemory <staticDayReport.minmemory?oldStaticDayReport.minmemory : staticDayReport.minmemory,
                                                                          avgnetworkupload = (oldStaticDayReport.avgnetworkupload *oldStaticDayReport.count + staticDayReport.avgnetworkupload *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                          maxnetworkupload = oldStaticDayReport.maxnetworkupload> staticDayReport.maxnetworkupload ? oldStaticDayReport.maxnetworkupload : staticDayReport.maxnetworkupload,
                                minnetworkupload = oldStaticDayReport.minnetworkupload <staticDayReport.minnetworkupload?oldStaticDayReport.minnetworkupload : staticDayReport.minnetworkupload,
                                                                                        avgnetworkdownload = (oldStaticDayReport.avgnetworkdownload *oldStaticDayReport.count + staticDayReport.avgnetworkdownload *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                                        maxnetworkdownload = oldStaticDayReport.maxnetworkdownload> staticDayReport.maxnetworkdownload ? oldStaticDayReport.maxnetworkdownload : staticDayReport.maxnetworkdownload,
                                minnetworkdownload = oldStaticDayReport.minnetworkdownload <staticDayReport.minnetworkdownload?oldStaticDayReport.minnetworkdownload : staticDayReport.minnetworkdownload,
                                                                                            avgioread = (oldStaticDayReport.avgioread *oldStaticDayReport.count + staticDayReport.avgioread *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                                            maxioread = oldStaticDayReport.maxioread> staticDayReport.maxioread ? oldStaticDayReport.maxioread : staticDayReport.maxioread,
                                minioread = oldStaticDayReport.minioread <staticDayReport.minioread?oldStaticDayReport.minioread : staticDayReport.minioread,
                                                                          avgiowrite = (oldStaticDayReport.avgiowrite *oldStaticDayReport.count + staticDayReport.avgiowrite *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                          maxiowrite = oldStaticDayReport.maxiowrite> staticDayReport.maxiowrite ? oldStaticDayReport.maxiowrite : staticDayReport.maxiowrite,
                                miniowrite = oldStaticDayReport.miniowrite <staticDayReport.miniowrite?oldStaticDayReport.miniowrite : staticDayReport.miniowrite,
                                                                            avgiisrequest = (oldStaticDayReport.avgiisrequest *oldStaticDayReport.count + staticDayReport.avgiisrequest *staticDayReport.count) / (oldStaticDayReport.count + staticDayReport.count),
                                                                            maxiisrequest = oldStaticDayReport.maxiisrequest> staticDayReport.maxiisrequest ? oldStaticDayReport.maxiisrequest : staticDayReport.maxiisrequest,
                                miniisrequest  = oldStaticDayReport.miniisrequest < staticDayReport.miniisrequest ? oldStaticDayReport.miniisrequest : staticDayReport.miniisrequest,
                                lastmaxid      = staticDayReport.lastmaxid,
                                count          = oldStaticDayReport.count + staticDayReport.count,
                                lastupdatetime = dateNow,
                            };
                            dal.Update(PubConn, newStaticDayReport);
                        }
                    }
                    else
                    {
                        staticDayReport = dal.GetStaticMonitor(PubConn, day, m.id, 0);
                        if (staticDayReport == null)
                        {
                            staticDayReport = new tb_performance_dayreport_model();
                        }
                        staticDayReport.serverid = m.id;
                        staticDayReport.date     = dateNow;
                        dal.AddStatis(PubConn, staticDayReport);
                    }
                }
                return(true);
            }
        }
コード例 #6
0
        /// <summary>
        /// 检查Cluster的接口性能
        /// </summary>
        private void CheckPerformanceOfCluster()
        {
            try
            {
                Dictionary <int, tb_cluster_model> clusters = new Dictionary <int, tb_cluster_model>();
                SqlHelper.ExcuteSql(GlobalConfig.MonitorPlatformManageConnectString, (c) =>
                {
                    tb_cluster_dal dal = new tb_cluster_dal();
                    var cs             = dal.GetAllList(c);
                    foreach (var o in cs)
                    {
                        clusters.Add(o.id, o);
                    }
                });

                DateTime dtime = DateTime.Now;
                string   msg   = "";
                Dictionary <string, tb_performance_dayreport_model> dic = new Dictionary <string, tb_performance_dayreport_model>();
                List <int> serverids = new List <int>();
                SqlHelper.ExcuteSql(MonitorClusterConnectString, (c) =>
                {
                    tb_performance_dayreport_dal dal = new tb_performance_dayreport_dal();
                    var models = dal.GetDayReport(c, dtime.Date.AddDays(-1));
                    models.ForEach(o =>
                    {
                        string key = o.date.Date.ToString("yyyyMMdd") + o.serverid;
                        if (!dic.Keys.Contains(key))
                        {
                            dic.Add(key, o);
                        }
                        if (!serverids.Contains(o.serverid))
                        {
                            serverids.Add(o.serverid);
                        }
                    });
                });
                foreach (var u in serverids)
                {
                    if (!clusters.ContainsKey(u) || !clusters[u].ifmonitor)
                    {
                        continue;
                    }
                    string keynow      = dtime.Date.ToString("yyyyMMdd") + u;
                    string keyyestoday = dtime.Date.AddDays(-1).ToString("yyyyMMdd") + u;
                    if (dic.ContainsKey(keynow) && dic.ContainsKey(keyyestoday))
                    {
                        #region 性能对比

                        var per = PerformanceComparisonPer((double)dic[keynow].avgcpu, (double)dic[keyyestoday].avgcpu);
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgcpu】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }

                        per = PerformanceComparisonPer((double)dic[keynow].avgioread, (double)dic[keyyestoday].avgioread);
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgioread】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }

                        per = PerformanceComparisonPer((double)dic[keynow].avgiowrite, (double)dic[keyyestoday].avgiowrite);
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgiowrite】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }

                        per = PerformanceComparisonPer((double)dic[keyyestoday].avgmemory, (double)dic[keynow].avgmemory);//这里的内存是可用内存 所以是昨天的与今天对比
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgmemory】(可用内存)下降{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }

                        per = PerformanceComparisonPer((double)dic[keynow].avgnetworkdownload, (double)dic[keyyestoday].avgnetworkdownload);
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgnetworkdownload】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }

                        per = PerformanceComparisonPer((double)dic[keynow].avgnetworkupload, (double)dic[keyyestoday].avgnetworkupload);
                        if (per > 0.2)
                        {
                            msg += string.Format("【id:{1},{2}】【avgnetworkupload】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n";
                        }
                        #endregion
                    }
                }
                if (msg != "")
                {
                    TaskLogHelper.Error("检查Cluster性能", "服务器性能检查(性能与昨日对比性能)" + "\r\n" + msg, "集群性能预警任务");
                }
            }
            catch (Exception exp)
            {
                this.OpenOperator.Error("【集群性能预警任务】检查Cluster性能", exp);
            }
        }