page2.js 5.7 KB

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