using COMMON; using DB_Server; using Microsoft.EntityFrameworkCore; using Models; using Models.Models.DEBUGGER_DB; using Models.Models.LOGDB; using SERVER.LIB; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using static Models.TCPDATA; using static Models.TCPDATA.ECHARTS; namespace SERVER.DataServer { public class CHARTSSERVER { ~CHARTSSERVER() { } static readonly int NOW_S = ConfigEntity.Instance.NOW_S; #region 统计包数---------------------------------------------------- 阿里化完毕 /// /// 通讯包数统计 ------------- /// /// /// /// /// /// /// public static ECHARTS GetCHARTS(LOG_DBContext data, int[] TX, int[] RX, string startDate, string endDate) { System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); ECHARTS res = new ECHARTS(); res.title.text = "UDP通讯 "; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; DateTime dateTime2 = DateTime.Now; // // endDate==null 表示实时数据 // if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) dateTime1 = DateTime.Now; else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); var RESudpdata = data.TBL_RUCS_UDP_LOGS.AsNoTracking(); dateTime2 = dateTime; while (dateTime <= dateTime1) { string time = dateTime.ToString("yyyy-MM-dd HH"); if (endDate != null) dateTime = dateTime.AddHours(1); else { time = dateTime.ToString("yyyy-MM-dd HH:mm:ss"); dateTime = dateTime.AddSeconds(NOW_S); } res.xAxis.data.Add(time); } List ds = new List(); ds.Add( new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); ds.Add(new DataHelp()); //非实时 if (endDate != null) { foreach (var item in res.xAxis.data) { DateTime DT = DateTime.Parse(item + ":00:00"); string sql = $"* | SELECT direction,retry_count,result,data_valid, date_format(datetime, '%Y-%m-%d %H') day, count(datetime) count WHERE datetime >= '{DT.ToString("yyyy-MM-dd HH:00:00")}' AND datetime < '{DT.AddHours(1).ToString("yyyy-MM-dd HH:00:00")}' GROUP BY direction,retry_count,result,data_valid, date_format(datetime, '%Y-%m-%d %H') order by date_format(datetime, '%Y-%m-%d %H') "; var DIC_DATA = XC_Redis.Redis.GET>>(item + "GetCHARTS", () => { var data_ = new ASLS().GetLogs_(0,sql, DT.AddHours(-1), DT.AddHours(2), int.MaxValue, 0).Result; return data_; }); foreach (var TXitem in TX) { int VAL = 0; switch (TXitem) { case 1: ds[0].name = "TX总数"; ds[0].lineStyle.normal.color = "#9b8bba"; VAL = DIC_DATA.Where(X => X["day"] == item && X["direction"] == "TX").Sum(x => int.Parse(x["count"]??"0")); ds[0].data.Add(VAL); break; //TX 一次成功 case 2: ds[1].name = "TX一次"; ds[1].lineStyle.normal.color = "#2b821d"; VAL = DIC_DATA.Where(X => X["data_valid"] == "1" && X["result"] == "1" && X["retry_count"] == "0" && X["day"] == item && X["direction"] == "TX").Sum(x => int.Parse(x["count"] ?? "0")); ds[1].data.Add(VAL); break; case 3: ds[2].name = "TX重发"; ds[2].lineStyle.normal.color = "#f7c5a0"; VAL = DIC_DATA.Where(X => X["data_valid"] == "1" && X["result"] == "1" && X["retry_count"] != "0" && X["day"] == item && X["direction"] == "TX").Sum(x => int.Parse(x["count"] ?? "0")); ds[2].data.Add(VAL); break; case 4: ds[3].name = "TX失败"; ds[3].lineStyle.normal.color = "#c1232b"; ds[3].lineStyle.normal.color = "#f7c5a0"; VAL = DIC_DATA.Where(X => X["result"] == "0" && X["direction"] == "TX").Sum(x => int.Parse(x["count"] ?? "0")); ds[3].data.Add(VAL); break; } } foreach (var RXitem in RX) { int VAL = 0; switch (RXitem) { case 1: ds[4].lineStyle.normal.color = "#0098d9"; ds[4].name = "RX总数"; VAL = DIC_DATA.Where(X => X["day"] == item && X["direction"] == "RX").Sum(x => int.Parse(x["count"] ?? "0")); if (item == "2022-05-24 10") { } ds[4].data.Add(VAL); break; //RX 一次成功 case 2: ds[5].name = "RX一次"; ds[5].lineStyle.normal.color = "#7bd9a5"; VAL = DIC_DATA.Where(X => X["data_valid"] == "1" && X["result"] == "1" && X["retry_count"] == "0" && X["day"] == item && X["direction"] == "RX").Sum(x => int.Parse(x["count"] ?? "0")); ds[5].data.Add(VAL); break; //RX重发 case 3: ds[6].lineStyle.normal.color = "#f7c5a0"; ds[6].name = "RX重发"; VAL = DIC_DATA.Where(X => X["data_valid"] == "1" && X["result"] == "1" && X["retry_count"] != "0" && X["day"] == item && X["direction"] == "RX").Sum(x => int.Parse(x["count"] ?? "0")); ds[6].data.Add(VAL); break; case 4: ds[7].lineStyle.normal.color = "#d87a80"; ds[7].name = "RX无效"; VAL = DIC_DATA.Where(X => X["data_valid"] == "0" && X["day"] == item && X["direction"] == "RX").Sum(x => int.Parse(x["count"] ?? "0")); ds[7].data.Add(VAL); break; } } } } else { //var new_RESudpdata = RESudpdata.Where(x => x.DATETIME >= dateTime2 && x.DATETIME <= dateTime1).Select(x => new{x.RETRY_COUNT, x.RESULT,x.DIRECTION,x.DATETIME,x.DATA_VALID }).ToList(); //实时 foreach (var TXitem in TX) { DataHelp ds_ = new DataHelp(); switch (TXitem) { case 1: ds_.name = "TX总数"; ds_.lineStyle.normal.color = "#9b8bba"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE direction = 'TX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "TX" && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; //TX 一次成功 case 2: ds_.lineStyle.normal.color = "#2b821d"; ds_.name = "TX一次"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE retry_count = 0 and result = 1 and direction = 'TX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; case 3: ds_.lineStyle.normal.color = "#f7c5a0"; ds_.name = "TX重发"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE retry_count > 0 and result = 1 and direction = 'TX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; case 4: ds_.lineStyle.normal.color = "#c1232b"; ds_.name = "TX失败"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE result = 0 and direction = 'TX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "TX" && x.RESULT == 0 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; } res.color.Add(ds_.lineStyle.normal.color); res.legend.data.Add(ds_.name); res.series.Add(ds_); } foreach (var RXitem in RX) { DataHelp ds_ = new DataHelp(); switch (RXitem) { case 1: ds_.lineStyle.normal.color = "#0098d9"; ds_.name = "RX总数"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE direction = 'RX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; //TX 一次成功 case 2: ds_.name = "RX一次"; ds_.lineStyle.normal.color = "#7bd9a5"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE retry_count = 0 and result = 1 and direction = 'RX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.RETRY_COUNT == 0 && x.DIRECTION == "RX" && x.RESULT == 1 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; //TX 一次成功 case 3: ds_.name = "RX重发"; ds_.lineStyle.normal.color = "#f7c5a0"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE retry_count > 0 and result = 1 and direction = 'RX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.RETRY_COUNT > 0 && x.DIRECTION == "RX" && x.RESULT == 1 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; case 4: ds_.lineStyle.normal.color = "#d87a80"; ds_.name = "RX无效"; for (int i = 0; i < res.xAxis.data.Count; i++) { var s = new ASLS().GetLogs_(0, $"* | SELECT count(*) WHERE data_valid = 0 and direction = 'RX' AND datetime >= '{DateTime.Parse(res.xAxis.data[i]).ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DateTime.Parse(res.xAxis.data[i]), DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)); if (s.Result.Count > 0) ds_.data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else ds_.data.Add(0); //var fifledata = new_RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATA_VALID == 0 && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count(); //ds.data.Add(fifledata); } break; } res.color.Add(ds_.lineStyle.normal.color); res.legend.data.Add(ds_.name); res.series.Add(ds_); } } res.series.AddRange(ds.Where(x=>x.name.Length>0)); res.color.AddRange(ds.Where(x => x.name.Length > 0).Select(x => x.lineStyle.normal.color)); stopwatch.Stop(); LogHelp.Error(" zong 用时:" + (stopwatch.ElapsedMilliseconds) + "。

"); //res.labels = res.labels.Distinct().ToList(); ; return res; } #endregion 统计包数 #region 通讯字节流量统计收起-------------------------------需要 阿里化完毕 /// /// 通讯字节流量统计收起 -----------------已经修改查询 没有太多问题 /// /// /// /// /// public static ECHARTS GetErrorSucess(LOG_DBContext data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "UDP通讯字节流量"; //res.type = "bar"; DateTime dateTime = DateTime.Now; DateTime startDatedateTime = DateTime.Now; DateTime dateTime2 = DateTime.Now; DateTime dateTime1 = DateTime.Now; // // endDate==null 表示实时数据 // if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) dateTime1 = DateTime.Now; else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } startDatedateTime = dateTime; dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); var RESudpdata = data.TBL_RUCS_UDP_LOGS; dateTime2 = dateTime; while (dateTime <= dateTime1) { string time = dateTime.ToString("yyyy-MM-dd HH"); if (endDate != null) dateTime = dateTime.AddHours(1); else { time = dateTime.ToString("yyyy-MM-dd HH:mm:ss"); dateTime = dateTime.AddSeconds(NOW_S); } res.xAxis.data.Add(time); } res.series.Add(new DataHelp { name = "TX" }); res.series[0].lineStyle.normal.color = "#2b821d"; res.color.Add(res.series[0].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX" }); res.series[1].lineStyle.normal.color = "#c1232b"; res.color.Add(res.series[1].lineStyle.normal.color); res.legend.data.Add("TX"); res.legend.data.Add("RX"); //非实时 if (endDate != null) { ///访问大量数据 卡 foreach (var item in res.xAxis.data) { DateTime DT = DateTime.Parse(item + ":00:00"); res.series[0].data.Add( XC_Redis.Redis.GET(item + "_GetErrorSucess_TX_SUM", () => { var s = new ASLS().GetLogs_(0, $"* | SELECT sum(length) WHERE direction = 'TX' AND datetime >= '{DT.ToString("yyyy-MM-dd HH:00:00")}' AND datetime < '{DT.AddHours(1).ToString("yyyy-MM-dd HH:00:00")}'", DT.AddHours(-0.5), DT.AddHours(0.5)); if (s.Result.Count > 0) return int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0]); return 0; //return RESudpdata.Where(X => X.DATETIME >= DT && X.DATETIME < DT.AddHours(1) && X.DIRECTION == "TX").Sum(x => x.LENGTH); }, DateTime.Now.ToString("yyyy-MM-dd HH") == item ? 5 : -1) ); res.series[1].data.Add( XC_Redis.Redis.GET(item + "_GetErrorSucess_RX_SUM", () => { var s = new ASLS().GetLogs_(0, $"* | SELECT sum(length) WHERE direction = 'RX' AND datetime >= '{DT.ToString("yyyy-MM-dd HH:00:00")}' AND datetime < '{DT.AddHours(1).ToString("yyyy-MM-dd HH:00:00")}'", DT.AddHours(-0.5), DT.AddHours(1.5)); if (s.Result.Count > 0) return int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0]); return 0; return RESudpdata.Where(X => X.DATETIME >= DT && X.DATETIME < DT.AddHours(1) && X.DIRECTION == "RX").Sum(x => x.LENGTH); }, DateTime.Now.ToString("yyyy-MM-dd HH") == item ? 5 : -1) ); } if (res.series[0].data.Count <= 1) res.series[0].type = "bar"; if (res.series[1].data.Count <= 1) res.series[1].type = "bar"; } else { var RESudpdata_NEW = RESudpdata.Where(x => x.DATETIME >= dateTime2 && x.DATETIME <= dateTime1).Select(x => new { x.DATETIME, x.DIRECTION, x.LENGTH }); //实时 for (int i = 0; i < res.xAxis.data.Count; i++) { var asls = new ASLS(); DateTime DT = DateTime.Parse(res.xAxis.data[i]); var s = asls.GetLogs_(0, $"* | SELECT sum(length) WHERE direction = 'TX' AND datetime >= '{DT.ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DT.AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DT.AddSeconds(NOW_S).AddHours(-0.5), DT.AddSeconds(NOW_S).AddHours(1.5)); if (s.Result.Count > 0) res.series[0].data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else res.series[0].data.Add(0); s = asls.GetLogs_(0, $"* | SELECT sum(length) WHERE direction = 'RX' AND datetime >= '{DT.ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{DT.AddSeconds(NOW_S).ToString("yyyy-MM-dd HH:mm:ss")}'", DT.AddSeconds(NOW_S).AddHours(-0.5), DT.AddSeconds(NOW_S).AddHours(1.5)); if (s.Result.Count > 0) res.series[1].data.Add(int.Parse(s.Result[0]["_col0"] == "null" ? "0" : s.Result[0]["_col0"].Split(".")[0])); else res.series[1].data.Add(0); //res.series[0].data.Add(RESudpdata_NEW.Where(x => x.DIRECTION == "TX" && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Sum(x => x.LENGTH)); //res.series[1].data.Add(RESudpdata_NEW.Where(x => x.DIRECTION == "RX" && x.DATETIME >= DateTime.Parse(res.xAxis.data[i]) && x.DATETIME < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Sum(x => x.LENGTH)); } } return res; } #endregion 通讯字节流量统计收起 #region 端口使用 已经优化 ----------------------- 阿里化完毕 (数据多时非常卡) /// /// 端口数据使用情况 ------------------------------------ 已经优化 /// /// /// /// 没有结束时间时 统计前一秒的数据 /// public static ECHARTS GetProt(LOG_DBContext data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "UDP通讯端口"; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; // // endDate==null 表示实时数据 只统计当前时间 的前一秒到现在的数据 // // 已经更改 这里endDate前端不会传入NULL 实时为统计前一分钟 前30分钟等等 数据 // if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) { dateTime1 = DateTime.Now; dateTime = dateTime1.AddSeconds(-NOW_S); } else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); // 0 - 255端口 for (int i = 0; i < 256; i++) { res.xAxis.data.Add(i.ToString()); } res.series.Add(new DataHelp { name = "TX" }); res.series[0].lineStyle.normal.color = "#2b821d"; res.series[0].type = "bar"; res.color.Add(res.series[0].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX" }); res.series[1].lineStyle.normal.color = "#c1232b"; res.series[1].type = "bar"; res.color.Add(res.series[1].lineStyle.normal.color); res.legend.data.Add("TX"); res.legend.data.Add("RX"); #region 阿里的方式 var asls = new ASLS(); var res_ = asls.GetLogs_(0, $@"* | SELECT direction, CASE when direction = 'TX' then source_port when direction = 'RX' then destination_port END _port ,COUNT(*) _sum WHERE datetime >= '{dateTime.ToString("yyyy-MM-dd HH:mm:ss")}' AND datetime < '{dateTime1.ToString("yyyy-MM-dd HH:mm:ss")}' GROUP BY _port,direction HAVING _port >= 6000 ORDER BY _port", dateTime.AddHours(-0.5), dateTime1.AddHours(1.5)); IList> alsdata = new List>(); if (res_.Result != null && res_.Result.Count > 0) alsdata = res_.Result; for (int i = 0; i < 256; i++) { var s = alsdata.FirstOrDefault(x => x["direction"] == "TX" && x["_port"] == $"{6000+i}.0"); res.series[0].data.Add(int.Parse(s == null ? "0" : s["_sum"].Split(".")[0])); s = null; s = alsdata.FirstOrDefault(x => x["direction"] == "RX" && x["_port"] == $"{6000 + i}.0"); res.series[1].data.Add(int.Parse(s == null ? "0" : s["_sum"].Split(".")[0])); } return res; #endregion // 小于1H 的数据 还是查库 if (DateTime.Now - dateTime < TimeSpan.FromHours(1)) { var RESudpdata = data.TBL_RUCS_UDP_LOGS.Where(x => x.DATETIME >= dateTime && x.DATETIME <= dateTime1 ).Select(x => new { x.DIRECTION, x.SOURCE_PORT, x.DESTINATION_PORT }).AsNoTracking().ToList(); // 数据库 通讯量 256 * 2 每次查询指定端口数量 一次性取出数据量过大 => 导致查询耗时非常大 // 先统计总数 如果总数为 0 或者总数减去所有查询数 之后 数量等于 0 则直接添加 0 for (int i = 0; i < 256; i++) { int sum = RESudpdata.Where(x => x.DIRECTION == "TX").Where(x => x.SOURCE_PORT == (6000 + i).ToString()).Count(); res.series[0].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX").Where(x => x.DESTINATION_PORT == (6000 + i).ToString()).Count(); res.series[1].data.Add(sum); } } else { res.series[0].data.AddRange(GetProt(dateTime, dateTime1)); res.series[1].data.AddRange(GetProt(dateTime, dateTime1, "RX")); } return res; } #endregion #region 处理耗时 ------------------------------------ ---------------- 阿里修改完毕 /// /// 处理耗时 ------------------------------------ ----------------需要 阿里修改完毕 /// /// /// /// /// public static ECHARTS GetPROCESSINGTIME(LOG_DBContext data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "UDP通讯处理耗时"; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) { dateTime1 = DateTime.Now; dateTime = dateTime1.AddSeconds(-NOW_S); } else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); // 0 - 30 30 - 60 60 - 100 >100 res.xAxis.data.Add("0-5"); res.xAxis.data.Add("5-10"); res.xAxis.data.Add("10-15"); res.xAxis.data.Add("15-20"); res.xAxis.data.Add("20-30"); res.xAxis.data.Add("30-50"); res.xAxis.data.Add("50-100"); res.xAxis.data.Add(">100"); res.series.Add(new DataHelp { name = "TX一次" }); res.series[0].lineStyle.normal.color = "#2b821d"; res.series[0].type = "bar"; res.series[0].stack = "TX"; res.color.Add(res.series[0].lineStyle.normal.color); res.series.Add(new DataHelp { name = "TX重发" }); res.series[1].lineStyle.normal.color = "#f7c5a0"; res.series[1].stack = "TX"; res.series[1].type = "bar"; res.color.Add(res.series[1].lineStyle.normal.color); res.series.Add(new DataHelp { name = "TX失败" }); res.series[2].lineStyle.normal.color = "#c1232b"; res.series[2].stack = "TX"; res.series[2].type = "bar"; res.color.Add(res.series[2].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX一次" }); res.series[3].lineStyle.normal.color = "#7bd9a5"; res.series[3].type = "bar"; res.series[3].stack = "RX"; res.color.Add(res.series[3].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX重发" }); res.series[4].lineStyle.normal.color = "#f7c5a0"; res.series[4].type = "bar"; res.series[4].stack = "RX"; res.color.Add(res.series[4].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX无效" }); res.series[5].lineStyle.normal.color = "#d87a80"; res.series[5].type = "bar"; res.series[5].stack = "RX"; res.color.Add(res.series[5].lineStyle.normal.color); res.legend.data.Add("TX一次"); res.legend.data.Add("TX重发"); res.legend.data.Add("TX失败"); res.legend.data.Add("RX一次"); res.legend.data.Add("RX重发"); res.legend.data.Add("RX无效"); #region 阿里的方式 var asls = new ASLS(); int tump = 5; String SQL = $@" * | select case when (direction = 'RX' and result = 1 and retry_count = 0 and data_valid = 1) then 'rx一次' when direction = 'RX' and result = 1 and retry_count > 0 and data_valid = 1 then 'rx重发' when direction = 'RX' and data_valid = 0 then 'rx无效' when (direction = 'TX' and result = 1 and retry_count = 0 and data_valid = 1) then 'tx一次' when direction = 'TX' and result = 1 and retry_count > 0 and data_valid = 1 then 'tx重发' when direction = 'TX' and result = 0 and data_valid = 1 then 'tx失败' end as cf, case when processing_timespent >=0 and processing_timespent <5 then '0-5' when processing_timespent>=5 and processing_timespent <10 then '5-10' when processing_timespent>=10 and processing_timespent <15 then '10-15' when processing_timespent>=15 and processing_timespent <20 then '15-20' when processing_timespent>=20 and processing_timespent <30 then '20-30' when processing_timespent>=30 and processing_timespent <50 then '30-50' when processing_timespent>=50 and processing_timespent <100 then '50-100' when processing_timespent>=100 then '>=100' else '其他' end as qj, count(*) as num where udp_cmd = '7 0' and datetime >= '{dateTime.ToString("yyyy-MM-dd HH:mm:ss")}' and datetime < '{dateTime1.ToString("yyyy-MM-dd HH:mm:ss")}' group by case when processing_timespent >=0 and processing_timespent <5 then '0-5' when processing_timespent>=5 and processing_timespent <10 then '5-10' when processing_timespent>=10 and processing_timespent <15 then '10-15' when processing_timespent>=15 and processing_timespent <20 then '15-20' when processing_timespent>=20 and processing_timespent <30 then '20-30' when processing_timespent>=30 and processing_timespent <50 then '30-50' when processing_timespent>=50 and processing_timespent <100 then '50-100' when processing_timespent>=100 then '>=100' else '其他' end, case when (direction = 'RX' and result = 1 and retry_count = 0 and data_valid = 1) then 'rx一次' when direction = 'RX' and result = 1 and retry_count > 0 and data_valid = 1 then 'rx重发' when direction = 'RX' and data_valid = 0 then 'rx无效' when (direction = 'TX' and result = 1 and retry_count = 0 and data_valid = 1) then 'tx一次' when direction = 'TX' and result = 1 and retry_count > 0 and data_valid = 1 then 'tx重发' when direction = 'TX' and result = 0 and data_valid = 1 then 'tx失败' end order by qj"; var RES_DATA = asls.GetLogs_(0, SQL, dateTime.AddHours(-0.5), dateTime1.AddHours(0.5)).Result; string str = string.Empty; for (int i = 0; i < 100; i += tump) { if (i > 100) { i = 100; } if (i == 20) { tump = 10; } if (i == 30) { tump = 20; } if (i == 50) { tump = 50; } str = $"{i}-{i+tump}"; int sum = 0; var s = RES_DATA.FirstOrDefault(X => X["cf"] == "tx一次"&& X["qj"]==str); sum = s != null ?int.Parse(s["num"].Split(".")[0]):0; res.series[0].data.Add(sum); sum = 0; s = RES_DATA.FirstOrDefault(X => X["cf"] == "tx重发" && X["qj"] == str); sum = s != null ? int.Parse(s["num"].Split(".")[0]) : 0; res.series[1].data.Add(sum); sum = 0; s = RES_DATA.FirstOrDefault(X => X["cf"] == "tx失败" && X["qj"] == str); sum = s != null ? int.Parse(s["num"].Split(".")[0]) : 0; res.series[2].data.Add(sum); sum = 0; s = RES_DATA.FirstOrDefault(X => X["cf"] == "rx一次" && X["qj"] == str); sum = s != null ? int.Parse(s["num"].Split(".")[0]) : 0; res.series[3].data.Add(sum); sum = 0; s = RES_DATA.FirstOrDefault(X => X["cf"] == "rx重发" && X["qj"] == str); sum = s != null ? int.Parse(s["num"].Split(".")[0]) : 0; res.series[4].data.Add(sum); sum = 0; s = RES_DATA.FirstOrDefault(X => X["cf"] == "rx无效" && X["qj"] == str); sum = s != null ? int.Parse(s["num"].Split(".")[0]) : 0; res.series[5].data.Add(sum); } return res; #endregion // 小于 1小时 还是采取 实时数据 if (DateTime.Now - dateTime <= TimeSpan.FromHours(1)) { var RESudpdata = data.TBL_RUCS_UDP_LOGS.Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 ).Select(x => new { x.DIRECTION, x.RETRY_COUNT, x.RESULT, x.PROCESSING_TIMESPENT, x.DATA_VALID }).AsNoTracking().ToList(); // 查询数据库数量 6 * 4 24次 非正确注释 tump = 5; for (int i = 0; i < 100; i += tump) { if (i > 100) { i = 100; } if (i == 20) { tump = 10; } if (i == 30) { tump = 20; } if (i == 50) { tump = 50; } int sum = 0; sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[0].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[1].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RESULT == 0 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[2].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[3].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[4].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATA_VALID == 0 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res.series[5].data.Add(sum); } } else { var XC_DATA = GetPROCESSINGTIME(dateTime, dateTime1); for (int i = 0; i < res.legend.data.Count; i++) { res.series[i].data.AddRange(XC_DATA[i]); } } return res; } #endregion #region UDP通讯接收延迟 07 命令 ------------------------------------------------ 阿里化 处理完毕 需要 /// /// 处理耗时 ------------------------------------ /// /// /// /// /// public static ECHARTS GetRevDelayDateTime(LOG_DBContext data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "UDP通讯接收延迟"; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) { dateTime1 = DateTime.Now; dateTime = dateTime1.AddSeconds(-NOW_S); } else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); // 0 - 30 30 - 60 60 - 100 >100 res.xAxis.data.Add("<-10"); res.xAxis.data.Add("-10-0"); res.xAxis.data.Add("0-10"); res.xAxis.data.Add("10-20"); res.xAxis.data.Add("20-30"); res.xAxis.data.Add("30-40"); res.xAxis.data.Add("40-50"); res.xAxis.data.Add("50-60"); res.xAxis.data.Add("60-80"); res.xAxis.data.Add("80-110"); res.xAxis.data.Add("110-150"); res.xAxis.data.Add("150-200"); res.xAxis.data.Add("200-300"); res.xAxis.data.Add("300-500"); res.xAxis.data.Add(">500"); res.series.Add(new DataHelp { name = "RX一次" }); res.series[0].lineStyle.normal.color = "#7bd9a5"; res.series[0].type = "bar"; res.series[0].stack = "RX"; res.color.Add(res.series[0].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX重发" }); res.series[1].lineStyle.normal.color = "#f7c5a0"; res.series[1].type = "bar"; res.series[1].stack = "RX"; res.color.Add(res.series[1].lineStyle.normal.color); res.series.Add(new DataHelp { name = "RX无效" }); res.series[2].lineStyle.normal.color = "#d87a80"; res.series[2].type = "bar"; res.series[2].stack = "RX"; res.color.Add(res.series[2].lineStyle.normal.color); res.legend.data.Add("RX一次"); res.legend.data.Add("RX重发"); res.legend.data.Add("RX无效"); #region 阿里的方式 var asls = new ASLS(); var RES_data = asls.GetLogs_(0, @$"* | select case when (result = 1 and retry_count = 0 and data_valid = 1) then 'rx一次' when result = 1 and retry_count > 0 and data_valid = 1 then 'rx重发' when data_valid = 0 then 'rx无效' else '其他' end as cf, case when revdelaydatetime < -10 then '<-10' when revdelaydatetime>=-10 and revdelaydatetime <0 then '-10-0' when revdelaydatetime>=0 and revdelaydatetime <10 then '0-10' when revdelaydatetime>=10 and revdelaydatetime <20 then '10-20' when revdelaydatetime>=20 and revdelaydatetime <30 then '20-30' when revdelaydatetime>=30 and revdelaydatetime <40 then '30-40' when revdelaydatetime>=40 and revdelaydatetime <50 then '40-50' when revdelaydatetime>=50 and revdelaydatetime <60 then '50-60' when revdelaydatetime>=60 and revdelaydatetime <80 then '60-80' when revdelaydatetime>=80 and revdelaydatetime <110 then '80-110' when revdelaydatetime>=110 and revdelaydatetime <150 then '110-150' when revdelaydatetime>=150 and revdelaydatetime <200 then '150-200' when revdelaydatetime>=200 and revdelaydatetime <300 then '200-300' when revdelaydatetime>=300 and revdelaydatetime <500 then '300-500' when revdelaydatetime>=500 then '>=500' else '其他' end as qj, count(revdelaydatetime) as num where udp_cmd = '7 0' and direction = 'RX' AND datetime >= '{dateTime.ToString("yyyy-MM-dd HH: mm:ss")}' AND datetime < '{dateTime1.ToString("yyyy-MM-dd HH: mm: ss")}' group by case when revdelaydatetime < -10 then '<-10' when revdelaydatetime>=-10 and revdelaydatetime <0 then '-10-0' when revdelaydatetime>=0 and revdelaydatetime <10 then '0-10' when revdelaydatetime>=10 and revdelaydatetime <20 then '10-20' when revdelaydatetime>=20 and revdelaydatetime <30 then '20-30' when revdelaydatetime>=30 and revdelaydatetime <40 then '30-40' when revdelaydatetime>=40 and revdelaydatetime <50 then '40-50' when revdelaydatetime>=50 and revdelaydatetime <60 then '50-60' when revdelaydatetime>=60 and revdelaydatetime <80 then '60-80' when revdelaydatetime>=80 and revdelaydatetime <110 then '80-110' when revdelaydatetime>=110 and revdelaydatetime <150 then '110-150' when revdelaydatetime>=150 and revdelaydatetime <200 then '150-200' when revdelaydatetime>=200 and revdelaydatetime <300 then '200-300' when revdelaydatetime>=300 and revdelaydatetime <500 then '300-500' when revdelaydatetime>=500 then '>=500' else '其他' end, case when (result = 1 and retry_count = 0 and data_valid = 1) then 'rx一次' when result = 1 and retry_count > 0 and data_valid = 1 then 'rx重发' when data_valid = 0 then 'rx无效' else '其他' end ORDER BY qj", dateTime.AddHours(-0.5), dateTime1.AddHours(0.5)).Result; int tump = 10; for (int i = -20; i < 500; i += tump) { if (i == 60) { tump = 20; } if (i == 80) { tump = 30; } if (i == 110) { tump = 40; } if (i == 150) { tump = 50; } if (i == 200) { tump = 100; } if (i == 300) { tump = 200; } if (i > 500) { i = 500; } int sum = 0; var STR = $"{i}-{i + tump}"; if (i >= 500) STR = ">=500"; if (i < -10) STR = "<-10"; var tump_ = RES_data.FirstOrDefault(x => x["cf"] == "rx一次" && x["qj"] == STR); sum = tump_ == null?0:int.Parse(tump_["num"].Split(".")[0]); res.series[0].data.Add(sum); tump_ = RES_data.FirstOrDefault(x => x["cf"] == "rx重发" && x["qj"] == STR); sum = tump_ == null ? 0 : int.Parse(tump_["num"].Split(".")[0]); res.series[1].data.Add(sum); tump_ = RES_data.FirstOrDefault(x => x["cf"] == "rx无效" && x["qj"] == STR); sum = tump_ == null ? 0 : int.Parse(tump_["num"].Split(".")[0]); res.series[2].data.Add(sum); } return res; #endregion // 小于 1小时 还是采取 实时数据 if (DateTime.Now - dateTime <= TimeSpan.FromHours(1)) { var RESudpdata = data.TBL_RUCS_UDP_LOGS.Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 ).Select(x => new { x.DIRECTION, x.RETRY_COUNT, x.RESULT, x.RevDelayDateTime, x.DATA_VALID }).AsNoTracking().ToList(); // 查询数据库数量 6 * 4 24次 非正确注释 tump = 10; for (int i = -20; i < 500; i += tump) { if (i == 60) { tump = 20; } if (i == 80) { tump = 30; } if (i == 110) { tump = 40; } if (i == 150) { tump = 50; } if (i == 200) { tump = 100; } if (i == 300) { tump = 200; } if (i > 500) { i = 500; } int sum = 0; if (i == -10) { sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.RevDelayDateTime < i).Count(); res.series[0].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.RevDelayDateTime < i).Count(); res.series[1].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATA_VALID == 0 && x.RevDelayDateTime < i).Count(); res.series[2].data.Add(sum); } else { sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res.series[0].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res.series[1].data.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATA_VALID == 0 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res.series[2].data.Add(sum); } } } else { var XC_DATA = GetRevDelayDateTime(dateTime, dateTime1); for (int i = 0; i < res.legend.data.Count; i++) { res.series[i].data.AddRange(XC_DATA[i]); } } return res; } #endregion #region BLV_UdpDebug 包数 统计图 暂时未使用 public static ECHARTS GetBLV_UdpDebugImg(DEBUGGER_DB data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "包数统计图"; //res.type = "bar"; DateTime dateTime = DateTime.Now; DateTime startDatedateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; // // endDate==null 表示实时数据 // if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) dateTime1 = DateTime.Now; else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } startDatedateTime = dateTime; var RESudpdata = data.UDPDEBUGGERS; while (dateTime <= dateTime1) { string time = dateTime.ToString("yyyy-MM-dd HH"); if (endDate != null) dateTime = dateTime.AddHours(1); else { time = dateTime.ToString("yyyy-MM-dd HH:mm:ss"); dateTime = dateTime.AddSeconds(NOW_S); } res.xAxis.data.Add(time); } res.series.Add(new DataHelp { name = "调试通讯数" }); res.series[0].lineStyle.normal.color = "#2b821d"; res.color.Add(res.series[0].lineStyle.normal.color); res.legend.data.Add("调试通讯数"); //非实时 if (endDate != null) { foreach (var item in res.xAxis.data) { DateTime DT = DateTime.Parse(item + ":00:00"); res.series[0].data.Add( XC_Redis.Redis.GET(item + "_GetBLV_UdpDebugImg_sum", () => { return RESudpdata.Where(X => X.CreateDateTime >= DT && X.CreateDateTime < DT.AddHours(1)).Count(); }, DateTime.Now.ToString("yyyy-MM-dd HH") == item ? 5 : -1) ); } } else { //实时 for (int i = 0; i < res.xAxis.data.Count; i++) { res.series[0].data.Add(RESudpdata.Where(x => x.CreateDateTime >= DateTime.Parse(res.xAxis.data[i]) && x.CreateDateTime < DateTime.Parse(res.xAxis.data[i]).AddSeconds(NOW_S)).Count()); } } return res; } #endregion #region BLV_UdpDebug 数据统计接收耗时条形统计图 public static ECHARTS GetBLV_UdpDebugImg_RevDelayDateTime(DEBUGGER_DB data, string startDate, string endDate) { ECHARTS res = new ECHARTS(); res.title.text = "接收耗时"; DateTime dateTime = DateTime.Now; DateTime startDatedateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; // // endDate==null 表示实时数据 // if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) dateTime1 = DateTime.Now; else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); var RESudpdata = data.UDPDEBUGGERS.Where(x => x.CreateDateTime >= dateTime && x.CreateDateTime < dateTime1); res.xAxis.data.Add("<0"); res.xAxis.data.Add("0-30"); res.xAxis.data.Add("30-60"); res.xAxis.data.Add("60-100"); res.xAxis.data.Add("100-130"); res.xAxis.data.Add("≥130"); res.series.Add(new DataHelp { }); res.series[0].lineStyle.normal.color = "#2b821d"; res.series[0].type = "bar"; res.color.Add(res.series[0].lineStyle.normal.color); for (var i = 0; i < 130; i += 30) { if (i == 0) { res.series[0].data.Add(RESudpdata.Where(X => X.RevDelayDateTime < 0).Count()); continue; } if (i == 130) { i = 130; res.series[0].data.Add(RESudpdata.Where(X => X.RevDelayDateTime >= i).Count()); break; } res.series[0].data.Add(RESudpdata.Where(X => X.RevDelayDateTime >= i && X.RevDelayDateTime < i + 30).Count()); } return res; } #endregion #region 统计指定时间段的处理耗时 有定时器 每小时统计一次 /// /// 统计端口每小时的处理耗时 /// /// /// /// public static List> GetPROCESSINGTIME(DateTime start, DateTime end) { List> res = null; if (end < start) return res; using (var db = XC_Data.GetLogDataBase()) { while (start.ToString("yyyyMMddHH") != end.AddHours(1).ToString("yyyyMMddHH")) { var dateTime = start; var dateTime1 = start.AddHours(1); var xc_data = XC_Redis.Redis.GET(start.ToString("yyyyMMddHH") + "GetPROCESSINGTIME", () => { // TX 一次 List res1 = new List(); // TX 重发 List res2 = new List(); // TX 失败 List res3 = new List(); // rx 一次 List res4 = new List(); // rx 重发 List res5 = new List(); // rx 无效 List res6 = new List(); var RESudpdata = db.TBL_RUCS_UDP_LOGS.Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 ).Select(x => new { x.DIRECTION, x.RETRY_COUNT, x.RESULT, x.PROCESSING_TIMESPENT, x.DATA_VALID }).AsNoTracking(); int tump = 5; for (int i = 0; i < 100; i += tump) { if (i > 100) { i = 100; } if (i == 20) { tump = 10; } if (i == 30) { tump = 20; } if (i == 50) { tump = 50; } int sum = 0; sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res1.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res2.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "TX" && x.RESULT == 0 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res3.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT == 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res4.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.RETRY_COUNT > 0 && x.RESULT == 1 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res5.Add(sum); sum = RESudpdata.Where(x => x.DIRECTION == "RX" && x.DATA_VALID == 0 && x.PROCESSING_TIMESPENT >= i && (x.PROCESSING_TIMESPENT < (i + tump) || i == 100)).Count(); res6.Add(sum); if (i == 20) { tump += 5; } if (i == 30) { tump += 10; } if (i == 50) { tump = 50; } } return new List> { res1, res2, res3, res4, res5, res6 }; }, start.ToString("yyyyMMddHH") == DateTime.Now.ToString("yyyyMMddHH") ? 5 : -1); if (res == null) res = xc_data; else { for (int i = 0; i < xc_data.Count; i++) { for (int j = 0; j < xc_data[i].Count; j++) { res[i][j] += xc_data[i][j]; } } } start = start.AddHours(1); } return res; } } #endregion #region 命令饼图 ---------------------------------------------------------需要 阿里化完成 public static ECHARTS GetCMDpie_(LOG_DBContext data, string startDate, string endDate, string type = "TX") { ECHARTS res = new ECHARTS(); res.yAxis = null; res.xAxis = null; res.title.text = $"UDP通讯{type}命令饼图"; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; res.series.Add(new DataHelp() { type = "pie" }); res.color.Add("#2b821d"); res.color.Add("#f7c5a0"); res.color.Add("#c1232b"); res.color.Add("#9b8bba"); res.color.Add("#0098d9"); res.color.Add("#7bd9a5"); if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) { dateTime1 = DateTime.Now; dateTime = dateTime1.AddSeconds(-NOW_S); } else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); #region 阿里的方式 var asls = new ASLS(); int cmdcount = 0; int other = 0; var s = asls.GetLogs_(0, $"* | SELECT udp_cmd,count(*) sum WHERE direction = '{type}' AND datetime >= '{dateTime.ToString("yyyy-MM-dd HH:mm:dd")}' and udp_cmd like '%0' AND datetime < '{dateTime1.ToString("yyyy-MM-dd HH:mm:dd")}' group by udp_cmd order by count(*) desc", dateTime.AddHours(-0.5), dateTime1.AddHours(0.5)); if (s.Result.Count <= 0) return res; foreach (var item in s.Result) { cmdcount++; if (cmdcount <= 5) res.series[0].data.Add(new { name = item["udp_cmd"], value = item["sum"] }); else other += int.Parse(item["sum"]); } if (other > 0) res.series[0].data.Add(new { name = "其他命令", value = other }); return res; #endregion // 小于 1小时 还是采取 实时数据 if (DateTime.Now - dateTime <= TimeSpan.FromHours(1)) { var RESudpdata = data.TBL_RUCS_UDP_LOGS.AsNoTracking().Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 && x.DIRECTION == type && x.UDP_CMD.Contains("0") ).Select(x => x.UDP_CMD).AsEnumerable().GroupBy(x => x).Select(x => new { x.Key, sum = x.Count() }).OrderByDescending(x => x.sum).ToList(); foreach (var item in RESudpdata) { cmdcount++; if (cmdcount <= 5) res.series[0].data.Add(new { name = item.Key, value = item.sum }); else other += item.sum; } if (other > 0) res.series[0].data.Add(new { name = "其他命令", value = other }); } else { var DATA = GetCMDpie(dateTime, dateTime1, type); foreach (var item in DATA.Keys) { res.series[0].data.Add(new { name = item, value = DATA[item] }); } } return res; } #endregion #region 重发饼图 ---------------------------------------------------需要 阿里化完成 public static ECHARTS GetRETRY_COUNT(LOG_DBContext data, string startDate, string endDate, string type = "TX") { ECHARTS res = new ECHARTS(); res.yAxis = null; res.xAxis = null; res.title.text = $"UDP通讯{type}重发饼图"; DateTime dateTime = DateTime.Now; DateTime dateTime1 = DateTime.Now; res.series.Add(new DataHelp() { type = "pie" }); res.color.Add("#2b821d"); res.color.Add("#f7c5a0"); res.color.Add("#c1232b"); res.color.Add("#9b8bba"); res.color.Add("#0098d9"); res.color.Add("#7bd9a5"); if (!DateTime.TryParse(startDate, out dateTime)) { return null; } if (endDate == null) { dateTime1 = DateTime.Now; dateTime = dateTime1.AddSeconds(-NOW_S); } else { if (!DateTime.TryParse(endDate, out dateTime1)) { return null; }; } dateTime = STARTTIME_HELP.GetSTARTTIME(dateTime); #region 阿里的方式 var asls = new ASLS(); int cmdcount = 0; int other = 0; var s = asls.GetLogs_(0, $"* | SELECT retry_count, count(*) sum WHERE direction = '{type}' and retry_count > 0 AND datetime >= '{dateTime.ToString("yyyy-MM-dd HH:mm:dd")}' AND datetime < '{dateTime1.ToString("yyyy-MM-dd HH:mm:dd")}' group by retry_count order by count(*) desc", dateTime.AddHours(-0.5), dateTime1.AddHours(0.5)); if (s.Result.Count <= 0) return res; foreach (var item in s.Result) { cmdcount++; if (cmdcount <= 5) res.series[0].data.Add(new { name = "重发" + item["retry_count"] + "次", value = item["sum"] }); else other += int.Parse(item["sum"]); } if (other > 0) res.series[0].data.Add(new { name = "其他", value = other }); return res; #endregion // 小于 1小时 还是采取 实时数据 if (DateTime.Now - dateTime <= TimeSpan.FromHours(1)) { var RESudpdata = data.TBL_RUCS_UDP_LOGS.AsNoTracking().Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 && x.DIRECTION == type ).Select(x => x.RETRY_COUNT).AsEnumerable().GroupBy(x => x).Select(x => new { x.Key, sum = x.Count() }).OrderByDescending(x => x.sum).ToList(); foreach (var item in RESudpdata) { cmdcount++; if (cmdcount <= 5) res.series[0].data.Add(new { name = "重发" + item.Key + "次", value = item.sum }); else other += item.sum; } if (other > 0) res.series[0].data.Add(new { name = "其他", value = other }); } else { var DATA = GetRETRY_COUNT_(dateTime, dateTime1, type); foreach (var item in DATA.Keys) { res.series[0].data.Add(new { name = item, value = DATA[item] }); } } return res; } #endregion #region 接受延迟 07 定时器 public static List> GetRevDelayDateTime(DateTime start, DateTime end) { List> res = null; if (end < start) return res; using (var db = XC_Data.GetLogDataBase()) { while (start.ToString("yyyyMMddHH") != end.AddHours(1).ToString("yyyyMMddHH")) { var dateTime = start; var dateTime1 = start.AddHours(1); var xc_data = XC_Redis.Redis.GET(start.ToString("yyyyMMddHH") + "GetRevDelayDateTime", () => { // rx 一次 List res1 = new List(); // rx 重发 List res2 = new List(); // rx 无效 List res3 = new List(); var RESudpdata = db.TBL_RUCS_UDP_LOGS.Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 && x.UDP_CMD == "7 0" && x.DIRECTION == "RX" ).Select(x => new { x.RETRY_COUNT, x.RESULT, x.RevDelayDateTime, x.DATA_VALID }).AsNoTracking(); int tump = 10; for (int i = -20; i < 500; i += tump) { if (i == 60) { tump = 20; } if (i == 80) { tump = 30; } if (i == 110) { tump = 40; } if (i == 150) { tump = 50; } if (i == 200) { tump = 100; } if (i == 300) { tump = 200; } if (i > 500) { i = 500; } int sum = 0; if (i < -10) { sum = RESudpdata.Where(x => x.RETRY_COUNT == 0 && x.RESULT == 1 && x.RevDelayDateTime < -10).Count(); res1.Add(sum); sum = RESudpdata.Where(x => x.RETRY_COUNT > 0 && x.RESULT == 1 && x.RevDelayDateTime < -10).Count(); res2.Add(sum); sum = RESudpdata.Where(x => x.DATA_VALID == 0 && x.RevDelayDateTime < -10).Count(); res3.Add(sum); } else { sum = RESudpdata.Where(x => x.RETRY_COUNT == 0 && x.RESULT == 1 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res1.Add(sum); sum = RESudpdata.Where(x => x.RETRY_COUNT > 0 && x.RESULT == 1 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res2.Add(sum); sum = RESudpdata.Where(x => x.DATA_VALID == 0 && x.RevDelayDateTime >= i && (x.RevDelayDateTime < (i + tump) || i == 500)).Count(); res3.Add(sum); } } return new List> { res1, res2, res3 }; }, start.ToString("yyyyMMddHH") == DateTime.Now.ToString("yyyyMMddHH") ? 5 : -1); if (res == null) res = xc_data; else { for (int i = 0; i < xc_data.Count; i++) { for (int j = 0; j < xc_data[i].Count; j++) { res[i][j] += xc_data[i][j]; } } } start = start.AddHours(1); } return res; } } #endregion #region 命令饼图 定时器 public static Dictionary GetCMDpie(DateTime start, DateTime end, string type = "TX") { Dictionary res = null; if (end < start) return res; using (var db = XC_Data.GetLogDataBase()) { while (start.ToString("yyyyMMddHH") != end.AddHours(1).ToString("yyyyMMddHH")) { var dateTime = start; var dateTime1 = start.AddHours(1); var xc_data = XC_Redis.Redis.GET(start.ToString("yyyyMMddHH") + "GetLogDataBase", () => { var RESudpdata = db.TBL_RUCS_UDP_LOGS.AsNoTracking().Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 && x.DIRECTION == type && x.UDP_CMD.Contains("0") ).Select(x => x.UDP_CMD).AsEnumerable().GroupBy(x => x).Select(x => new { x.Key, sum = x.Count() }).OrderByDescending(x => x.sum).ToList(); Dictionary resdata = new Dictionary(); int cmdcount = 0; int other = 0; foreach (var item in RESudpdata) { cmdcount++; if (cmdcount <= 5) resdata.Add(item.Key, item.sum); else other += item.sum; } if (other > 0) resdata.Add("其他命令", other); return resdata; }, start.ToString("yyyyMMddHH") == DateTime.Now.ToString("yyyyMMddHH") ? 5 : -1); if (res == null) res = xc_data; else { foreach (var item in xc_data.Keys) { if (res.Keys.Contains(item)) res[item] += xc_data[item]; else res.Add(item, xc_data[item]); } } start = start.AddHours(1); } return res; } } #endregion #region 统计端口每小时的端口使用情况 有定时器 /// /// 统计端口每小时的端口使用情况 /// /// /// /// /// public static List GetProt(DateTime start, DateTime end, string TYPE = "TX") { List res = new List(); if (end < start) return res; using (var db = XC_Data.GetLogDataBase()) { while (start.ToString("yyyyMMddHH") != end.AddHours(1).ToString("yyyyMMddHH")) { string STRKEY = TYPE + "_" + start.ToString("yyyyMMddHH"); int[] rd = XC_Redis.Redis.GetKey(STRKEY); if (rd == null || rd.Length == 0) { var NEWDATA = db.TBL_RUCS_UDP_LOGS.AsNoTracking().Where(x => x.DIRECTION == TYPE && x.DATETIME >= start && x.DATETIME < start.AddHours(1)).Select(X => X.SOURCE_PORT).ToList(); rd = new int[255]; for (int Prot = 0; Prot < 255; Prot++) { rd[Prot] = TYPE == "TX" ? NEWDATA.Where(x => x == (6000 + Prot).ToString()).Count() : NEWDATA.Where(x => x == (6000 + Prot).ToString()).Count(); if (res.Count == Prot) res.Add(rd[Prot]); else res[Prot] += rd[Prot]; } } else { for (int Prot = 0; Prot < 255; Prot++) { if (res.Count == Prot) res.Add(rd[Prot]); else res[Prot] += rd[Prot]; } } XC_Redis.Redis.SetKey(STRKEY, rd, start.ToString("yyyyMMddHH") == DateTime.Now.ToString("yyyyMMddHH") ? 5 : -1); start = start.AddHours(1); } } return res; } #endregion #region 重发饼图 定时器 public static Dictionary GetRETRY_COUNT_(DateTime start, DateTime end, string type = "TX") { Dictionary res = null; if (end < start) return res; using (var db = XC_Data.GetLogDataBase()) { while (start.ToString("yyyyMMddHH") != end.AddHours(1).ToString("yyyyMMddHH")) { var dateTime = start; var dateTime1 = start.AddHours(1); var xc_data = XC_Redis.Redis.GET(start.ToString("yyyyMMddHH") + "GetRETRY_COUNT", () => { var RESudpdata = db.TBL_RUCS_UDP_LOGS.AsNoTracking().Where(x => x.DATETIME >= dateTime && x.DATETIME < dateTime1 && x.DIRECTION == type ).Select(x => x.RETRY_COUNT).AsEnumerable().GroupBy(x => x).Select(x => new { x.Key, sum = x.Count() }).OrderByDescending(x => x.sum).ToList(); Dictionary resdata = new Dictionary(); int cmdcount = 0; int other = 0; foreach (var item in RESudpdata) { cmdcount++; if (cmdcount <= 5) resdata.Add("重发" + item.Key + "次", item.sum); else other += item.sum; } if (other > 0) resdata.Add("其他", other); return resdata; }, start.ToString("yyyyMMddHH") == DateTime.Now.ToString("yyyyMMddHH") ? 5 : -1); if (res == null) res = xc_data; else { foreach (var item in xc_data.Keys) { if (res.Keys.Contains(item)) res[item] += xc_data[item]; else res.Add(item, xc_data[item]); } } start = start.AddHours(1); } return res; } } #endregion } }