page1.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. let cpuChart = null;
  2. let memChart = null;
  3. let diskChart = null;
  4. let sysStatusTimer = null;
  5. let resizeHandler = null;
  6. let page1Active = false;
  7. function getSystemInfo(){
  8. fetch("/api/system/info")
  9. .then(r=>{
  10. if(!r.ok) throw new Error("HTTP "+r.status);
  11. return r.json();
  12. })
  13. .then(d=>{
  14. cpuChart.setOption({
  15. graphic:[{
  16. type:"text",
  17. left:"center",
  18. top:"75%",
  19. style:{
  20. text:`${d.cpu_cores||"--"}核 ${d.cpu_freq||"--"}MHz 温度${d.cpu_temp||"--"}`,
  21. fill:"#aaa",
  22. fontSize:15
  23. }
  24. }],
  25. series:[{data:[{value:d.cpu_usage}]}]
  26. });
  27. memChart.setOption({
  28. graphic:[{
  29. type:"text",
  30. left:"center",
  31. top:"75%",
  32. style:{
  33. text:`${d.mem_used||"--"} / ${d.mem_total||"--"}`,
  34. fill:"#aaa",
  35. fontSize:15
  36. }
  37. }],
  38. series:[{data:[{value:d.mem_percent}]}]
  39. });
  40. diskChart.setOption({
  41. title:{
  42. text:`${d.disk_percent}%`,
  43. subtext:`${d.disk_used||"--"} / ${d.disk_total||"--"}`,
  44. left:"center",
  45. top:"38%",
  46. textStyle:{
  47. fontSize:38,
  48. fontWeight:"bold"
  49. },
  50. subtextStyle:{
  51. fontSize:15
  52. }
  53. },
  54. series:[{
  55. data:[
  56. {value:d.disk_percent,name:"已使用"},
  57. {value:100-d.disk_percent,name:"剩余"}
  58. ]
  59. }]
  60. });
  61. })
  62. .catch(e=>console.error("system info failed:",e));
  63. }
  64. function gaugeOption(){
  65. return {
  66. series:[{
  67. type:"gauge",
  68. radius:"95%",
  69. center:["50%","55%"],
  70. min:0,
  71. max:100,
  72. startAngle:210,
  73. endAngle:-30,
  74. axisLine:{
  75. lineStyle:{
  76. width:22
  77. }
  78. },
  79. progress:{
  80. show:true,
  81. width:22
  82. },
  83. pointer:{show:false},
  84. axisTick:{show:false},
  85. splitLine:{show:false},
  86. axisLabel:{show:false},
  87. detail:{
  88. fontSize:42,
  89. fontWeight:"bold",
  90. offsetCenter:[0,"0%"],
  91. formatter:"{value}%"
  92. },
  93. title:{show:false},
  94. data:[{value:0}]
  95. }]
  96. };
  97. }
  98. function getLoadInfo(){
  99. fetch("/api/system/loadAverage")
  100. .then(async r => {
  101. if (!r.ok) {
  102. throw new Error("HTTP " + r.status);
  103. }
  104. return r.json();
  105. })
  106. .then(data => {
  107. if(!page1Active){
  108. return;
  109. }
  110. document.getElementById("load1m").textContent = data.load1m || "--";
  111. document.getElementById("load5m").textContent = data.load5m || "--";
  112. document.getElementById("load15m").textContent = data.load15m || "--";
  113. document.getElementById("runQueue").textContent = data.runQueue || "--";
  114. })
  115. .catch(e => {
  116. if(!page1Active){
  117. return;
  118. }
  119. console.error("network status failed:", e);
  120. document.getElementById("load1m").textContent = "--";
  121. document.getElementById("load5m").textContent = "--";
  122. document.getElementById("load15m").textContent = "--";
  123. document.getElementById("runQueue").textContent = "--";
  124. });
  125. }
  126. function getServiceInfo(){
  127. fetch("/api/system/serviceStatus")
  128. .then(r => {
  129. if (!r.ok) {
  130. throw new Error("HTTP " + r.status);
  131. }
  132. return r.json();
  133. })
  134. .then(data => {
  135. if(!page1Active){
  136. return;
  137. }
  138. document.getElementById("var1").textContent = data.var1 || "--";
  139. document.getElementById("var2").textContent = data.var2 || "--";
  140. document.getElementById("var3").textContent = data.var3 || "--";
  141. document.getElementById("var4").textContent = data.var4 || "--";
  142. document.getElementById("var5").textContent = data.var5 || "--";
  143. document.getElementById("var6").textContent = data.var6 || "--";
  144. document.getElementById("var7").textContent = data.var7 || "--";
  145. document.getElementById("var8").textContent = data.var8 || "--";
  146. document.getElementById("var11").textContent = data.var11 || "--";
  147. document.getElementById("var22").textContent = data.var22 || "--";
  148. document.getElementById("var33").textContent = data.var33 || "--";
  149. document.getElementById("var44").textContent = data.var44 || "--";
  150. document.getElementById("var55").textContent = data.var55 || "--";
  151. document.getElementById("var66").textContent = data.var66 || "--";
  152. document.getElementById("var77").textContent = data.var77 || "--";
  153. document.getElementById("var88").textContent = data.var88 || "--";
  154. })
  155. .catch(e => {
  156. if(!page1Active){
  157. return;
  158. }
  159. console.error("getAllServiceStatus() failed:", e);
  160. document.getElementById("var1").textContent = "--";
  161. document.getElementById("var2").textContent = "--";
  162. document.getElementById("var3").textContent = "--";
  163. document.getElementById("var4").textContent = "--";
  164. document.getElementById("var5").textContent = "--";
  165. document.getElementById("var6").textContent = "--";
  166. document.getElementById("var7").textContent = "--";
  167. document.getElementById("var8").textContent = "--";
  168. document.getElementById("var11").textContent = "--";
  169. document.getElementById("var22").textContent = "--";
  170. document.getElementById("var33").textContent = "--";
  171. document.getElementById("var44").textContent = "--";
  172. document.getElementById("var55").textContent = "--";
  173. document.getElementById("var66").textContent = "--";
  174. document.getElementById("var77").textContent = "--";
  175. document.getElementById("var88").textContent = "--";
  176. });
  177. }
  178. function startSysStatusRefresh(){
  179. if(sysStatusTimer) return;
  180. getSystemInfo();
  181. getLoadInfo();
  182. getServiceInfo();
  183. sysStatusTimer = setInterval(() => {
  184. getSystemInfo();
  185. getLoadInfo();
  186. getServiceInfo();
  187. }, 5000);
  188. }
  189. function stopSysStatusRefresh(){
  190. if(sysStatusTimer){
  191. clearInterval(sysStatusTimer);
  192. sysStatusTimer=null;
  193. }
  194. }
  195. function resizeSysCharts(){
  196. cpuChart?.resize();
  197. memChart?.resize();
  198. diskChart?.resize();
  199. }
  200. function initPage1(){
  201. page1Active = true;
  202. cpuChart=echarts.init(document.getElementById("cpu-chart"));
  203. memChart=echarts.init(document.getElementById("mem-chart"));
  204. diskChart=echarts.init(document.getElementById("disk-chart"));
  205. cpuChart.setOption(gaugeOption());
  206. memChart.setOption(gaugeOption());
  207. diskChart.setOption({
  208. title:{
  209. text:"0%",
  210. subtext:"-- / --",
  211. left:"center",
  212. top:"38%",
  213. textStyle:{
  214. fontSize:38,
  215. fontWeight:"bold"
  216. },
  217. subtextStyle:{
  218. fontSize:15
  219. }
  220. },
  221. series:[{
  222. type:"pie",
  223. radius:["65%","85%"],
  224. label:{show:false},
  225. data:[
  226. {value:0,name:"已使用"},
  227. {value:100,name:"剩余"}
  228. ]
  229. }]
  230. });
  231. startSysStatusRefresh();
  232. resizeHandler = resizeSysCharts;
  233. window.addEventListener(
  234. "resize",
  235. resizeHandler
  236. );
  237. setTimeout(()=>{
  238. resizeSysCharts();
  239. },100);
  240. }
  241. function exitPage1(){
  242. page1Active = false;
  243. stopSysStatusRefresh();
  244. if(resizeHandler){
  245. window.removeEventListener(
  246. "resize",
  247. resizeHandler
  248. );
  249. resizeHandler=null;
  250. }
  251. cpuChart?.dispose();
  252. memChart?.dispose();
  253. diskChart?.dispose();
  254. cpuChart=null;
  255. memChart=null;
  256. diskChart=null;
  257. }