page2.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. async function apiGetRetry(url, retry = false) {
  2. try {
  3. const res = await fetch(url);
  4. if (!res.ok) {
  5. throw new Error("HTTP " + res.status);
  6. }
  7. const text = await res.text();
  8. if (!text || text.trim() === "") {
  9. throw new Error("empty response");
  10. }
  11. return text.trim();
  12. } catch (e) {
  13. console.log("GET failed:", url, e.message);
  14. if (retry) {
  15. setTimeout(() => apiGetRetry(url, true), 3000);
  16. }
  17. throw e;
  18. }
  19. }
  20. function getNetInfo1() {
  21. document.getElementById("text1").innerText = "";
  22. apiGetRetry("/api/network/interfaces")
  23. .then(data => {
  24. document.getElementById("text1").innerText = data;
  25. })
  26. .catch(() => {
  27. document.getElementById("text1").innerText = "获取失败";
  28. });
  29. }
  30. function getNetInfo2() {
  31. document.getElementById("text2").innerText = "";
  32. apiGetRetry("/api/network/routes")
  33. .then(data => {
  34. document.getElementById("text2").innerText = data;
  35. })
  36. .catch(() => {
  37. document.getElementById("text2").innerText = "获取失败";
  38. });
  39. }
  40. function getNetInfo3() {
  41. document.getElementById("text3").innerText = "";
  42. apiGetRetry("/api/network/dns")
  43. .then(data => {
  44. document.getElementById("text3").innerText = data;
  45. })
  46. .catch(() => {
  47. document.getElementById("text3").innerText = "获取失败";
  48. });
  49. }
  50. let netLogLevel = "";
  51. function setNetLogLevel() {
  52. const level = logLevel.value;
  53. fetch("/api/network/loglevel", {
  54. method: "POST",
  55. headers: {"Content-Type": "application/json"},
  56. body: JSON.stringify({level})
  57. })
  58. .then(async r => {
  59. if (!r.ok) throw new Error(await r.text());
  60. netLogLevel = level;
  61. })
  62. .catch(e => {
  63. logLevel.value = netLogLevel;
  64. });
  65. }
  66. function getNetLogLevel() {
  67. fetch("/api/network/loglevel")
  68. .then(async r => {
  69. if (!r.ok) throw new Error(await r.text());
  70. return r.json();
  71. })
  72. .then(d => {
  73. netLogLevel = d.log_level;
  74. logLevel.value = d.log_level;
  75. })
  76. .catch(e => {
  77. netLogLevel = "";
  78. logLevel.value = "";
  79. });
  80. }
  81. function downloadNetLogFile() {
  82. const btn = event.currentTarget;
  83. btn.disabled = true;
  84. fetch("/api/network/logfile")
  85. .then(async r => {
  86. if (!r.ok) {
  87. throw new Error("HTTP " + r.status);
  88. }
  89. const disposition = r.headers.get("Content-Disposition");
  90. let filename = "network.log.tar.gz";
  91. if (disposition) {
  92. const match = disposition.match(/filename="?([^";]+)"?/);
  93. if (match) {
  94. filename = match[1];
  95. }
  96. }
  97. return {
  98. blob: await r.blob(),
  99. filename
  100. };
  101. })
  102. .then(({ blob, filename }) => {
  103. const url = URL.createObjectURL(blob);
  104. const a = document.createElement("a");
  105. a.href = url;
  106. a.download = filename;
  107. document.body.appendChild(a);
  108. a.click();
  109. a.remove();
  110. setTimeout(() => {
  111. URL.revokeObjectURL(url);
  112. }, 1000);
  113. alert("下载成功");
  114. })
  115. .catch(e => {
  116. console.error("download failed:", e);
  117. alert("下载失败: " + e.message);
  118. })
  119. .finally(() => {
  120. btn.disabled = false;
  121. btn.textContent = "下载";
  122. });
  123. }
  124. function restartNetService() {
  125. if (!confirm("确定重启联网服务吗?")) {
  126. return;
  127. }
  128. const btn = event.currentTarget;
  129. btn.disabled = true;
  130. fetch("/api/network/restart", {
  131. method: "POST"
  132. })
  133. .then(async r => {
  134. if (!r.ok) {
  135. throw new Error(await r.text());
  136. }
  137. logLevel.value = "info";
  138. netLogLevel = logLevel.value;
  139. alert("重启成功");
  140. })
  141. .catch(e => {
  142. console.error("restart failed:", e);
  143. alert("重启失败: " + e.message);
  144. })
  145. .finally(() => {
  146. btn.disabled = false;
  147. });
  148. }
  149. let netStatusTimer = null;
  150. function getNetworkStatus() {
  151. fetch("/api/network/status")
  152. .then(async r => {
  153. if (!r.ok) {
  154. throw new Error("HTTP " + r.status);
  155. }
  156. return r.json();
  157. })
  158. .then(data => {
  159. document.getElementById("var1").textContent = data.var1 || "--";
  160. document.getElementById("var2").textContent = data.var2 || "--";
  161. document.getElementById("var3").textContent = data.var3 || "--";
  162. document.getElementById("var4").textContent = data.var4 || "--";
  163. document.getElementById("var5").textContent = data.var5 || "--";
  164. })
  165. .catch(e => {
  166. console.error("network status failed:", e);
  167. document.getElementById("var1").textContent = "--";
  168. document.getElementById("var2").textContent = "--";
  169. document.getElementById("var3").textContent = "--";
  170. document.getElementById("var4").textContent = "--";
  171. document.getElementById("var5").textContent = "--";
  172. });
  173. }
  174. function startNetStatusRefresh() {
  175. if (netStatusTimer) {
  176. return;
  177. }
  178. getNetworkStatus();
  179. netStatusTimer = setInterval(() => {
  180. getNetworkStatus();
  181. }, 5000);
  182. }
  183. function stopNetStatusRefresh() {
  184. if (netStatusTimer) {
  185. clearInterval(netStatusTimer);
  186. netStatusTimer = null;
  187. }
  188. }
  189. function initPage2() {
  190. startNetStatusRefresh();
  191. getNetInfo1();
  192. getNetInfo2();
  193. getNetInfo3();
  194. getNetLogLevel();
  195. connectLog("yfkj-networkd.service", "text4");
  196. }
  197. function exitPage2() {
  198. stopNetStatusRefresh();
  199. disconnectLog();
  200. }