function apiGetRetry(url, retry) { if (retry === undefined) { retry = false; } return fetch(url) .then(function (res) { if (!res.ok) { throw new Error("HTTP " + res.status); } return res.text(); }) .then(function (text) { if (!text || text.trim() === "") { throw new Error("empty response"); } return text.trim(); }) .catch(function (e) { console.log("GET failed:", url, e.message); if (retry) { setTimeout(function () { return apiGetRetry(url, true); }, 3000); } throw e; }); } function getNetInfo1() { setText("text1", "", "page2"); apiGetRetry("/api/network/interfaces") .then(function (data) { setText("text1", data, "page2"); }) .catch(function () { setText("text1", "获取失败", "page2"); }); } function getNetInfo2() { setText("text2", "", "page2"); apiGetRetry("/api/network/routes") .then(function (data) { setText("text2", data, "page2"); }) .catch(function () { setText("text2", "获取失败", "page2"); }); } function getNetInfo3() { setText("text3", "", "page2"); apiGetRetry("/api/network/dns") .then(function (data) { setText("text3", data, "page2"); }) .catch(function () { setText("text3", "获取失败", "page2"); }); } var netLogLevel = ""; function setNetLogLevel() { var level = logLevel.value; fetch("/api/network/loglevel", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ level: level }), }) .then(function (r) { if (!r.ok) { return r.text().then(function (t) { throw new Error(t); }); } netLogLevel = level; }) .catch(function (e) { logLevel.value = netLogLevel; }); } function getNetLogLevel() { fetch("/api/network/loglevel") .then(function (r) { if (!r.ok) { return r.text().then(function (t) { throw new Error(t); }); } return r.json(); }) .then(function (d) { netLogLevel = d.log_level; logLevel.value = d.log_level; }) .catch(function (e) { netLogLevel = ""; logLevel.value = ""; }); } function downloadNetLogFile(event) { var btn = event.currentTarget; btn.disabled = true; fetch("/api/network/logfile") .then(function (r) { if (!r.ok) { throw new Error("HTTP " + r.status); } var disposition = r.headers.get("Content-Disposition"); var filename = "network.log.tar.gz"; if (disposition) { var match = disposition.match(/filename="?([^";]+)"?/); if (match) { filename = match[1]; } } return r.blob().then(function (blob) { return { blob: blob, filename: filename }; }); }) .then(function (res) { downloadBlobFile(res.blob, res.filename); alert("下载成功"); }) .catch(function (e) { console.error("download failed:", e); alert("下载失败: " + e.message); }) .finally(function () { btn.disabled = false; btn.textContent = "下载"; }); } function restartNetService(event) { if (!confirm("确定重启联网服务吗?")) { return; } var btn = event.currentTarget; btn.disabled = true; fetch("/api/network/restart", { method: "POST", }) .then(function (r) { if (!r.ok) { return r.text().then(function (t) { throw new Error(t); }); } alert("重启成功"); }) .catch(function (e) { console.error("restart failed:", e); alert("重启失败: " + e.message); }) .finally(function () { btn.disabled = false; }); } var netStatusTimer = null; function getNetworkStatus() { fetch("/api/network/status") .then(function (r) { if (!r.ok) { throw new Error("HTTP " + r.status); } return r.json(); }) .then(function (data) { setText("var1", data.var1, "page2"); setText("var2", data.var2, "page2"); setText("var3", data.var3, "page2"); setText("var4", data.var4, "page2"); setText("var5", data.var5, "page2"); }) .catch(function (e) { console.error("getNetworkStatus() failed:", e); ["var1", "var2", "var3", "var4", "var5"].forEach(function (id) { return setText(id, null, "page2"); }); }); getNetLogLevel(); } function startNetStatusRefresh() { if (netStatusTimer) { return; } getNetworkStatus(); netStatusTimer = setInterval(function () { getNetworkStatus(); }, 5000); } function stopNetStatusRefresh() { if (netStatusTimer) { clearInterval(netStatusTimer); netStatusTimer = null; } } function initPage2() { startNetStatusRefresh(); getNetInfo1(); getNetInfo2(); getNetInfo3(); connectLog("yfkj-networkd.service", "text4"); } function exitPage2() { stopNetStatusRefresh(); disconnectLog(); }