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