probe.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <?php
  2. use common\helpers\Url;
  3. use common\helpers\Html;
  4. use common\helpers\AddonHelper;
  5. $this->title = '系统探针';
  6. $this->params['breadcrumbs'][] = ['label' => $this->title];
  7. ?>
  8. <?= AddonHelper::jsFile('js/echarts-all.js')?>
  9. <div class="row">
  10. <div class="col-lg-12">
  11. <div class="box">
  12. <div class="box-header">
  13. <h3 class="box-title"><i class="fa fa-cog"></i> 服务器参数</h3>
  14. </div>
  15. <div class="box-body table-responsive">
  16. <table class="table">
  17. <tr>
  18. <td>服务器域名地址</td>
  19. <td><?= $info['environment']['domainIP'] ?></td>
  20. <td>服务器标识</td>
  21. <td><?= $info['environment']['flag'] ?></td>
  22. </tr>
  23. <tr>
  24. <td>操作系统</td>
  25. <td><?= $info['environment']['os'] ?></td>
  26. <td>服务器解析引擎</td>
  27. <td><?= $info['environment']['webEngine'] ?></td>
  28. </tr>
  29. <tr>
  30. <td>服务器语言</td>
  31. <td><?= $info['environment']['language'] ?></td>
  32. <td>服务器端口</td>
  33. <td><?= $info['environment']['webPort'] ?></td>
  34. </tr>
  35. <tr>
  36. <td>服务器主机名</td>
  37. <td><?= $info['environment']['name'] ?></td>
  38. <td>站点绝对路径</td>
  39. <td><?= $info['environment']['webPath'] ?></td>
  40. </tr>
  41. <tr>
  42. <td>服务器当前时间</td>
  43. <td><span id="divTime"></span></td>
  44. <td>服务器已运行时间</td>
  45. <td><?= $info['uptime'] ?></td>
  46. </tr>
  47. </table>
  48. </div>
  49. </div>
  50. <div class="box">
  51. <div class="box-header">
  52. <h3 class="box-title"><i class="fa fa-cog"></i> 服务器硬件数据</h3>
  53. </div>
  54. <div class="box-body table-responsive">
  55. <div id="schedule" style="width: 100%;height:150px;"></div>
  56. <div class="col-sm-12 text-center" id="memData">
  57. <div class="col-sm-3 "><?= $info['hardDisk']['used']?>/<?= $info['hardDisk']['total']?> (G)</div>
  58. <div class="col-sm-3"><?= $info['memory']['real']['used'] ?>/<?= $info['memory']['memory']['total']; ?> (M)</div>
  59. <div class="col-sm-3"><?= $info['memory']['memory']['used'] ?>/<?= $info['memory']['memory']['total']; ?> (M)</div>
  60. <div class="col-sm-3"><?= $info['memory']['cache']['real']?>/<?= $info['memory']['cache']['total']?> (M)<br>Buffers缓冲为 <?= $info['memory']['memory']['buffers']?> M</div>
  61. </div>
  62. <div id="sys-hardware">
  63. <table class="table">
  64. <tr>
  65. <td>CPU</td>
  66. <td><?= $info['cpu']['num'] ?></td>
  67. <td>CPU型号</td>
  68. <td><?= $info['cpu']['model'] ?></td>
  69. </tr>
  70. <tr>
  71. <td>CPU使用情况</td>
  72. <td colspan="3">
  73. <?= $info['cpuUse']['explain'] ?>
  74. </td>
  75. </tr>
  76. <tr>
  77. <td>系统平均负载(1分钟、5分钟、以及15分钟的负载均值)</td>
  78. <td colspan="3"><?= $info['loadavg']['explain'] ?></td>
  79. </tr>
  80. </table>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="box">
  85. <div class="box-header">
  86. <h3 class="box-title"><i class="fa fa-cog"></i> 服务器实时网络数据</h3>
  87. </div>
  88. <div class="box-body table-responsive">
  89. <table class="table">
  90. <tr>
  91. <td>总发送</td>
  92. <td id="netWork_allOutSpeed"><?= $info['netWork']['allOutSpeed'] ?></td>
  93. <td>总接收</td>
  94. <td id="netWork_allInputSpeed"><?= $info['netWork']['allInputSpeed'] ?></td>
  95. </tr>
  96. <tr>
  97. <td>发送速度</td>
  98. <td id="netWork_currentOutSpeed"><?= $info['netWork']['currentOutSpeed'] ?></td>
  99. <td>接收速度</td>
  100. <td id="netWork_currentInputSpeed"><?= $info['netWork']['currentInputSpeed'] ?></td>
  101. </tr>
  102. <tr>
  103. <td colspan="4">
  104. <div id="main" style="width: 100%;height:400px;"></div>
  105. </td>
  106. </tr>
  107. </table>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. <script type="text/html" id="model">
  113. <table class="table">
  114. <tr>
  115. <td>CPU</td>
  116. <td>{{cpu.num}}</td>
  117. <td>CPU型号</td>
  118. <td>{{cpu.model}}</td>
  119. </tr>
  120. <tr>
  121. <td>CPU使用情况</td>
  122. <td colspan="3">
  123. {{#cpuUse.explain}}
  124. </td>
  125. </tr>
  126. <tr>
  127. <td>系统平均负载(1分钟、5分钟、以及15分钟的负载均值)</td>
  128. <td colspan="3">{{loadavg.explain}}</td>
  129. </tr>
  130. </table>
  131. </script>
  132. <script type="text/html" id="mem">
  133. <div class="col-sm-3 ">{{hardDisk.used}}/{{hardDisk.total}} (G)</div>
  134. <div class="col-sm-3">{{memory.real.used}}/{{memory.memory.total}} (M)</div>
  135. <div class="col-sm-3">{{memory.memory.used}}/{{memory.memory.total}} (M)</div>
  136. <div class="col-sm-3">{{memory.cache.real}}/{{memory.cache.total}} (M)<br>Buffers缓冲为 {{memory.memory.buffers}} M</div>
  137. </script>
  138. <script>
  139. var schedule = echarts.init(document.getElementById('schedule'));
  140. var hdSpeed = [100, 0];
  141. var memTotal = [100, 0];
  142. var memCached = [100, 0];
  143. var memRealUsed = [100, 0];
  144. function scheduleOption() {
  145. var labelTop = {
  146. normal : {
  147. label : {
  148. show : true,
  149. position : 'center',
  150. formatter : '{b}',
  151. textStyle: {
  152. baseline : 'bottom'
  153. },
  154. },
  155. labelLine : {
  156. show : false
  157. }
  158. }
  159. };
  160. var labelFromatter = {
  161. normal : {
  162. label : {
  163. formatter : function (a,b,c){
  164. return 100 - c + '%'
  165. },
  166. textStyle: {
  167. baseline : 'top'
  168. }
  169. }
  170. },
  171. }
  172. var labelBottom = {
  173. normal : {
  174. color: '#ccc',
  175. label : {
  176. show : true,
  177. position : 'center'
  178. },
  179. labelLine : {
  180. show : false
  181. }
  182. },
  183. emphasis: {
  184. color: 'rgba(0,0,0,0)'
  185. }
  186. };
  187. var radius = [55, 65];
  188. var optionData = {
  189. series : [
  190. {
  191. type : 'pie',
  192. center : ['13%', '50%'],
  193. radius : radius,
  194. x: '0%', // for funnel
  195. itemStyle : labelFromatter,
  196. data : [
  197. {name:'other', value: hdSpeed[0], itemStyle : labelBottom},
  198. {name:'硬盘使用率', value:hdSpeed[1],itemStyle : labelTop}
  199. ]
  200. },
  201. {
  202. type : 'pie',
  203. center : ['38%', '50%'],
  204. radius : radius,
  205. x:'60%', // for funnel
  206. itemStyle : labelFromatter,
  207. data : [
  208. {name:'other', value:memRealUsed[0], itemStyle : labelBottom},
  209. {name:'真实内存使用率', value:memRealUsed[1],itemStyle : labelTop}
  210. ]
  211. },
  212. {
  213. type : 'pie',
  214. center : ['62%', '50%'],
  215. radius : radius,
  216. x:'20%', // for funnel
  217. itemStyle : labelFromatter,
  218. data : [
  219. {name:'other', value:memTotal[0], itemStyle : labelBottom},
  220. {name:'物理内存使用率', value:memTotal[1],itemStyle : labelTop}
  221. ]
  222. },
  223. {
  224. type : 'pie',
  225. center : ['87%', '50%'],
  226. radius : radius,
  227. x:'40%', // for funnel
  228. itemStyle : labelFromatter,
  229. data : [
  230. {name:'other', value:memCached[0], itemStyle : labelBottom},
  231. {name:'Cache化内存使用率', value:memCached[1],itemStyle : labelTop}
  232. ]
  233. }
  234. ]
  235. };
  236. return optionData;
  237. }
  238. schedule.setOption(scheduleOption()); // 加载图表
  239. </script>
  240. <script type="text/javascript">
  241. var myChart = echarts.init(document.getElementById('main'));
  242. var currentOutSpeed = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  243. var currentInputSpeed = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  244. var chartTime = <?= json_encode($info['chartTime'])?>;
  245. function chartOption() {
  246. var option = {
  247. title : {
  248. subtext: '单位 KB/s'
  249. },
  250. tooltip : {
  251. trigger: 'axis'
  252. },
  253. legend: {
  254. data:['发送速度','接收速度']
  255. },
  256. toolbox: {
  257. show : false,
  258. feature : {
  259. mark : {show: true},
  260. dataView : {show: true, readOnly: false},
  261. magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
  262. restore : {show: true},
  263. saveAsImage : {show: true}
  264. }
  265. },
  266. calculable : true,
  267. xAxis : [
  268. {
  269. type : 'category',
  270. boundaryGap : false,
  271. data : chartTime
  272. }
  273. ],
  274. yAxis : [
  275. {
  276. type : 'value'
  277. }
  278. ],
  279. series : [
  280. {
  281. name:'发送速度',
  282. type:'line',
  283. smooth:true,
  284. itemStyle: {normal: {areaStyle: {type: 'default'}}},
  285. data:currentOutSpeed
  286. },
  287. {
  288. name:'接收速度',
  289. type:'line',
  290. smooth:true,
  291. itemStyle: {normal: {areaStyle: {type: 'default'}}},
  292. data:currentInputSpeed
  293. }
  294. ]
  295. };
  296. return option;
  297. }
  298. myChart.setOption(chartOption()); // 加载图表
  299. $(document).ready(function(){
  300. setTime();
  301. setInterval(setTime, 1000);
  302. setInterval(getServerInfo, 3000);
  303. });
  304. function setTime() {
  305. var d = new Date(), str = '';
  306. str += d.getFullYear() + ' 年 '; // 获取当前年份
  307. str += d.getMonth() + 1 + ' 月 '; // 获取当前月份(0——11)
  308. str += d.getDate() + ' 日 ';
  309. str += d.getHours() + ' 时 ';
  310. str += d.getMinutes() + ' 分 ';
  311. str += d.getSeconds() + ' 秒 ';
  312. $("#divTime").text(str);
  313. }
  314. function getServerInfo() {
  315. $.ajax({
  316. type : "get",
  317. url : "<?= Url::to(['probe'])?>",
  318. dataType : "json",
  319. data: {},
  320. success: function(data) {
  321. if (data.code == 200) {
  322. var data = data.data;
  323. var html = template('model',data);
  324. $('#sys-hardware').html(html);
  325. var html2 = template('mem',data);
  326. $('#memData').html(html2);
  327. var netWork = data.netWork;
  328. $('#netWork_allOutSpeed').text(netWork.allOutSpeed + ' G');
  329. $('#netWork_allInputSpeed').text(netWork.allInputSpeed + ' G');
  330. $('#netWork_currentOutSpeed').text(netWork.currentOutSpeed + ' KB/s');
  331. $('#netWork_currentInputSpeed').text(netWork.currentInputSpeed + ' KB/s');
  332. currentOutSpeed.shift();
  333. currentInputSpeed.shift();
  334. currentOutSpeed.push(netWork.currentOutSpeed);
  335. currentInputSpeed.push(netWork.currentInputSpeed);
  336. chartTime = data.chartTime;
  337. myChart.setOption(chartOption()); // 加载图表
  338. //内存
  339. var memory = data.memory;
  340. var memPercent = memory.memory.usage_rate;
  341. var memCachedPercent = memory.cache.usage_rate;
  342. var memRealPercent = memory.real.usage_rate;
  343. var hardDiskUsageRate = data.hardDisk.usage_rate;
  344. memPercent = memPercent.toFixed(0);
  345. memCachedPercent = memCachedPercent.toFixed(0);
  346. memRealPercent = memRealPercent.toFixed(0);
  347. hardDiskUsageRate = hardDiskUsageRate.toFixed(0);
  348. hdSpeed = [100 - hardDiskUsageRate, hardDiskUsageRate];
  349. memTotal = [100 - memPercent, memPercent];
  350. memCached = [100 - memCachedPercent, memCachedPercent];
  351. memRealUsed = [100 - memRealPercent, memRealPercent];
  352. schedule.setOption(scheduleOption()); // 加载图表
  353. } else {
  354. rfAffirm(data.message);
  355. }
  356. }
  357. });
  358. }
  359. </script>
粤ICP备19079148号