index.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. <div class="wrapper wrapper-content">
  2. <div class="row">
  3. <div class="col-lg-3">
  4. <div class="ibox float-e-margins">
  5. <div class="ibox-title">
  6. <h5>client connection port</h5>
  7. </div>
  8. <div class="ibox-content">
  9. <h1 class="no-margins">{{.p}}</h1>
  10. </div>
  11. </div>
  12. </div>
  13. <div class="col-lg-3">
  14. <div class="ibox float-e-margins">
  15. <div class="ibox-title">
  16. <h5>number of clients</h5>
  17. </div>
  18. <div class="ibox-content">
  19. <h1 class="no-margins">{{.data.clientCount}}</h1>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="col-lg-3">
  24. <div class="ibox float-e-margins">
  25. <div class="ibox-title">
  26. {{/*<span class="label label-primary pull-right">今日</span>*/}}
  27. <h5>number of online clients</h5>
  28. </div>
  29. <div class="ibox-content">
  30. <h1 class="no-margins">{{.data.clientOnlineCount}}</h1>
  31. {{/*<div class="stat-percent font-bold text-navy">44% <i class="fa fa-level-up"></i></div>*/}}
  32. {{/*<small>新访客</small>*/}}
  33. </div>
  34. </div>
  35. </div>
  36. <div class="col-lg-3">
  37. <div class="ibox float-e-margins">
  38. <div class="ibox-title">
  39. <h5>number of tcp connections</h5>
  40. </div>
  41. <div class="ibox-content">
  42. <h1 class="no-margins">{{.data.tcpCount}}</h1>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="row">
  48. <div class="col-lg-6">
  49. <div class="ibox float-e-margins">
  50. <div class="ibox-title">
  51. <h5>config information</h5>
  52. <div class="ibox-tools">
  53. <a class="collapse-link">
  54. <i class="fa fa-chevron-up"></i>
  55. </a>
  56. <a class="close-link">
  57. <i class="fa fa-times"></i>
  58. </a>
  59. </div>
  60. </div>
  61. <div class="ibox-content no-padding">
  62. <ul class="list-group">
  63. <li class="list-group-item">
  64. <div class="row">
  65. <div class="col-sm-6">
  66. <strong>bridge type</strong>
  67. </div>
  68. <div class="col-sm-6 text-right">
  69. <strong>{{.data.bridgeType}}</strong>
  70. </div>
  71. </div>
  72. </li>
  73. <li class="list-group-item">
  74. <div class="row">
  75. <div class="col-sm-6">
  76. <strong>http proxy port</strong>
  77. </div>
  78. <div class="col-sm-6 text-right">
  79. <strong>{{.data.httpProxyPort}}</strong>
  80. </div>
  81. </div>
  82. </li>
  83. <li class="list-group-item">
  84. <div class="row">
  85. <div class="col-sm-6">
  86. <strong>https proxy port</strong>
  87. </div>
  88. <div class="col-sm-6 text-right">
  89. <strong>{{.data.httpsProxyPort}}</strong>
  90. </div>
  91. </div>
  92. </li>
  93. <li class="list-group-item ">
  94. <div class="row">
  95. <div class="col-sm-6">
  96. <strong>ip limit</strong>
  97. </div>
  98. <div class="col-sm-6 text-right">
  99. <strong>{{.data.ipLimit}}</strong>
  100. </div>
  101. </div>
  102. </li>
  103. <li class="list-group-item ">
  104. <div class="row">
  105. <div class="col-sm-6">
  106. <strong>flow store interval</strong>
  107. </div>
  108. <div class="col-sm-6 text-right">
  109. <strong>{{.data.flowStoreInterval}}</strong>
  110. </div>
  111. </div>
  112. </li>
  113. <li class="list-group-item ">
  114. <div class="row">
  115. <div class="col-sm-6">
  116. <strong>log level</strong>
  117. </div>
  118. <div class="col-sm-6 text-right">
  119. <strong>{{.data.logLevel}}</strong>
  120. </div>
  121. </div>
  122. </li>
  123. <li class="list-group-item ">
  124. <div class="row">
  125. <div class="col-sm-6">
  126. <strong>p2p port</strong>
  127. </div>
  128. <div class="col-sm-6 text-right">
  129. <strong>{{.data.p2pPort}}</strong>
  130. </div>
  131. </div>
  132. </li>
  133. <li class="list-group-item ">
  134. <div class="row">
  135. <div class="col-sm-6">
  136. <strong>server ip</strong>
  137. </div>
  138. <div class="col-sm-6 text-right">
  139. <strong>{{.data.serverIp}}</strong>
  140. </div>
  141. </div>
  142. </li>
  143. </ul>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="col-lg-6">
  148. <div class="ibox-title">
  149. <h5>system now</h5>
  150. <div class="ibox-tools">
  151. <a class="collapse-link">
  152. <i class="fa fa-chevron-up"></i>
  153. </a>
  154. <a class="close-link">
  155. <i class="fa fa-times"></i>
  156. </a>
  157. </div>
  158. </div>
  159. <div class="ibox-content">
  160. <div>
  161. <div>
  162. <span>cpu</span>
  163. <small class="pull-right">{{.data.cpu}}%</small>
  164. </div>
  165. <div class="progress progress-small">
  166. <div style="width: {{.data.cpu}}%;" class="progress-bar"></div>
  167. </div>
  168. <div>
  169. <span>virtual memory</span>
  170. <small class="pull-right">{{.data.virtual_mem}}%</small>
  171. </div>
  172. <div class="progress progress-small">
  173. <div style="width: {{.data.virtual_mem}}%;" class="progress-bar"></div>
  174. </div>
  175. </div>
  176. </div>
  177. </div>
  178. <div class="col-lg-6">
  179. <div class="ibox float-e-margins">
  180. <div class="ibox-content no-padding">
  181. <ul class="list-group">
  182. <li class="list-group-item">
  183. <div class="row">
  184. <div class="col-sm-6">
  185. <strong>load</strong>
  186. </div>
  187. <div class="col-sm-6 text-right">
  188. <strong>{{.data.load}}</strong>
  189. </div>
  190. </div>
  191. </li>
  192. <li class="list-group-item ">
  193. <div class="row">
  194. <div class="col-sm-6">
  195. <strong>tcp num(establish)</strong>
  196. </div>
  197. <div class="col-sm-6 text-right">
  198. <strong>{{.data.tcp}}</strong>
  199. </div>
  200. </div>
  201. </li>
  202. <li class="list-group-item ">
  203. <div class="row">
  204. <div class="col-sm-6">
  205. <strong>udp num(establish)</strong>
  206. </div>
  207. <div class="col-sm-6 text-right">
  208. <strong>{{.data.udp}}</strong>
  209. </div>
  210. </div>
  211. </li>
  212. <li class="list-group-item ">
  213. <div class="row">
  214. <div class="col-sm-6">
  215. <strong>out</strong>
  216. </div>
  217. <div class="col-sm-6 text-right">
  218. <strong id="send"></strong>
  219. </div>
  220. </div>
  221. </li>
  222. <li class="list-group-item ">
  223. <div class="row">
  224. <div class="col-sm-6">
  225. <strong>in</strong>
  226. </div>
  227. <div class="col-sm-6 text-right">
  228. <strong id="recv"></strong>
  229. </div>
  230. </div>
  231. </li>
  232. </ul>
  233. </div>
  234. </div>
  235. </div>
  236. </div>
  237. <div class="row">
  238. <div class="col-lg-6">
  239. <div class="ibox float-e-margins">
  240. <div class="ibox-title">
  241. <h5>load</h5>
  242. <div class="ibox-tools">
  243. <a class="collapse-link">
  244. <i class="fa fa-chevron-up"></i>
  245. </a>
  246. <a class="close-link">
  247. <i class="fa fa-times"></i>
  248. </a>
  249. </div>
  250. </div>
  251. <div class="ibox-content">
  252. <div id="load" style="height: 300px"></div>
  253. </div>
  254. </div>
  255. </div>
  256. <div class="col-lg-6">
  257. <div class="ibox float-e-margins">
  258. <div class="ibox-title">
  259. <h5>cpu</h5>
  260. <div class="ibox-tools">
  261. <a class="collapse-link">
  262. <i class="fa fa-chevron-up"></i>
  263. </a>
  264. <a class="close-link">
  265. <i class="fa fa-times"></i>
  266. </a>
  267. </div>
  268. </div>
  269. <div class="ibox-content">
  270. <div id="cpu" style="height: 300px"></div>
  271. </div>
  272. </div>
  273. </div>
  274. </div>
  275. <div class="row">
  276. <div class="col-lg-6">
  277. <div class="ibox float-e-margins">
  278. <div class="ibox-title">
  279. <h5>virtual_mem</h5>
  280. <div class="ibox-tools">
  281. <a class="collapse-link">
  282. <i class="fa fa-chevron-up"></i>
  283. </a>
  284. <a class="close-link">
  285. <i class="fa fa-times"></i>
  286. </a>
  287. </div>
  288. </div>
  289. <div class="ibox-content">
  290. <div id="virtual_mem" style="height: 300px"></div>
  291. </div>
  292. </div>
  293. </div>
  294. <div class="col-lg-6">
  295. <div class="ibox float-e-margins">
  296. <div class="ibox-title">
  297. <h5>connection num</h5>
  298. <div class="ibox-tools">
  299. <a class="collapse-link">
  300. <i class="fa fa-chevron-up"></i>
  301. </a>
  302. <a class="close-link">
  303. <i class="fa fa-times"></i>
  304. </a>
  305. </div>
  306. </div>
  307. <div class="ibox-content">
  308. <div id="conn_num" style="height: 300px"></div>
  309. </div>
  310. </div>
  311. </div>
  312. </div>
  313. <div class="row">
  314. <div class="col-lg-12">
  315. <div class="ibox float-e-margins">
  316. <div class="ibox-title">
  317. <h5>bandwidth</h5>
  318. <div class="ibox-tools">
  319. <a class="collapse-link">
  320. <i class="fa fa-chevron-up"></i>
  321. </a>
  322. <a class="close-link">
  323. <i class="fa fa-times"></i>
  324. </a>
  325. </div>
  326. </div>
  327. <div class="ibox-content">
  328. <div id="bandwidth" style="height: 300px"></div>
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. <div class="row">
  334. <div class="col-lg-6">
  335. <div class="ibox float-e-margins">
  336. <div class="ibox-title">
  337. <h5>traffic</h5>
  338. <div class="ibox-tools">
  339. <a class="collapse-link">
  340. <i class="fa fa-chevron-up"></i>
  341. </a>
  342. <a class="close-link">
  343. <i class="fa fa-times"></i>
  344. </a>
  345. </div>
  346. </div>
  347. <div class="ibox-content">
  348. <div id="flow" style="height: 400px;"></div>
  349. </div>
  350. </div>
  351. </div>
  352. <div class="col-lg-6">
  353. <div class="ibox float-e-margins">
  354. <div class="ibox-title">
  355. <h5>types</h5>
  356. <div class="ibox-tools">
  357. <a class="collapse-link">
  358. <i class="fa fa-chevron-up"></i>
  359. </a>
  360. <a class="close-link">
  361. <i class="fa fa-times"></i>
  362. </a>
  363. </div>
  364. </div>
  365. <div class="ibox-content">
  366. <div id="tj" style="height:400px;"></div>
  367. </div>
  368. </div>
  369. </div>
  370. </div>
  371. </div>
  372. <script>
  373. option = {
  374. title: {
  375. x: 'center'
  376. },
  377. tooltip: {
  378. trigger: 'item',
  379. formatter: function (p) {
  380. return p.seriesName + "<br>" + p.name + ":" + change(p.data.value);
  381. },
  382. },
  383. legend: {
  384. orient: 'vertical',
  385. left: 'left',
  386. data: ['inlet flow', 'export flow']
  387. },
  388. series: [
  389. {
  390. name: 'traffic',
  391. type: 'pie',
  392. radius: '55%',
  393. center: ['50%', '60%'],
  394. data: [
  395. {value:{{.data.inletFlowCount}}, name: 'inlet flow'},
  396. {value:{{.data.exportFlowCount}}, name: 'export flow'},
  397. ],
  398. itemStyle: {
  399. emphasis: {
  400. shadowBlur: 10,
  401. shadowOffsetX: 0,
  402. shadowColor: 'rgba(0, 0, 0, 0.5)'
  403. }
  404. }
  405. }
  406. ]
  407. };
  408. var myChart1 = echarts.init(document.getElementById('flow'));
  409. myChart1.setOption(option);
  410. option = {
  411. title: {
  412. x: 'center'
  413. },
  414. tooltip: {
  415. trigger: 'item',
  416. formatter: "{a} <br/>{b} : {c} ({d}%)"
  417. },
  418. legend: {
  419. orient: 'vertical',
  420. left: 'left',
  421. data: ['tcp', 'socks5', 'http', 'udp', 'host', 'secret', 'p2p']
  422. },
  423. series: [
  424. {
  425. name: 'types',
  426. type: 'pie',
  427. radius: '55%',
  428. center: ['50%', '60%'],
  429. data: [
  430. {value:{{.data.tcpC}}, name: 'tcp'},
  431. {value:{{.data.socks5Count}}, name: 'socks5'},
  432. {value:{{.data.httpProxyCount}}, name: 'http'},
  433. {value:{{.data.udpCount}}, name: 'udp'},
  434. {value:{{.data.hostCount}}, name: 'host'},
  435. {value:{{.data.secretCount}}, name: 'secret'},
  436. {value:{{.data.p2pCount}}, name: 'p2p'},
  437. ],
  438. itemStyle: {
  439. emphasis: {
  440. shadowBlur: 10,
  441. shadowOffsetX: 0,
  442. shadowColor: 'rgba(0, 0, 0, 0.5)'
  443. }
  444. }
  445. }
  446. ]
  447. };
  448. var myChart2 = echarts.init(document.getElementById('tj'));
  449. myChart2.setOption(option);
  450. $(function () {
  451. $("#send").html(change({{.data.io_send}}) + "/s")
  452. $("#recv").html(change({{.data.io_recv}}) + "/s")
  453. })
  454. var dom = document.getElementById("load");
  455. var myChart3 = echarts.init(dom);
  456. var app = {};
  457. option = null;
  458. option = {
  459. title: {
  460. text: 'load'
  461. },
  462. tooltip: {
  463. trigger: 'axis'
  464. },
  465. grid: {
  466. left: '3%',
  467. right: '4%',
  468. bottom: '3%',
  469. containLabel: true
  470. },
  471. toolbox: {
  472. feature: {
  473. saveAsImage: {}
  474. }
  475. },
  476. xAxis: {
  477. type: 'category',
  478. boundaryGap: false,
  479. data: ['{{.data.sys1.time}}', '{{.data.sys2.time}}', '{{.data.sys3.time}}', '{{.data.sys4.time}}', '{{.data.sys5.time}}', '{{.data.sys6.time}}', '{{.data.sys7.time}}', '{{.data.sys8.time}}', '{{.data.sys9.time}}', '{{.data.sys10.time}}']
  480. },
  481. yAxis: {
  482. type: 'value'
  483. },
  484. series: [
  485. {
  486. name: 'load1',
  487. type: 'line',
  488. stack: 'load1',
  489. smooth: true,
  490. data: [{{.data.sys1.load1}}, {{.data.sys2.load1}}, {{.data.sys3.load1}}, {{.data.sys4.load1}}, {{.data.sys5.load1}}, {{.data.sys6.load1}}, {{.data.sys7.load1}}, {{.data.sys8.load1}}, {{.data.sys9.load1}}, {{.data.sys10.load1}}],
  491. },
  492. {
  493. name: 'load5',
  494. type: 'line',
  495. stack: 'load5',
  496. smooth: true,
  497. data: [{{.data.sys1.load5}}, {{.data.sys2.load5}}, {{.data.sys3.load5}}, {{.data.sys4.load5}}, {{.data.sys5.load5}}, {{.data.sys6.load5}}, {{.data.sys7.load5}}, {{.data.sys8.load5}}, {{.data.sys9.load5}}, {{.data.sys10.load5}}],
  498. },
  499. {
  500. name: 'load15',
  501. type: 'line',
  502. stack: 'load15',
  503. smooth: true,
  504. data: [{{.data.sys1.load15}}, {{.data.sys2.load15}}, {{.data.sys3.load15}}, {{.data.sys4.load15}}, {{.data.sys5.load15}}, {{.data.sys6.load15}}, {{.data.sys7.load15}}, {{.data.sys8.load15}}, {{.data.sys9.load15}}, {{.data.sys10.load15}}],
  505. }
  506. ]
  507. };
  508. if (option && typeof option === "object") {
  509. myChart3.setOption(option, true);
  510. }
  511. var dom = document.getElementById("cpu");
  512. var myChart4 = echarts.init(dom);
  513. var app = {};
  514. option = null;
  515. option = {
  516. title: {
  517. text: 'cpu'
  518. },
  519. tooltip: {
  520. trigger: 'axis'
  521. },
  522. grid: {
  523. left: '3%',
  524. right: '4%',
  525. bottom: '3%',
  526. containLabel: true
  527. },
  528. toolbox: {
  529. feature: {
  530. saveAsImage: {}
  531. }
  532. },
  533. xAxis: {
  534. type: 'category',
  535. boundaryGap: false,
  536. data: ['{{.data.sys1.time}}', '{{.data.sys2.time}}', '{{.data.sys3.time}}', '{{.data.sys4.time}}', '{{.data.sys5.time}}', '{{.data.sys6.time}}', '{{.data.sys7.time}}', '{{.data.sys8.time}}', '{{.data.sys9.time}}', '{{.data.sys10.time}}']
  537. },
  538. yAxis: {
  539. type: 'value'
  540. },
  541. series: [
  542. {
  543. name: 'cpu',
  544. type: 'line',
  545. stack: 'cpu',
  546. smooth: true,
  547. areas: {},
  548. data: [{{.data.sys1.cpu}}, {{.data.sys2.cpu}}, {{.data.sys3.cpu}}, {{.data.sys4.cpu}}, {{.data.sys5.cpu}}, {{.data.sys6.cpu}}, {{.data.sys7.cpu}}, {{.data.sys8.cpu}}, {{.data.sys9.cpu}}, {{.data.sys10.cpu}}],
  549. }
  550. ]
  551. };
  552. if (option && typeof option === "object") {
  553. myChart4.setOption(option, true);
  554. }
  555. var dom = document.getElementById("virtual_mem");
  556. var myChart5 = echarts.init(dom);
  557. var app = {};
  558. option = null;
  559. option = {
  560. title: {
  561. text: 'memory'
  562. },
  563. tooltip: {
  564. trigger: 'axis'
  565. },
  566. grid: {
  567. left: '3%',
  568. right: '4%',
  569. bottom: '3%',
  570. containLabel: true
  571. },
  572. toolbox: {
  573. feature: {
  574. saveAsImage: {}
  575. }
  576. },
  577. xAxis: {
  578. type: 'category',
  579. boundaryGap: false,
  580. data: ['{{.data.sys1.time}}', '{{.data.sys2.time}}', '{{.data.sys3.time}}', '{{.data.sys4.time}}', '{{.data.sys5.time}}', '{{.data.sys6.time}}', '{{.data.sys7.time}}', '{{.data.sys8.time}}', '{{.data.sys9.time}}', '{{.data.sys10.time}}']
  581. },
  582. yAxis: {
  583. type: 'value'
  584. },
  585. series: [
  586. {
  587. name: 'virtual_mem',
  588. type: 'line',
  589. stack: 'virtual_mem',
  590. smooth: true,
  591. areas: {},
  592. data: [{{.data.sys1.virtual_mem}}, {{.data.sys2.virtual_mem}}, {{.data.sys3.virtual_mem}}, {{.data.sys4.virtual_mem}}, {{.data.sys5.virtual_mem}}, {{.data.sys6.virtual_mem}}, {{.data.sys7.virtual_mem}}, {{.data.sys8.virtual_mem}}, {{.data.sys9.virtual_mem}}, {{.data.sys10.virtual_mem}}],
  593. },
  594. {
  595. name: 'swap_mem',
  596. type: 'line',
  597. stack: 'swap_mem',
  598. smooth: true,
  599. areas: {},
  600. data: [{{.data.sys1.swap_mem}}, {{.data.sys2.swap_mem}}, {{.data.sys3.swap_mem}}, {{.data.sys4.swap_mem}}, {{.data.sys5.swap_mem}}, {{.data.sys6.swap_mem}}, {{.data.sys7.swap_mem}}, {{.data.sys8.swap_mem}}, {{.data.sys9.swap_mem}}, {{.data.sys10.swap_mem}}],
  601. }
  602. ],
  603. };
  604. if (option && typeof option === "object") {
  605. myChart5.setOption(option, true);
  606. }
  607. var dom = document.getElementById("conn_num");
  608. var myChart6 = echarts.init(dom);
  609. var app = {};
  610. option = null;
  611. option = {
  612. title: {
  613. text: 'connection num(establish)'
  614. },
  615. tooltip: {
  616. trigger: 'axis'
  617. },
  618. grid: {
  619. left: '3%',
  620. right: '4%',
  621. bottom: '3%',
  622. containLabel: true
  623. },
  624. toolbox: {
  625. feature: {
  626. saveAsImage: {}
  627. }
  628. },
  629. xAxis: {
  630. type: 'category',
  631. boundaryGap: false,
  632. data: ['{{.data.sys1.time}}', '{{.data.sys2.time}}', '{{.data.sys3.time}}', '{{.data.sys4.time}}', '{{.data.sys5.time}}', '{{.data.sys6.time}}', '{{.data.sys7.time}}', '{{.data.sys8.time}}', '{{.data.sys9.time}}', '{{.data.sys10.time}}']
  633. },
  634. yAxis: {
  635. type: 'value'
  636. },
  637. series: [
  638. {
  639. name: 'tcp',
  640. type: 'line',
  641. stack: 'tcp',
  642. smooth: true,
  643. areas: {},
  644. data: [{{.data.sys1.tcp}}, {{.data.sys2.tcp}}, {{.data.sys3.tcp}}, {{.data.sys4.tcp}}, {{.data.sys5.tcp}}, {{.data.sys6.tcp}}, {{.data.sys7.tcp}}, {{.data.sys8.tcp}}, {{.data.sys9.tcp}}, {{.data.sys10.tcp}}],
  645. },
  646. {
  647. name: 'udp',
  648. type: 'line',
  649. stack: 'udp',
  650. smooth: true,
  651. areas: {},
  652. data: [{{.data.sys1.udp}}, {{.data.sys2.udp}}, {{.data.sys3.udp}}, {{.data.sys4.udp}}, {{.data.sys5.udp}}, {{.data.sys6.udp}}, {{.data.sys7.udp}}, {{.data.sys8.udp}}, {{.data.sys9.udp}}, {{.data.sys10.udp}}],
  653. }
  654. ]
  655. };
  656. if (option && typeof option === "object") {
  657. myChart6.setOption(option, true);
  658. }
  659. var dom = document.getElementById("bandwidth");
  660. var myChart7 = echarts.init(dom);
  661. var app = {};
  662. option = null;
  663. option = {
  664. title: {
  665. text: 'bandwidth'
  666. },
  667. tooltip: {
  668. trigger: 'axis',
  669. formatter: function (a) {
  670. return "in:" + change(a[0].data) + "/s<br/>" + "out:" + change(a[1].data) + "/s<br/>" + a[0].axisValue;
  671. }
  672. },
  673. grid: {
  674. left: '3%',
  675. right: '4%',
  676. bottom: '3%',
  677. containLabel: true
  678. },
  679. toolbox: {
  680. feature: {
  681. saveAsImage: {}
  682. }
  683. },
  684. xAxis: {
  685. type: 'category',
  686. boundaryGap: false,
  687. data: ['{{.data.sys1.time}}', '{{.data.sys2.time}}', '{{.data.sys3.time}}', '{{.data.sys4.time}}', '{{.data.sys5.time}}', '{{.data.sys6.time}}', '{{.data.sys7.time}}', '{{.data.sys8.time}}', '{{.data.sys9.time}}', '{{.data.sys10.time}}']
  688. },
  689. yAxis: {
  690. type: 'value'
  691. },
  692. series: [
  693. {
  694. name: 'in',
  695. type: 'line',
  696. stack: 'in',
  697. smooth: true,
  698. areas: {},
  699. data: [{{.data.sys1.io_recv}}, {{.data.sys2.io_recv}}, {{.data.sys3.io_recv}}, {{.data.sys4.io_recv}}, {{.data.sys5.io_recv}}, {{.data.sys6.io_recv}}, {{.data.sys7.io_recv}}, {{.data.sys8.io_recv}}, {{.data.sys9.io_recv}}, {{.data.sys10.io_recv}}],
  700. },
  701. {
  702. name: 'out',
  703. type: 'line',
  704. stack: 'out',
  705. smooth: true,
  706. areas: {},
  707. data: [{{.data.sys1.io_send}}, {{.data.sys2.io_send}}, {{.data.sys3.io_send}}, {{.data.sys4.io_send}}, {{.data.sys5.io_send}}, {{.data.sys6.io_send}}, {{.data.sys7.io_send}}, {{.data.sys8.io_send}}, {{.data.sys9.io_send}}, {{.data.sys10.io_send}}],
  708. }
  709. ]
  710. };
  711. if (option && typeof option === "object") {
  712. myChart7.setOption(option, true);
  713. }
  714. window.addEventListener("resize", () => {
  715. this.myChart1.resize();
  716. this.myChart2.resize();
  717. this.myChart3.resize();
  718. this.myChart4.resize();
  719. this.myChart5.resize();
  720. this.myChart6.resize();
  721. this.myChart7.resize();
  722. });
  723. </script>