config.html 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>SmartPing Dashboard</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  7. <meta name="apple-mobile-web-app-capable" content="yes">
  8. <link href="assets/css/bootstrap.min.css" rel="stylesheet">
  9. <link href="assets/css/bootstrap-responsive.min.css" rel="stylesheet">
  10. <link href="assets/css/font-awesome.css" rel="stylesheet">
  11. <link href="assets/css/style.css" rel="stylesheet">
  12. <link href="assets/css/pages/dashboard.css" rel="stylesheet">
  13. <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
  14. <!--[if lt IE 9]>
  15. <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
  16. <![endif]-->
  17. </head>
  18. <body>
  19. <div class="navbar navbar-fixed-top">
  20. <div class="navbar-inner">
  21. <div class="container">
  22. <span id="cloudbrand" class="brand" style="margin-right: -15px;"></span><a class="brand" href="index.html">SmartPing Dashbord<span id="agentname"></span></a>
  23. <span id="banner_last_ck_time" class="pull-right " style="margin-top: 10px;"></span>
  24. <div class="nav-collapse">
  25. <!--
  26. <ul class="nav pull-right">
  27. <li class="dropdown">
  28. <a target="_blank" href="http://smartping.cn/" >
  29. <i class="icon-comment"></i>
  30. Know About SmartPing.CN ?
  31. </a>
  32. </li>
  33. </ul>
  34. -->
  35. </div>
  36. <!--/.nav-collapse -->
  37. </div>
  38. <!-- /container -->
  39. </div>
  40. <!-- /navbar-inner -->
  41. </div>
  42. <!-- /navbar -->
  43. <div class="subnavbar">
  44. <div class="subnavbar-inner">
  45. <div class="container">
  46. <ul class="mainnav">
  47. <li><a href="index.html"><i class="icon-mail-forward"></i><span>正向Ping</span> </a> </li>
  48. <li><a href="reverse.html"><i class="icon-mail-reply"></i><span>反向Ping</span> </a> </li>
  49. <li ><a href="topology.html"><i class="icon-bar-chart"></i><span>Ping拓扑</span> </a> </li>
  50. <li><a href="mapping.html"><i class="icon-map-marker"></i><span>全国延迟</span> </a> </li>
  51. <li ><a href="tools.html"><i class="icon-wrench"></i><span>检测工具</span> </a> </li>
  52. <li class="active"><a id="cfgUrl" href="config.html"><i class="icon-cog"></i><span>系统配置</span> </a> </li>
  53. </ul>
  54. </div>
  55. <!-- /container -->
  56. </div>
  57. <!-- /subnavbar-inner -->
  58. </div>
  59. <!-- /subnavbar -->
  60. <div class="main localmode" style="margin-top:-20px;">
  61. <div class="main-inner">
  62. <div class="container" id="main">
  63. <div class="row">
  64. <div class="span4">
  65. <div class="widget-header">
  66. <i class="icon-user"></i>
  67. <h3>保存配置 </h3>
  68. <span style="float: right;margin-right: 25px;"><a target="_blank" href="/api/config.json"><i class="icon-file"></i></a></span>
  69. </div> <!-- /widget-header -->
  70. <div class="widget-content">
  71. <div style="text-align: center">
  72. <span>
  73. <b>密码:</b>
  74. <input style="width:120px;" class="password" type="password" id="pass">
  75. <button style="margin: -10px 0 0 0;" type="submit" class="btn btn-primary" onclick="saveconf()">保存</button>
  76. </span>
  77. <div style="text-align: center"><a href="?dcloud"><i class="icon-cloud"></i> 切换到云模式 </a></div>
  78. </div>
  79. </div>
  80. <br/>
  81. <div class="widget-header">
  82. <i class="icon-user"></i>
  83. <h3>基础配置</h3>
  84. </div> <!-- /widget-header -->
  85. <div class="widget-content">
  86. <h4>基础</h4><br>
  87. <div class="control-group" style="float: left;width: 28%;">
  88. <label class="control-label" >接口超时(秒)</label>
  89. <div class="controls">
  90. <input type="text" style="width:100%" id="Timeout" value="" >
  91. </div> <!-- /controls -->
  92. </div> <!-- /control-group -->
  93. <div class="control-group" style="float: left;width: 28%;margin-left: 20px;">
  94. <label class="control-label" for="Refresh">页面刷新(分钟)</label>
  95. <div class="controls">
  96. <input type="text" style="width:100%" id="Refresh" value="" >
  97. </div> <!-- /controls -->
  98. </div> <!-- /control-group -->
  99. <div class="control-group" style="width: 28%;float: left;margin-left: 20px;">
  100. <label class="control-label ttip" for="Archive" data-toggle='tooltip' title='此配置仅针对全国延迟与报警日志数据生效,Ping数据默认保存30天不可修改!' data-placement='bottom'>数据存档(天)</label>
  101. <div class="controls">
  102. <input type="text" style="width:100%" id="Archive" value="" >
  103. </div> <!-- /controls -->
  104. </div> <!-- /control-group -->
  105. <hr style="clear:both;">
  106. <h4>Ping拓扑</h4><br>
  107. <div class="control-group" style="float: left;width: 43%;">
  108. <label class="control-label" for="Tsound">报警声音</label>
  109. <div class="controls">
  110. <input type="text" style="width:97%" id="Tsound" value="">
  111. </div> <!-- /controls -->
  112. </div> <!-- /control-group -->
  113. <div class="control-group" style="width: 20%;float: left;margin-left: 20px;">
  114. <label class="control-label" for="Tline">连线粗细</label>
  115. <div class="controls">
  116. <input type="text" style="width:100%" id="Tline" value="">
  117. </div> <!-- /controls -->
  118. </div> <!-- /control-group -->
  119. <div class="control-group" style="width: 20%;float: left;margin-left: 20px;">
  120. <label class="control-label" for="Tsymbolsize">形状大小</label>
  121. <div class="controls">
  122. <input type="text" style="width:100%" id="Tsymbolsize" value="">
  123. </div> <!-- /controls -->
  124. </div> <!-- /control-group -->
  125. <hr style="clear:both;">
  126. <h4>报警邮件<button style="float: right" onclick="sendMailTest(this)">发送测试邮件</button></h4><br>
  127. <div class="control-group" >
  128. <label class="control-label" for="Tsymbolsize">邮件服务器</label>
  129. <div class="controls">
  130. <input type="text" style="width:97%" id="EmailHost" value="">
  131. </div> <!-- /controls -->
  132. </div> <!-- /control-group -->
  133. <div class="control-group" style="width: 46%;float: left;">
  134. <label class="control-label" for="Tsymbolsize">发件邮件</label>
  135. <div class="controls">
  136. <input type="text" style="width:100%" id="SendEmailAccount" value="">
  137. </div> <!-- /controls -->
  138. </div> <!-- /control-group -->
  139. <div class="control-group" style="width: 46%;float: left;margin-left: 20px;">
  140. <label class="control-label" for="Tsymbolsize">发件邮箱密码</label>
  141. <div class="controls">
  142. <input type="password" style="width:100%" id="SendEmailPassword" value="">
  143. </div> <!-- /controls -->
  144. </div> <!-- /control-group -->
  145. <div class="control-group" >
  146. <label class="control-label" for="Tsymbolsize">收件邮箱列表(分号隔开)</label>
  147. <div class="controls">
  148. <input type="text" style="width:97%" id="RevcEmailList" value="">
  149. </div> <!-- /controls -->
  150. </div> <!-- /control-group -->
  151. <hr style="clear:both;">
  152. <h4>检测工具</h4><br>
  153. <div class="control-group" style="float: left;width: 45%;">
  154. <label class="control-label" for="Toollimit">限定频率(秒)</label>
  155. <div class="controls">
  156. <input type="text" style="width:100%" id="Toollimit" value="">
  157. </div> <!-- /controls -->
  158. </div> <!-- /control-group -->
  159. <hr style="clear:both;">
  160. <h4>授权管理</h4><br>
  161. <div class="control-group" style="width: 96%;">
  162. <label class="control-label" for="Authiplist">用户IP列表(逗号隔开)</label>
  163. <div class="controls">
  164. <input type="text" style="width:100%" id="Authiplist" value="" >
  165. </div> <!-- /controls -->
  166. </div> <!-- /control-group -->
  167. <br/>
  168. </div>
  169. </div>
  170. <div class="span8">
  171. <!-- /widget -->
  172. <div class="widget widget-table action-table">
  173. <div class="widget-header"> <i class="icon-th-list"></i>
  174. <h3>Ping节点测试网络</h3>
  175. </div>
  176. <!-- /widget-header -->
  177. <div class="widget-content">
  178. <table class="table table-striped table-bordered">
  179. <thead>
  180. <tr>
  181. <th> 节点名称(本机) </th>
  182. <th> 节点IP(本机) </th>
  183. <th> SmartPing </th>
  184. <th style="width:60px;"> 正向Ping </th>
  185. <th style="width:60px;text-align: center">Ping拓扑</th>
  186. <!--<th style="width:60px;text-align: center">检测工具</th>-->
  187. <th style="width:15px;"> </th>
  188. </tr>
  189. </thead>
  190. <tbody class="selfagent"></tbody>
  191. <thead>
  192. <tr>
  193. <th> 节点名称 </th>
  194. <th> 节点IP </th>
  195. <th style="width:60px;"> SmartPing </th>
  196. <th style="width:60px;"> 正向Ping </th>
  197. <th style="width:60px;text-align: center">Ping拓扑</th>
  198. <!--<th style="width:60px;text-align: center">检测工具</th>-->
  199. <th style="width:15px;"> </th>
  200. </tr>
  201. </thead>
  202. <tbody class="agentlist"></tbody>
  203. <tfoot>
  204. <tr>
  205. <td colspan="8" style="text-align: center"><input style='margin:4px 3px 0 0;' type='button' class='btn btn-small' value='添加节点' data-toggle="modal" data-target="#agentModal"></td>
  206. </tr>
  207. </tfoot>
  208. </table>
  209. </div>
  210. <!-- /widget-content -->
  211. </div>
  212. <!-- editSelfAgentModal -->
  213. <div class="modal fade" id="editSelfagentModal" tabindex="-1" role="dialog" style="width:480px;">
  214. <div class="modal-dialog" role="document">
  215. <div class="modal-content">
  216. <div class="modal-header">
  217. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  218. <h4 class="modal-title">编辑本机节点</h4>
  219. </div>
  220. <div class="modal-body form-horizontal" >
  221. 节点名称:<input id="editAgentName" type="text" style="width: 150px;"> 节点IP: <input id="editAgentIp" type="text" style="width: 150px;">
  222. </div>
  223. <div class="modal-footer">
  224. <button type="button" class="btn btn-primary" onclick="editSelfagentModal(true)">暂存</button>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. <!-- NewAgentModal -->
  230. <div class="modal fade" id="agentModal" tabindex="-1" role="dialog" style="width:480px;">
  231. <div class="modal-dialog" role="document">
  232. <div class="modal-content">
  233. <div class="modal-header">
  234. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  235. <h4 class="modal-title">新增节点</h4>
  236. </div>
  237. <div class="modal-body form-horizontal" >
  238. 节点名称:<input id="newAgentName" type="text" style="width: 150px;"> 节点IP: <input id="newAgentIp" type="text" style="width: 150px;">
  239. </div>
  240. <div class="modal-footer">
  241. <button type="button" class="btn btn-primary" onclick="addAgent(null,null)">暂存</button>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. <!-- PingModal -->
  247. <div class="modal fade" id="pingModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="width:500px;">
  248. <div class="modal-dialog" role="document">
  249. <div class="modal-content">
  250. <div class="modal-header">
  251. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  252. <h4 class="modal-title">Ping配置</h4>
  253. </div>
  254. <div class="modal-body">
  255. <table class="table table-striped table-bordered">
  256. <thead>
  257. <tr>
  258. <th> 节点名称 </th>
  259. <th> 节点IP </th>
  260. <th style="text-align: center"> 正向Ping <input type='checkbox' class="allchecked"></th>
  261. </tr>
  262. </thead>
  263. <tbody class="pingModalist"></tbody>
  264. </table>
  265. </div>
  266. <div class="modal-footer">
  267. <button type="button" class="btn btn-primary" onclick="pingcfg(null,true)" >暂存</button>
  268. <input type='hidden' id='pingcfgAddr' value=''/>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. <!-- TopoModal -->
  274. <div class="modal fade" id="topoModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="width:800px;">
  275. <div class="modal-dialog" role="document">
  276. <div class="modal-content">
  277. <div class="modal-header">
  278. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  279. <h4 class="modal-title" id="myModalLabel">拓扑配置</h4>
  280. </div>
  281. <div class="modal-body">
  282. <table class="table table-striped table-bordered">
  283. <thead>
  284. <tr>
  285. <th> 节点名称 </th>
  286. <th> 节点IP </th>
  287. <th style="width:70px;"> 正向拓扑 <input type='checkbox' class="allchecked" style="margin-top: 2px" v="topoCheck" /></th>
  288. <th style="width:450px;"> 报警规则 </th>
  289. </tr>
  290. </thead>
  291. <tbody class="topoModallist"></tbody>
  292. </table>
  293. </div>
  294. <div class="modal-footer">
  295. <button type="button" class="btn btn-primary" onclick="topocfg(null,true)">暂存</button>
  296. <input type='hidden' id='topocfgAddr' value=''/>
  297. </div>
  298. </div>
  299. </div>
  300. </div>
  301. <!-- ToolsModal
  302. <div class="modal fade" id="toolModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="width:800px;">
  303. <div class="modal-dialog" role="document">
  304. <div class="modal-content">
  305. <div class="modal-header">
  306. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  307. <h4 class="modal-title">工具配置</h4>
  308. </div>
  309. <div class="modal-body">
  310. <table class="table table-striped table-bordered">
  311. <thead>
  312. <tr>
  313. <th> 节点名称 </th>
  314. <th> 节点IP </th>
  315. <th style="width:450px;"> 可用工具 </th>
  316. </tr>
  317. </thead>
  318. <tbody class="toolModallist" ></tbody>
  319. </table>
  320. </div>
  321. <div class="modal-footer">
  322. <button type="button" class="btn btn-primary" onclick="toolcfg(null,true)">暂存</button>
  323. <input type='hidden' id='toolscfgAddr' value=''/>
  324. </div>
  325. </div>
  326. </div>
  327. </div>
  328. -->
  329. <!-- /全国延迟测试网络 -->
  330. <div class="widget widget-table action-table">
  331. <div class="widget-header"> <i class="icon-th-list"></i>
  332. <h3>全国延迟测试网络</h3>
  333. </div>
  334. <!-- /widget-header -->
  335. <div class="widget-content chinamaplist" style="padding:10px;"></div>
  336. <!-- /widget -->
  337. </div>
  338. <!-- chinamapModal -->
  339. <div class="modal fade" id="addChinaMapModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="width:550px;">
  340. <div class="modal-dialog" role="document">
  341. <div class="modal-content">
  342. <div class="modal-header">
  343. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  344. <h4 class="modal-title" >新增全国延迟测试节点</h4>
  345. </div>
  346. <div class="modal-body ">
  347. <div style="text-align: center"><select class='provSelect' style='width:70px;'><option value='北京'>北京</option><option value='浙江'>浙江</option><option value='天津'>天津</option><option value='安徽'>安徽</option><option value='上海'>上海</option><option value='福建'>福建</option><option value='重庆'>重庆</option><option value='江西'>江西</option><option value='山东'>山东</option><option value='河南'>河南</option><option value='湖北'>湖北</option><option value='湖南'>湖南</option><option value='广东'>广东</option><option value='海南'>海南</option><option value='山西'>山西</option><option value='青海'>青海</option><option value='江苏'>江苏</option><option value='辽宁'>辽宁</option><option value='吉林'>吉林</option><option value='台湾'>台湾</option><option value='河北'>河北</option><option value='贵州'>贵州</option><option value='四川'>四川</option><option value='云南'>云南</option><option value='陕西'>陕西</option><option value='甘肃'>甘肃</option><option value='黑龙江'>黑龙江</option><option value='香港'>香港</option><option value='澳门'>澳门</option><option value='广西'>广西</option><option value='宁夏'>宁夏</option><option value='新疆'>新疆</option><option value='内蒙古'>内蒙古</option><option value='西藏'>西藏</option></select></div>
  348. <div style="float: left;width: 31%;padding:5px;">
  349. <table class="table table-striped table-bordered">
  350. <thead>
  351. <tr>
  352. <th> 电信 </th>
  353. </tr>
  354. </thead>
  355. <tbody class="add_chinamap_ctcc" ></tbody>
  356. </table>
  357. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('add_chinamap_ctcc')">
  358. </div>
  359. <div style="float: left;width: 31%;padding:5px;">
  360. <table class="table table-striped table-bordered">
  361. <thead>
  362. <tr>
  363. <th> 联通 </th>
  364. </tr>
  365. </thead>
  366. <tbody class="add_chinamap_cucc" ></tbody>
  367. </table>
  368. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('add_chinamap_cucc')">
  369. </div>
  370. <div style="float: left;width: 31%;padding:5px;">
  371. <table class="table table-striped table-bordered">
  372. <thead>
  373. <tr>
  374. <th> 移动 </th>
  375. </tr>
  376. </thead>
  377. <tbody class="add_chinamap_cmcc" ></tbody>
  378. </table>
  379. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('add_chinamap_cmcc')">
  380. </div>
  381. </div>
  382. </div>
  383. <div class="modal-footer">
  384. <button type="button" class="btn btn-primary" onclick="addChinaMap(true)">暂存</button>
  385. </div>
  386. </div>
  387. </div>
  388. <!-- chinamapModal -->
  389. <div class="modal fade" id="chinaMapModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="width:550px;">
  390. <div class="modal-dialog" role="document">
  391. <div class="modal-content">
  392. <div class="modal-header">
  393. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  394. <h4 class="modal-title editChinaMapProv" ></h4>
  395. </div>
  396. <div class="modal-body ">
  397. <div style="float: left;width: 31%;padding:5px;">
  398. <table class="table table-striped table-bordered form-horizontal">
  399. <thead>
  400. <tr>
  401. <th> 电信 </th>
  402. </tr>
  403. </thead>
  404. <tbody class="chinamap_ctcc" ></tbody>
  405. </table>
  406. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('chinamap_ctcc')">
  407. </div>
  408. <div style="float: left;width: 31%;padding:5px;">
  409. <table class="table table-striped table-bordered form-horizontal">
  410. <thead>
  411. <tr>
  412. <th> 联通 </th>
  413. </tr>
  414. </thead>
  415. <tbody class="chinamap_cucc" ></tbody>
  416. </table>
  417. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('chinamap_cucc')">
  418. </div>
  419. <div style="float: left;width: 31%;padding:5px;">
  420. <table class="table table-striped table-bordered form-horizontal">
  421. <thead>
  422. <tr>
  423. <th> 移动 </th>
  424. </tr>
  425. </thead>
  426. <tbody class="chinamap_cmcc" ></tbody>
  427. </table>
  428. <input type="button" style="width: 100%;margin-top: -10px;" value=" + " onclick="addChinaMapCell('chinamap_cmcc')">
  429. </div>
  430. </div>
  431. </div>
  432. <div class="modal-footer">
  433. <button type="button" class="btn btn-danger pull-left" onclick="delChinaMap()">删除</button>
  434. <button type="button" class="btn btn-primary" onclick="editChinaMap(null,true)">暂存</button>
  435. </div>
  436. </div>
  437. </div>
  438. </div>
  439. </div>
  440. <hr>
  441. </div>
  442. <!-- /container -->
  443. </div>
  444. <!-- /main-inner -->
  445. </div>
  446. <!-- /main -->
  447. <div class="main cloudmode" style="margin-top:-20px;">
  448. <div class="main-inner">
  449. <div class="container">
  450. <div class="row">
  451. <div class="span3"> &nbsp;</div>
  452. <div class="span6">
  453. <div class="widget-content">
  454. <div id="LastSuccTimeStr" style="text-align: center"></div>
  455. <div class="control-group">
  456. <label class="control-label">云配置地址</label>
  457. <div class="controls">
  458. <div class="input-append">
  459. <input style="width:98%" class="m-wrap" id="Endpoint" value="http://" type="text">
  460. </div>
  461. </div> <!-- /controls -->
  462. </div> <!-- /control-group -->
  463. <div class="row">
  464. <div class="span2" style="width: 44.4%;">
  465. <div class="control-group">
  466. <label class="control-label">节点名称(本机)</label>
  467. <div class="controls">
  468. <input class="cpassword" type="text" style="width:97%" id="CloudSelfName" value="">
  469. </div> <!-- /controls -->
  470. </div> <!-- /control-group -->
  471. </div>
  472. <div class="span2" style="width: 44.4%;">
  473. <div class="control-group">
  474. <label class="control-label">节点IP(本机)</label>
  475. <div class="controls">
  476. <input class="cpassword" type="text" style="width:97%" id="CloudSelfAddr" value="">
  477. </div> <!-- /controls -->
  478. </div> <!-- /control-group -->
  479. </div>
  480. </div>
  481. <div class="control-group">
  482. <label class="control-label">密码</label>
  483. <div class="controls">
  484. <input class="cpassword" type="password" style="width:97%" id="CloudPass" value="">
  485. </div> <!-- /controls -->
  486. </div> <!-- /control-group -->
  487. <button style="width:100%" type="submit" class="btn btn-primary" onclick="savecloudconf()">检测并保存</button>
  488. <div style="text-align: center;margin-top: 10px;"><a href="?local"><i class="icon-home"></i> 切换到本地模式 </a></div>
  489. </div>
  490. </div>
  491. <div class="span3">&nbsp;</div>
  492. </div>
  493. </div>
  494. </div>
  495. </div>
  496. <div class="footer">
  497. <div class="footer-inner">
  498. <div class="container">
  499. <div class="row">
  500. <div class="span12"> &copy; 2017 - 2020 <a target="_blank" href="http://smartping.org" >SmartPing.org</a> <span style="float:right" id="verion"></span></div>
  501. <!-- /span12 -->
  502. </div>
  503. <!-- /row -->
  504. </div>
  505. <!-- /container -->
  506. </div>
  507. <!-- /footer-inner -->
  508. </div>
  509. <!-- /footer -->
  510. <!-- Le javascript
  511. ================================================== -->
  512. <!-- Placed at the end of the document so the pages load faster -->
  513. <script src="assets/js/jquery-1.7.2.min.js"></script>
  514. <script src="assets/js/jquery.cookie.js"></script>
  515. <script src="assets/js/bootstrap.js"></script>
  516. <script src="assets/js/funcs.js"></script>
  517. <script>
  518. var tp = window.location.search;
  519. //console.log(tp)
  520. if(tp=="?cloud" || tp=="?dcloud" ){
  521. $(".localmode").hide();
  522. $(".cloudmode").show();
  523. }
  524. if(tp=="?local"){
  525. $(".localmode").show();
  526. $(".cloudmode").hide();
  527. }
  528. //Ping节点测试网络 - 编辑本机节点
  529. function editSelfagentModal(Save){
  530. if(Save){
  531. editAgentName = $("#editAgentName").val();
  532. editAgentAddr = $("#editAgentIp").val();
  533. config=$.parseJSON(sessionStorage.getItem("config"))
  534. config["Name"]=editAgentName
  535. config["Addr"]=editAgentAddr
  536. sessionStorage.setItem("config",JSON.stringify(config))
  537. delAgent(null,$(".selfAgentAddr").html())
  538. $(".selfAgentName").html(editAgentName)
  539. $(".selfAgentAddr").html(editAgentAddr)
  540. addAgent(editAgentName,editAgentAddr)
  541. config["Network"][editAgentAddr]["Smartping"]=true
  542. sessionStorage.setItem("config",JSON.stringify(config))
  543. $('#editSelfagentModal').modal("hide");
  544. return
  545. }
  546. config=$.parseJSON(sessionStorage.getItem("config"))
  547. $("#editAgentName").val(config["Name"]);
  548. $("#editAgentIp").val(config["Addr"]);
  549. $('#editSelfagentModal').modal();
  550. }
  551. //Ping节点测试网络 - 新增节点
  552. function addAgent(Name,Ip){
  553. if(Name==null && Ip==null){
  554. newAgentName = $("#newAgentName").val();
  555. newAgentIp = $("#newAgentIp").val();
  556. }else{
  557. newAgentName = Name
  558. newAgentIp = Ip
  559. }
  560. config=$.parseJSON(sessionStorage.getItem("config"))
  561. //检测节点IP或Name是否重复
  562. CheckFlag=""
  563. $.each(config["Network"],function(Addr,network){
  564. if(Addr==newAgentIp || network["Addr"]==newAgentIp){
  565. CheckFlag = "节点IP不能重复!"
  566. return false
  567. }
  568. if( network["Name"]==newAgentName){
  569. CheckFlag = "节点名称不能重复!"
  570. return false
  571. }
  572. })
  573. if(CheckFlag!=""){
  574. alert(CheckFlag)
  575. return
  576. }
  577. //添加新节点
  578. if(Name==null && Ip==null){
  579. $(".agentlist").append("<tr class='agentlist-"+newAgentIp+"'>" +
  580. "<td>"+newAgentName+"</td><td class='Addr'>"+newAgentIp+"</td>" +
  581. "<td style='text-align:center'><input type='checkbox' onclick='checkSP(this)'></td>" +
  582. "<td style='text-align:center'><a class='btn btn-mini' onclick='pingcfg(this,null)' disabled='disabled'>配置</a></td>" +
  583. "<td style='text-align:center'><a class='btn btn-mini' onclick='topocfg(this,false)' disabled='disabled'>配置</a></td>" +
  584. //"<td style='text-align:center'><a class='btn btn-mini' onclick='toolcfg(this,null)' disabled='disabled'>配置</a></td>" +
  585. "<td><i onclick='delAgent(this,null);' class='icon-large icon-trash'></i></td>" +
  586. "</tr>")
  587. }
  588. agent=new Object()
  589. agent["Name"] = newAgentName
  590. agent["Addr"]=newAgentIp
  591. agent["Ping"]=new Array()
  592. //agent["Tools"]=new Object()
  593. //agent["Tools"]["Icmpping"]=new Array()
  594. agent["Topology"]=new Array()
  595. /*
  596. $.each(config["Network"], function(Addr, agentconfig){
  597. agent["Ping"].push(Addr)
  598. agent["Tools"]["Icmpping"].push(Addr)
  599. topoMap = new Map()
  600. topoMap["Name"]=agentconfig["Name"]
  601. topoMap["Addr"]=agentconfig["Addr"]
  602. topoMap["Thdchecksec"]="0"
  603. topoMap["Thdoccnum"]="0"
  604. topoMap["Thdavgdelay"]="0"
  605. topoMap["Thdloss"]="0"
  606. agent["Topology"].push(topoMap)
  607. })
  608. */
  609. config["Network"][newAgentIp]=agent
  610. //每个已有节点下加入新节点
  611. /*
  612. $.each(config["Network"], function(Addr, obj){
  613. config["Network"][Addr]["Ping"].push(newAgentIp);
  614. config["Network"][Addr]["Tools"]["Icmpping"].push(newAgentIp);
  615. NewtopoMap = new Map()
  616. NewtopoMap["Name"]=newAgentName
  617. NewtopoMap["Addr"]=newAgentIp
  618. NewtopoMap["Thdchecksec"]="0"
  619. NewtopoMap["Thdoccnum"]="0"
  620. NewtopoMap["Thdavgdelay"]="0"
  621. NewtopoMap["Thdloss"]="0"
  622. config["Network"][Addr]["Topology"].push(NewtopoMap)
  623. })
  624. */
  625. config["Network"][config["Addr"]]["Ping"].push(newAgentIp);
  626. //config["Network"][config["Addr"]]["Tools"]["Icmpping"].push(newAgentIp);
  627. NewtopoMap = new Map()
  628. NewtopoMap["Name"]=newAgentName
  629. NewtopoMap["Addr"]=newAgentIp
  630. NewtopoMap["Thdchecksec"]="900"
  631. NewtopoMap["Thdoccnum"]="3"
  632. NewtopoMap["Thdavgdelay"]="200"
  633. NewtopoMap["Thdloss"]="30"
  634. config["Network"][config["Addr"]]["Topology"].push(NewtopoMap)
  635. sessionStorage.setItem("config",JSON.stringify(config))
  636. $("#newAgentName").val("")
  637. $("#newAgentIp").val("")
  638. $('#agentModal').modal('hide');
  639. }
  640. //Ping节点测试网络 - 删除节点
  641. function delAgent(obj,SelfAddr){
  642. if(SelfAddr!=null){
  643. Addr=SelfAddr
  644. }else{
  645. Addr=$(obj).parent().parent().find(".Addr").html()
  646. }
  647. config=$.parseJSON(sessionStorage.getItem("config"))
  648. delete config["Network"][Addr];
  649. $.each(config["Network"], function(iAddr, agentconfig){
  650. $.each(agentconfig["Ping"], function(pingIndex, pingAddr){
  651. if(pingAddr==Addr){
  652. config["Network"][iAddr]["Ping"].splice(pingIndex,1)
  653. return false
  654. }
  655. })
  656. /*
  657. $.each(agentconfig["Tools"]["Icmpping"], function(toolIcmpIndex, toolIcmpAddr){
  658. if(toolIcmpAddr==Addr){
  659. config["Network"][iAddr]["Tools"]["Icmpping"].splice(toolIcmpIndex,1)
  660. return false
  661. }
  662. })
  663. */
  664. $.each(agentconfig["Topology"], function(topoIndex, topoObj){
  665. if(topoObj["Addr"]==Addr){
  666. config["Network"][iAddr]["Topology"].splice(topoIndex,1)
  667. return false
  668. }
  669. })
  670. })
  671. sessionStorage.setItem("config",JSON.stringify(config))
  672. $(obj).parent().parent().remove();
  673. }
  674. //Ping节点测试网络 - 正向PING配置弹窗
  675. function pingcfg(obj,Save){
  676. if($(obj).attr("disabled") == "disabled"){
  677. return
  678. }
  679. $(".allchecked").removeAttr("checked")
  680. config=$.parseJSON(sessionStorage.getItem("config"))
  681. if(Save==true){
  682. nAddr=$("#pingcfgAddr").val()
  683. NewPingList = new Array()
  684. $('.pingModalist tr').each(function(i){
  685. if($(this).children('td').children('input').is(":checked")){
  686. NewPingList.push($(this).find(".pingModalistAddr").html())
  687. }
  688. });
  689. config["Network"][nAddr]["Ping"]=NewPingList;
  690. sessionStorage.setItem("config",JSON.stringify(config))
  691. $('#pingModal').modal("hide")
  692. return
  693. }
  694. Addr=$(obj).parent().parent().find(".Addr").html()
  695. selfconfig=config["Network"][Addr];
  696. $(".pingModalist").html("")
  697. $.each(config["Network"], function(iAddr, agentconfig){
  698. checked=""
  699. $.each(selfconfig["Ping"], function(i, ip){
  700. if(agentconfig["Addr"]==ip){
  701. checked="checked"
  702. return false
  703. }
  704. })
  705. $(".pingModalist").append("<tr>" +
  706. "<td>"+agentconfig["Name"]+"</td>" +
  707. "<td class='pingModalistAddr'>"+agentconfig["Addr"]+"</td>" +
  708. "<td class='form-horizontal' style='text-align: center'><input type='checkbox' style='margin-top: -3px' "+checked+"></td>" +
  709. "</tr>")
  710. })
  711. $("#pingcfgAddr").val(Addr)
  712. $('#pingModal').modal()
  713. }
  714. //Ping节点测试网络 - 拓扑配置弹窗
  715. function topocfg(obj,Save){
  716. if($(obj).attr("disabled") == "disabled"){
  717. return
  718. }
  719. $(".allchecked").removeAttr("checked")
  720. config=$.parseJSON(sessionStorage.getItem("config"))
  721. if(Save==true){
  722. mnAddr=$("#topocfgAddr").val()
  723. NewTopoList = new Array()
  724. $('.topoModallist tr').each(function(i){
  725. //console.log($(this).find(".topoModalListChecked").is(":checked"))
  726. if($(this).find(".topoModalListChecked").is(":checked")){
  727. topoModal = new Map()
  728. topoModal["Name"] = $(this).find(".topoModalListName").html()
  729. topoModal["Addr"] = $(this).find(".topoModalListAddr").html()
  730. topoModal["Thdchecksec"] = $(this).find(".topoModalListThdchecksec").val()
  731. topoModal["Thdoccnum"] = $(this).find(".topoModalListThdoccnum").val()
  732. topoModal["Thdavgdelay"] = $(this).find(".topoModalListThdavgdelay").val()
  733. topoModal["Thdloss"] = $(this).find(".topoModalListThdloss").val()
  734. NewTopoList.push(topoModal)
  735. }
  736. })
  737. config["Network"][mnAddr]["Topology"]=NewTopoList;
  738. sessionStorage.setItem("config",JSON.stringify(config))
  739. $('#topoModal').modal("hide")
  740. return
  741. }
  742. mAddr=$(obj).parent().parent().find(".Addr").html()
  743. $(".topoModallist").html("")
  744. $.each(config["Network"], function(Addr, agentconfig){
  745. var itopocfg= new Map()
  746. itopocfg["Thdchecksec"] = 0
  747. itopocfg["Thdoccnum"] = 0
  748. itopocfg["Thdavgdelay"] = 0
  749. itopocfg["Thdloss"] = 0
  750. checked=""
  751. disabled="disabled"
  752. if(config["Network"].hasOwnProperty(mAddr)){
  753. nodeConfig=config["Network"][mAddr]
  754. $.each(nodeConfig["Topology"], function(i, cf){
  755. if(cf["Addr"]==Addr){
  756. itopocfg = cf
  757. checked="checked"
  758. disabled=""
  759. return false
  760. }
  761. });
  762. }
  763. $(".topoModallist").append("<tr>" +
  764. "<td class='topoModalListName'>"+agentconfig["Name"]+"</td>" +
  765. "<td class='topoModalListAddr'>"+agentconfig["Addr"]+"</td>" +
  766. "<td style='text-align:center'><input class='topoModalListChecked' type='checkbox' "+checked+" onclick='enabledTopo(this)' ></td>" +
  767. "<td class='form-horizontal'>" +
  768. "<div class='controls' style='margin-left:0px;'>" +
  769. "<div class='input-prepend input-append'>" +
  770. "<input class='topoModalListThdchecksec' type='text' style='width:25px' value='"+itopocfg["Thdchecksec"]+"' "+disabled+" >" +
  771. "<span class='add-on'>秒</span>" +
  772. "</div>" +
  773. "内出现" +
  774. "<div class='input-prepend input-append'>" +
  775. "<input class='topoModalListThdoccnum' type='text' style='width:20px' value='"+itopocfg["Thdoccnum"]+"' "+disabled+" >" +
  776. "<span class='add-on'>次</span>" +
  777. "</div>" +
  778. "内延迟大于" +
  779. "<div class='input-prepend input-append'>" +
  780. "<input class='topoModalListThdavgdelay' type='text' value='"+itopocfg["Thdavgdelay"]+"' style='width:25px' "+disabled+" >" +
  781. "<span class='add-on'>ms</span>" +
  782. "</div>" +
  783. "或丢包率大于" +
  784. "<div class='input-prepend input-append'>" +
  785. "<input class='topoModalListThdloss' type='text' value='"+itopocfg["Thdloss"]+"' style='width:20px' "+disabled+" >" +
  786. "<span class='add-on'>%</span>" +
  787. "</div>" +
  788. "</div>" +
  789. "</td>" +
  790. "</tr>")
  791. })
  792. $("#topocfgAddr").val(mAddr)
  793. $('#topoModal').modal()
  794. }
  795. function enabledTopo(obj){
  796. if($(obj).is(":checked")){
  797. $(obj).closest("tr").find(".topoModalListThdchecksec").removeAttr("disabled")
  798. $(obj).closest("tr").find(".topoModalListThdchecksec").val("900")
  799. $(obj).closest("tr").find(".topoModalListThdoccnum").removeAttr("disabled")
  800. $(obj).closest("tr").find(".topoModalListThdoccnum").val("3")
  801. $(obj).closest("tr").find(".topoModalListThdavgdelay").removeAttr("disabled")
  802. $(obj).closest("tr").find(".topoModalListThdavgdelay").val("200")
  803. $(obj).closest("tr").find(".topoModalListThdloss").removeAttr("disabled")
  804. $(obj).closest("tr").find(".topoModalListThdloss").val("30")
  805. }else{
  806. $(obj).closest("tr").find(".topoModalListThdchecksec").attr("disabled","true")
  807. $(obj).closest("tr").find(".topoModalListThdchecksec").val("0")
  808. $(obj).closest("tr").find(".topoModalListThdoccnum").attr("disabled","true")
  809. $(obj).closest("tr").find(".topoModalListThdoccnum").val("0")
  810. $(obj).closest("tr").find(".topoModalListThdavgdelay").attr("disabled","true")
  811. $(obj).closest("tr").find(".topoModalListThdavgdelay").val("0")
  812. $(obj).closest("tr").find(".topoModalListThdloss").attr("disabled","true")
  813. $(obj).closest("tr").find(".topoModalListThdloss").val("0")
  814. }
  815. }
  816. /*/Ping节点测试网络 - 检测工具配置
  817. function toolcfg(obj,Save){
  818. if($(obj).attr("disabled") == "disabled"){
  819. return
  820. }
  821. config=$.parseJSON(sessionStorage.getItem("config"))
  822. if(Save){
  823. nAddr=$("#toolscfgAddr").val()
  824. NewToolsIcmpList = new Array()
  825. $('.toolModallist tr').each(function(i){
  826. if($(this).children('td').children('input').is(":checked")){
  827. NewToolsIcmpList.push($(this).find(".toolModalistAddr").html())
  828. }
  829. });
  830. config["Network"][nAddr]["Tools"]["Icmpping"]=NewToolsIcmpList;
  831. sessionStorage.setItem("config",JSON.stringify(config))
  832. $('#toolModal').modal("hide")
  833. return
  834. }
  835. $(".toolModallist").html("")
  836. Addr=$(obj).parent().parent().find(".Addr").html()
  837. selfconfig=config["Network"][Addr]
  838. $.each(config["Network"], function(iAddr, agentconfig){
  839. checked=""
  840. $.each(selfconfig["Tools"]["Icmpping"], function(i, ip){
  841. if(agentconfig["Addr"]==ip){
  842. checked="checked"
  843. return false
  844. }
  845. })
  846. $(".toolModallist").append("<tr>" +
  847. "<td>"+agentconfig["Name"]+"</td>" +
  848. "<td class='toolModalistAddr'>"+agentconfig["Addr"]+"</td>" +
  849. "<td class='form-horizontal' style='text-align: left'><input type='checkbox' style='margin-top: -3px' "+checked+">ICMP PING</td>" +
  850. "</tr>")
  851. })
  852. $('#toolscfgAddr').val(Addr)
  853. $('#toolModal').modal()
  854. }
  855. */
  856. //发送邮件测试
  857. function sendMailTest(obj){
  858. $(obj).html("测试邮件发送中(最长1分钟,请等待)...")
  859. data = {}
  860. data["EmailHost"] = $("#EmailHost").val();
  861. data["SendEmailAccount"] = $("#SendEmailAccount").val();
  862. data["SendEmailPassword"] = $("#SendEmailPassword").val();
  863. data["RevcEmailList"] = $("#RevcEmailList").val();
  864. $.ajax({
  865. dataType: "json",
  866. type: 'POST',
  867. url: "/api/sendmailtest.json",
  868. data: data,
  869. success: function( retdata ) {
  870. if (retdata["status"]=="true"){
  871. alert("测试邮件发送成功!")
  872. }else{
  873. alert("测试邮件发送失败 ("+retdata["info"]+")")
  874. }
  875. $(obj).html("发送测试邮件")
  876. },
  877. timeout: 65*1000
  878. }).fail( function( xhr, status ) {
  879. alert("测试邮件发送失败 (API错误!)")
  880. $(obj).html("发送测试邮件")
  881. });
  882. }
  883. //全国延迟测试网络-新增节点
  884. function addChinaMap(Save){
  885. if(Save){
  886. nprov=$('.provSelect').attr('value')
  887. cmap=new Map()
  888. cucc=new Array()
  889. $(".add_chinamap_cucc").children('tr').children('td').children('.val').each(function(i,ip){
  890. cucc.push($(ip).val())
  891. })
  892. cmap["cucc"]=cucc
  893. ctcc=new Array()
  894. $(".add_chinamap_ctcc").children('tr').children('td').children('.val').each(function(i,ip){
  895. ctcc.push($(ip).val())
  896. })
  897. cmap["ctcc"]=ctcc
  898. cmcc=new Array()
  899. $(".add_chinamap_cmcc").children('tr').children('td').children('.val').each(function(i,ip){
  900. cmcc.push($(ip).val())
  901. })
  902. cmap["cmcc"]=cmcc
  903. config["Chinamap"][nprov]=cmap
  904. $('#addChinaMapModal').modal("hide")
  905. sessionStorage.setItem("config",JSON.stringify(config))
  906. refreshChinaMap()
  907. return
  908. }
  909. $.each(config["Chinamap"], function(prov, detail){
  910. $(".provSelect option[value='"+prov+"']").remove();
  911. })
  912. $(".add_chinamap_cucc").find("tr").remove()
  913. $(".add_chinamap_ctcc").find("tr").remove()
  914. $(".add_chinamap_cmcc").find("tr").remove()
  915. $('#addChinaMapModal').modal()
  916. }
  917. //全国延迟测试网络-删除节点
  918. function delChinaMap(){
  919. config=$.parseJSON(sessionStorage.getItem("config"))
  920. nprov=$(".editChinaMapProv").html()
  921. delete config["Chinamap"][nprov]
  922. $('#chinaMapModal').modal("hide")
  923. sessionStorage.setItem("config",JSON.stringify(config))
  924. refreshChinaMap()
  925. return
  926. }
  927. //全国延迟测试网络-编辑节点
  928. function editChinaMap(prov,Save){
  929. config=$.parseJSON(sessionStorage.getItem("config"))
  930. if(Save){
  931. nprov=$(".editChinaMapProv").html()
  932. cmap=new Map()
  933. cucc=new Array()
  934. $(".chinamap_cucc").children('tr').children('td').children('.val').each(function(i,ip){
  935. cucc.push($(ip).val())
  936. })
  937. cmap["cucc"]=cucc
  938. ctcc=new Array()
  939. $(".chinamap_ctcc").children('tr').children('td').children('.val').each(function(i,ip){
  940. ctcc.push($(ip).val())
  941. })
  942. cmap["ctcc"]=ctcc
  943. cmcc=new Array()
  944. $(".chinamap_cmcc").children('tr').children('td').children('.val').each(function(i,ip){
  945. cmcc.push($(ip).val())
  946. })
  947. cmap["cmcc"]=cmcc
  948. config["Chinamap"][nprov]=cmap
  949. $('#chinaMapModal').modal("hide")
  950. sessionStorage.setItem("config",JSON.stringify(config))
  951. refreshChinaMap()
  952. return
  953. }
  954. $(".editChinaMapProv").html(prov)
  955. $(".chinamap_cmcc").html("")
  956. $(".chinamap_ctcc").html("")
  957. $(".chinamap_cucc").html("")
  958. detail = config["Chinamap"][prov]
  959. $.each(detail["cmcc"],function(i,cmcc){
  960. $(".chinamap_cmcc").append("<tr><td><input class='val' type='text' style='width: 108px' value='"+cmcc+"'> <input onclick='deletedMapingTr(this);' style='margin-top: -1px;' type='button' value=' - '></td></tr>")
  961. })
  962. $.each(detail["ctcc"],function(i,ctcc){
  963. $(".chinamap_ctcc").append("<tr><td><input class='val' type='text' style='width: 108px' value='"+ctcc+"'> <input onclick='deletedMapingTr(this);' style='margin-top: -1px;' type='button' value=' - '></td></tr>")
  964. })
  965. $.each(detail["cucc"],function(i,cucc){
  966. $(".chinamap_cucc").append("<tr><td><input class='val' type='text' style='width: 108px' value='"+cucc+"'> <input onclick='deletedMapingTr(this);' style='margin-top: -1px;' type='button' value=' - '></td></tr>")
  967. })
  968. $('#chinaMapModal').modal()
  969. }
  970. //全国延迟测试网络-刷新面板
  971. function refreshChinaMap(){
  972. config=$.parseJSON(sessionStorage.getItem("config"))
  973. $(".chinamaplist").html("")
  974. $.each(config["Chinamap"], function(prov, detail){
  975. cmcc=detail["cmcc"].length
  976. ctcc=detail["ctcc"].length
  977. cucc=detail["cucc"].length
  978. text=prov+"(电信"+ctcc+",联通"+cucc+",移动"+cmcc+")"
  979. $(".chinamaplist").append("<input type='button' value='"+text+"' onclick='editChinaMap(\""+prov+"\")' style='margin-right: 10px;width:177px;'>")
  980. })
  981. $(".chinamaplist").append("<input type='button' value=' + ' style='width: 50px;' onclick='addChinaMap(false)'> ")
  982. }
  983. //全国延迟测试网络-添加IP条目
  984. function addChinaMapCell(cell){
  985. $("."+cell).append("<tr><td><input class='val' type='text' style='width: 108px' value=''> <input onclick='deletedMapingTr(this);' style='margin-top: -1px;' type='button' value=' - '></td></tr>")
  986. }
  987. //全国延迟测试网络-删除IP条目
  988. function deletedMapingTr(nowTr){
  989. $(nowTr).parent().parent().remove();
  990. }
  991. //保存配置
  992. function saveconf(){
  993. config=$.parseJSON(sessionStorage.getItem("config"))
  994. //config = {}
  995. config["Name"] = $("#selfAgentName").html();
  996. config["Addr"] = $("#selfAgentAddr").html();
  997. config["Mode"]["Type"]="local"
  998. config["Mode"]["Endpoint"]=""
  999. config["Mode"]["LastSuccTime"]=""
  1000. config["Base"]["Timeout"]= parseInt($("#Timeout").val());
  1001. config["Base"]["Archive"]= parseInt($("#Archive").val());
  1002. config["Base"]["Refresh"]= parseInt($("#Refresh").val());
  1003. config["Topology"]["Tsound"] = $("#Tsound").val();
  1004. config["Topology"]["Tline"] = $("#Tline").val();
  1005. config["Topology"]["Tsymbolsize"] = $("#Tsymbolsize").val();
  1006. config["Alert"]["EmailHost"] = $("#EmailHost").val();
  1007. config["Alert"]["SendEmailAccount"] = $("#SendEmailAccount").val();
  1008. config["Alert"]["SendEmailPassword"] = $("#SendEmailPassword").val();
  1009. config["Alert"]["RevcEmailList"] = $("#RevcEmailList").val();
  1010. config["Authiplist"] = $("#Authiplist").val();
  1011. config["Toollimit"] = parseInt($("#Toollimit").val());
  1012. data = {}
  1013. data['config'] = JSON.stringify(config)
  1014. data['password'] = $(".password").val()
  1015. $.ajax({
  1016. dataType: "json",
  1017. type: 'POST',
  1018. url: "/api/saveconfig.json",
  1019. data: data,
  1020. success: function( retdata ) {
  1021. if (retdata["status"]=="true"){
  1022. alert("系统配置保存成功!")
  1023. window.location.reload();
  1024. }else{
  1025. alert("系统配置保存失败 ("+retdata["info"]+")")
  1026. }
  1027. },
  1028. timeout: 10*1000
  1029. }).fail( function( xhr, status ) {
  1030. alert("系统配置保存失败 (API错误!)")
  1031. });
  1032. }
  1033. //云模式保存配置
  1034. function savecloudconf(){
  1035. //config = {}
  1036. endpoint = $("#Endpoint").val();
  1037. $.getJSON("/api/proxy.json?g="+endpoint+"",function(config){
  1038. config["Mode"]["Endpoint"] = $("#Endpoint").val();
  1039. config["Mode"]["Type"] = "cloud";
  1040. //config["Mode"]["Status"] = "true";
  1041. config["Addr"] = $("#CloudSelfAddr").val();
  1042. config["Name"] = $("#CloudSelfName").val();
  1043. selfFlag = false
  1044. if(!config.hasOwnProperty("Network")){
  1045. alert("远程配置文件解析错误!")
  1046. return false
  1047. }
  1048. $.each(config["Network"], function(Addr, agentconfig){
  1049. //console.log("1 "+config["Addr"]+config["Name"])
  1050. //console.log("2 "+agentconfig["Addr"]+agentconfig["Name"]+Addr)
  1051. if(agentconfig["Addr"]==config["Addr"] && agentconfig["Name"]==config["Name"]&& Addr==config["Addr"] ){
  1052. selfFlag=true
  1053. return false
  1054. }
  1055. })
  1056. if(!selfFlag){
  1057. alert("配置文件错误,本机节点与Ping节点测试网络信息不匹配!");
  1058. return
  1059. }
  1060. data = {}
  1061. data['config'] = JSON.stringify(config)
  1062. data['password'] = $("#CloudPass").val()
  1063. $.ajax({
  1064. dataType: "json",
  1065. type: 'POST',
  1066. url: "/api/saveconfig.json",
  1067. data: data,
  1068. success: function( retdata ) {
  1069. if (retdata["status"]=="true"){
  1070. alert("系统配置保存成功!")
  1071. window.location.reload();
  1072. }else{
  1073. alert("系统配置保存失败 ("+retdata["info"]+")")
  1074. }
  1075. },
  1076. timeout: 10*1000
  1077. }).fail( function( xhr, status ) {
  1078. alert("系统配置保存失败 (API错误!)")
  1079. });
  1080. }).fail(function (xhr, status) {
  1081. //alert("123")
  1082. alert(xhr.responseText);
  1083. });
  1084. }
  1085. //选择是否为SmartPing
  1086. function checkSP(obj){
  1087. Addr=$(obj).parent().parent().find(".Addr").html()
  1088. config=$.parseJSON(sessionStorage.getItem("config"))
  1089. if($(obj).is(":checked")){
  1090. $(obj).parent().parent().find("a").each(function(i,elm) {
  1091. $(elm).removeAttr("disabled")
  1092. config["Network"][Addr]["Smartping"]=true
  1093. })
  1094. }else{
  1095. $(obj).parent().parent().find("a").each(function(i,elm){
  1096. $(elm).attr("disabled","true")
  1097. config["Network"][Addr]["Smartping"]=false
  1098. config["Network"][Addr]["Ping"]=new Array()
  1099. config["Network"][Addr]["Tools"]=new Object()
  1100. config["Network"][Addr]["Tools"]["Icmpping"]=new Array()
  1101. config["Network"][Addr]["Topology"]=new Array()
  1102. })
  1103. }
  1104. sessionStorage.setItem("config",JSON.stringify(config))
  1105. }
  1106. $(function(){
  1107. $(".ttip").tooltip();
  1108. var config = new Object()
  1109. $.getJSON("/api/config.json",function(result){
  1110. AgentMode(result["Mode"])
  1111. if(result["Mode"]["Type"]=="cloud"){
  1112. $("#LastSuccTimeStr").html("<span class='alert-success' style='padding:10px;'>最近一次成功同步时间:"+result["Mode"]["LastSuccTime"]+"</span><br/>")
  1113. }else{
  1114. if( tp!="?dcloud" ) {
  1115. $(".localmode").show();
  1116. $(".cloudmode").remove();
  1117. }
  1118. }
  1119. $("#agentname").html(" ("+result["Name"]+")")
  1120. sessionStorage.setItem("config",JSON.stringify(result))
  1121. config=result
  1122. $("#verion").html("Version: "+config["Ver"])
  1123. $("#Timeout").val(config["Base"]["Timeout"]);
  1124. $("#Refresh").val(config["Base"]["Refresh"]);
  1125. $("#Archive").val(config["Base"]["Archive"]);
  1126. $("#Tsound").val(config["Topology"]["Tsound"]);
  1127. $("#Tline").val(config["Topology"]["Tline"]);
  1128. $("#Tsymbolsize").val(config["Topology"]["Tsymbolsize"]);
  1129. $("#EmailHost").val(config["Alert"]["EmailHost"]);
  1130. $("#SendEmailAccount").val(config["Alert"]["SendEmailAccount"]);
  1131. $("#SendEmailPassword").val(config["Alert"]["SendEmailPassword"]);
  1132. $("#RevcEmailList").val(config["Alert"]["RevcEmailList"]);
  1133. $("#Authiplist").val(config["Authiplist"]);
  1134. $("#Toollimit").val(config["Toollimit"]);
  1135. selfconfig=config["Network"][config["Addr"]]
  1136. $("#CloudSelfName").val(selfconfig["Name"])
  1137. $("#CloudSelfAddr").val(selfconfig["Addr"])
  1138. if(config["Mode"]["Endpoint"]!=""){
  1139. $("#Endpoint").val(config["Mode"]["Endpoint"]);
  1140. }
  1141. $(".selfagent").html("<tr>" +
  1142. "<td class='selfAgentName' id='selfAgentName'>"+selfconfig["Name"]+"</td><td class='selfAgentAddr Addr' id='selfAgentAddr'>"+selfconfig["Addr"]+"</td>" +
  1143. "<td style='text-align:center'><input type='checkbox' checked disabled></td>" +
  1144. "<td style='text-align:center'><a class='btn btn-mini' onclick='pingcfg(this,false)'>配置</a></td>" +
  1145. "<td style='text-align:center'><a class='btn btn-mini' onclick='topocfg(this,false)'>配置</a></td>" +
  1146. //"<td style='text-align:center'><a class='btn btn-mini' onclick='toolcfg(this,false)'>配置</a></td>" +
  1147. "<td style='text-align: center'><i onclick='editSelfagentModal(false);' class='icon-large icon-edit'></i>" +
  1148. "</tr>")
  1149. $.each(config["Network"], function(Addr, agentconfig){
  1150. if(config["Addr"]!=Addr){
  1151. checked=""
  1152. disabled="disabled"
  1153. if(agentconfig["Smartping"]){
  1154. checked="checked"
  1155. disabled=""
  1156. }
  1157. $(".agentlist").append("<tr class='agentlist-"+agentconfig["Addr"]+"'>" +
  1158. "<td>"+agentconfig["Name"]+"</td><td class='Addr'>"+agentconfig["Addr"]+"</td>" +
  1159. "<td style='text-align:center'><input type='checkbox' "+checked+" onclick='checkSP(this)'></td>" +
  1160. "<td style='text-align:center'><a class='btn btn-mini' "+disabled+" onclick='pingcfg(this,false)'>配置</a></td>" +
  1161. "<td style='text-align:center'><a class='btn btn-mini' "+disabled+" onclick='topocfg(this,false)'>配置</a></td>" +
  1162. //"<td style='text-align:center'><a class='btn btn-mini' "+disabled+" onclick='toolcfg(this,false)'>配置</a></td>" +
  1163. "<td style='text-align: center'><i onclick='delAgent(this,null);' class='icon-large icon-trash'></i></td>" +
  1164. "</tr>")
  1165. }
  1166. })
  1167. refreshChinaMap();
  1168. });
  1169. $(".allchecked").click(function(){
  1170. var xz = $(this).prop("checked");
  1171. var topoCheck=false
  1172. if($(this).attr("v")=="topoCheck"){
  1173. topoCheck=true
  1174. }
  1175. $(this).parents().children("tbody").children("tr").each(function(i,obj) {
  1176. $(obj).find('input').attr("checked",xz);
  1177. if(topoCheck){
  1178. enabledTopo($(obj).find('input'))
  1179. }
  1180. });
  1181. });
  1182. });
  1183. </script>
  1184. </body>
  1185. </html>