网页上显示windows系统任务计划
服务器多,系统多,功能模块多。有不少程序需要做交叉部署,重叠部署。出了问题找起来费劲得很。。
需求:不用db,要用json格式的文本来配置需要的信息,方便修改。然后在网页上按要求显示相关信息。
设计的json格式:
1 { 2 "cfg": [ 3 { 4 "func": "PhoneRecord", 5 "server": [ 6 { 7 "name": "某本地服务器", 8 "ip": "1.1.1.1", 9 "domain": "aaa", 10 "user": "aaa", 11 "password": "aaa", 12 "program": [ 13 { 14 "name": "PhoneRecord_Upload", 15 "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.2-PhoneRecord_Upload'>帮助文档<a>" 16 } 17 ] 18 }, 19 { 20 "name": "某内网服务器", 21 "ip": "2.2.2.2", 22 "domain": "bbb", 23 "user": "bbb", 24 "password": "bbb", 25 "program": [ 26 { 27 "name": "PhoneRecord_Upload", 28 "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.2-PhoneRecord_Upload'>帮助文档<a>" 29 }, 30 { 31 "name": "PhoneRecord_TEXT", 32 "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.4-PhoneRecord_TEXT'>帮助文档<a>" 33 } 34 ] 35 } 36 ] 37 }, 38 { 39 "func": "NYUCard", 40 "server": [ 41 { 42 "name": "某内网服务器", 43 "ip": "2.2.2.2", 44 "domain": "bbb", 45 "user": "bbb", 46 "password": "bbb", 47 "program": [ 48 { 49 "name": "NYUCard", 50 "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/3-NYUCard'>帮助文档<a>" 51 } 52 ] 53 } 54 ] 55 } 56 ] 57 }
网页:
主要是这个合并单元格的较为烦人,
参考了篇博客的思路 https://www.cnblogs.com/wangzhenyu666/p/8302881.html
但是这里会涉及到多层嵌套故不能照搬,
实现和优化过程:
1 using System.Text; 2 using System.IO; 3 using Newtonsoft.Json.Linq; 4 using System.Web; 5 using TaskScheduler; 6 7 namespace OAConsole_IIS 8 { 9 public class cfg 10 { 11 12 public static string HtmlTable() 13 { 14 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 15 var str = File.ReadAllText(cfgPath); 16 var obj = JObject.Parse(str); 17 18 StringBuilder sb = new StringBuilder(); 19 sb.Append("<table>"); 20 //sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th></tr></thead>"); 21 22 foreach (var func in obj["cfg"]) 23 { 24 sb.Append("<tr>"); 25 sb.Append($"<td>{func["func"]}</td>"); 26 // 27 sb.Append($"<td>"); 28 sb.Append("<table>"); 29 foreach (var server in func["server"]) 30 { 31 var tasks = SchTaskExt.GetAllTasks(); 32 sb.Append("<tr>"); 33 sb.Append($"<td>{server["name"]}-{server["ip"]}</td>"); 34 // 35 sb.Append($"<td>"); 36 sb.Append("<table>"); 37 foreach (var program in server["program"]) 38 { 39 var State = ""; 40 var LastRunTime = ""; 41 var NextRunTime = ""; 42 43 IRegisteredTask task = null; 44 try 45 { 46 task = tasks[program["name"]]; 47 State = task.State.ToString(); 48 LastRunTime = task.LastRunTime.ToString(); 49 NextRunTime = task.NextRunTime.ToString(); 50 } 51 catch (System.Exception) 52 { 53 } 54 55 sb.Append("<tr>"); 56 sb.Append($"<td>{program["name"]}</td>"); 57 sb.Append($"<td>{State}</td>"); 58 sb.Append($"<td>{LastRunTime}</td>"); 59 sb.Append($"<td>{NextRunTime}</td>"); 60 sb.Append($"<td>{program["note"]}</td>"); 61 sb.Append("</tr>"); 62 } 63 sb.Append("</table>"); 64 sb.Append($"</td>"); 65 // 66 sb.Append("</tr>"); 67 } 68 sb.Append("</table>"); 69 sb.Append($"</td>"); 70 // 71 sb.Append("</tr>"); 72 } 73 74 sb.Append("</table>"); 75 return sb.ToString(); 76 77 } 78 79 public static string HtmlTable2() 80 { 81 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 82 var str = File.ReadAllText(cfgPath); 83 var obj = JObject.Parse(str); 84 85 StringBuilder sb = new StringBuilder(); 86 sb.Append("<table>"); 87 sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>"); 88 89 for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++) 90 { 91 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++) 92 { 93 for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++) 94 { 95 var func = obj["cfg"][i]["func"].ToString(); 96 var server_name = obj["cfg"][i]["server"][j]["name"].ToString(); 97 var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString(); 98 var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString(); 99 var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString(); 100 sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 101 } 102 } 103 } 104 105 sb.Append("</table>"); 106 return sb.ToString(); 107 108 } 109 110 public static string HtmlTable3() 111 { 112 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 113 var str = File.ReadAllText(cfgPath); 114 var obj = JObject.Parse(str); 115 116 StringBuilder sb = new StringBuilder(); 117 sb.Append("<table>"); 118 sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>"); 119 120 for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++) 121 { 122 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++) 123 { 124 for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++) 125 { 126 var func = obj["cfg"][i]["func"].ToString(); 127 var server_name = obj["cfg"][i]["server"][j]["name"].ToString(); 128 var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString(); 129 var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString(); 130 var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString(); 131 //sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 132 133 if (k == 0) 134 { 135 sb.Append($"<tr><td>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 136 } 137 else 138 { 139 sb.Append($"<tr><td>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 140 } 141 142 } 143 } 144 } 145 146 sb.Append("</table>"); 147 return sb.ToString(); 148 149 } 150 151 public static string HtmlTable4() 152 { 153 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 154 var str = File.ReadAllText(cfgPath); 155 var obj = JObject.Parse(str); 156 157 StringBuilder sb = new StringBuilder(); 158 sb.Append("<table>"); 159 sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>"); 160 161 for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++) 162 { 163 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++) 164 { 165 for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++) 166 { 167 var func = obj["cfg"][i]["func"].ToString(); 168 var server_name = obj["cfg"][i]["server"][j]["name"].ToString(); 169 var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString(); 170 var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString(); 171 var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString(); 172 //sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 173 174 if (k == 0) 175 { 176 //sb.Append($"<tr><td>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 177 if (j == 0) 178 { 179 var func_rowspan = 0; 180 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++) 181 { 182 func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count; 183 } 184 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 185 } 186 else 187 { 188 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 189 } 190 } 191 else 192 { 193 //sb.Append($"<tr><td>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 194 if (j == 0) 195 { 196 var func_rowspan = 0; 197 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++) 198 { 199 func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count; 200 } 201 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 202 } 203 else 204 { 205 sb.Append($"<tr><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 206 } 207 } 208 209 } 210 } 211 } 212 213 sb.Append("</table>"); 214 return sb.ToString(); 215 216 } 217 218 //算法优化 219 public static string HtmlTable5() 220 { 221 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 222 var str = File.ReadAllText(cfgPath); 223 var obj = JObject.Parse(str); 224 225 StringBuilder sb = new StringBuilder(); 226 sb.Append("<table>"); 227 sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>"); 228 229 for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++) 230 { 231 var func_rowspan = 0; 232 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++) 233 { 234 func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count; 235 } 236 237 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++) 238 { 239 for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++) 240 { 241 var func = obj["cfg"][i]["func"].ToString(); 242 var server_name = obj["cfg"][i]["server"][j]["name"].ToString(); 243 var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString(); 244 var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString(); 245 var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString(); 246 247 if (k == 0) 248 { 249 if (j == 0) 250 { 251 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 252 } 253 else 254 { 255 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 256 } 257 } 258 else 259 { 260 if (j == 0) 261 { 262 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 263 } 264 else 265 { 266 sb.Append($"<tr><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>"); 267 } 268 } 269 270 } 271 } 272 } 273 274 sb.Append("</table>"); 275 return sb.ToString(); 276 277 } 278 279 public static string HtmlTable6() 280 { 281 var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}"; 282 var str = File.ReadAllText(cfgPath); 283 var obj = JObject.Parse(str); 284 285 StringBuilder sb = new StringBuilder(); 286 sb.Append("<table>"); 287 sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>"); 288 289 for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++) 290 { 291 var func_rowspan = 0; 292 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++) 293 { 294 func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count; 295 } 296 297 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++) 298 { 299 //TODO 300 //GetAllTasks(object serverName, object user, object domain, object password) 301 302 var tasks = SchTaskExt.GetAllTasks(); 303 304 for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++) 305 { 306 var func = obj["cfg"][i]["func"].ToString(); 307 var server_name = obj["cfg"][i]["server"][j]["name"].ToString(); 308 var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString(); 309 var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString(); 310 var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString(); 311 312 var State = ""; 313 var LastRunTime = ""; 314 var NextRunTime = ""; 315 316 IRegisteredTask task = null; 317 try 318 { 319 task = tasks[program_name]; 320 State = task.State.ToString(); 321 LastRunTime = task.LastRunTime.ToString(); 322 NextRunTime = task.NextRunTime.ToString(); 323 } 324 catch (System.Exception) 325 { 326 } 327 328 if (k == 0) 329 { 330 if (j == 0) 331 { 332 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>"); 333 } 334 else 335 { 336 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>"); 337 } 338 } 339 else 340 { 341 //if (j == 0) 342 //{ 343 // sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>"); 344 //} 345 //else 346 //{ 347 // sb.Append($"<tr><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>"); 348 //} 349 sb.Append($"<tr><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>"); 350 } 351 352 } 353 } 354 } 355 356 sb.Append("</table>"); 357 return sb.ToString(); 358 359 } 360 361 362 363 } 364 }