|
@@ -1,3 +1,204 @@
|
|
|
|
|
+let appInsLogLevel = "";
|
|
|
|
|
+function setAppInstallLogLevel() {
|
|
|
|
|
+ const level = logLevel.value;
|
|
|
|
|
+
|
|
|
|
|
+ fetch("/api/app-install/loglevel", {
|
|
|
|
|
+ method: "POST",
|
|
|
|
|
+ headers: {"Content-Type": "application/json"},
|
|
|
|
|
+ body: JSON.stringify({level})
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(async r => {
|
|
|
|
|
+ if (!r.ok) throw new Error(await r.text());
|
|
|
|
|
+ appInsLogLevel = level;
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ logLevel.value = appInsLogLevel;
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getAppInstallLevel() {
|
|
|
|
|
+ fetch("/api/app-install/loglevel")
|
|
|
|
|
+ .then(async r => {
|
|
|
|
|
+ if (!r.ok) throw new Error(await r.text());
|
|
|
|
|
+ return r.json();
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(d => {
|
|
|
|
|
+ appInsLogLevel = d.log_level;
|
|
|
|
|
+ logLevel.value = d.log_level;
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ appInsLogLevel = "";
|
|
|
|
|
+ logLevel.value = "";
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function downloadAppInstallLogFile(event) {
|
|
|
|
|
+ const btn = event.currentTarget;
|
|
|
|
|
+ btn.disabled = true;
|
|
|
|
|
+
|
|
|
|
|
+ fetch("/api/app-install/logfile")
|
|
|
|
|
+ .then(async r => {
|
|
|
|
|
+ if (!r.ok) {
|
|
|
|
|
+ throw new Error("HTTP " + r.status);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const disposition = r.headers.get("Content-Disposition");
|
|
|
|
|
+ let filename = "app-install.log.tar.gz";
|
|
|
|
|
+ if (disposition) {
|
|
|
|
|
+ const match = disposition.match(/filename="?([^";]+)"?/);
|
|
|
|
|
+ if (match) {
|
|
|
|
|
+ filename = match[1];
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ blob: await r.blob(),
|
|
|
|
|
+ filename
|
|
|
|
|
+ };
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(({ blob, filename }) => {
|
|
|
|
|
+ const url = URL.createObjectURL(blob);
|
|
|
|
|
+
|
|
|
|
|
+ const a = document.createElement("a");
|
|
|
|
|
+ a.href = url;
|
|
|
|
|
+ a.download = filename;
|
|
|
|
|
+
|
|
|
|
|
+ document.body.appendChild(a);
|
|
|
|
|
+ a.click();
|
|
|
|
|
+ a.remove();
|
|
|
|
|
+
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ URL.revokeObjectURL(url);
|
|
|
|
|
+ }, 1000);
|
|
|
|
|
+
|
|
|
|
|
+ alert("下载成功");
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ console.error("download failed:", e);
|
|
|
|
|
+ alert("下载失败: " + e.message);
|
|
|
|
|
+ })
|
|
|
|
|
+ .finally(() => {
|
|
|
|
|
+ btn.disabled = false;
|
|
|
|
|
+ btn.textContent = "下载";
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function restartAppInstallService(event) {
|
|
|
|
|
+ if (!confirm("确定重启应该管理服务吗?")) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const btn = event.currentTarget;
|
|
|
|
|
+ btn.disabled = true;
|
|
|
|
|
+
|
|
|
|
|
+ fetch("/api/app-install/restart", {
|
|
|
|
|
+ method: "POST"
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(async r => {
|
|
|
|
|
+ if (!r.ok) {
|
|
|
|
|
+ throw new Error(await r.text());
|
|
|
|
|
+ }
|
|
|
|
|
+ logLevel.value = "info";
|
|
|
|
|
+ appInsLogLevel = logLevel.value;
|
|
|
|
|
+ disconnectLog();
|
|
|
|
|
+ connectLog("yfkj-app-install.service", "text1");
|
|
|
|
|
+ alert("重启成功");
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ console.error("restart failed:", e);
|
|
|
|
|
+ alert("重启失败: " + e.message);
|
|
|
|
|
+ })
|
|
|
|
|
+ .finally(() => {
|
|
|
|
|
+ btn.disabled = false;
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let appInsStatusTimer = null;
|
|
|
|
|
+function getAppInstallStatus() {
|
|
|
|
|
+ fetch("/api/app-install/status")
|
|
|
|
|
+ .then(async r => {
|
|
|
|
|
+ if (!r.ok) {
|
|
|
|
|
+ throw new Error("HTTP " + r.status);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return r.json();
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(data => {
|
|
|
|
|
+ [
|
|
|
|
|
+ "avar1", "avar2", "avar3", "avar4",
|
|
|
|
|
+ "bvar1", "bvar2", "bvar3", "bvar4", "bvar5",
|
|
|
|
|
+ "cvar1", "cvar2", "cvar3", "cvar4", "cvar5"
|
|
|
|
|
+ ].forEach(id => {
|
|
|
|
|
+ setText(id, data[id], "page6");
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ updateAppInstallButtons(Number(data.state));
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ console.error("getAppInstallStatus() failed:", e);
|
|
|
|
|
+
|
|
|
|
|
+ [
|
|
|
|
|
+ "avar1", "avar2", "avar3", "avar4",
|
|
|
|
|
+ "bvar1", "bvar2", "bvar3", "bvar4", "bvar5",
|
|
|
|
|
+ "cvar1", "cvar2", "cvar3", "cvar4", "cvar5"
|
|
|
|
|
+ ].forEach(id => {
|
|
|
|
|
+ setText(id, null, "page6");
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ updateAppInstallButtons(-1);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ getAppInstallLevel();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function startAppInstallStatusRefresh() {
|
|
|
|
|
+ if (appInsStatusTimer) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ getAppInstallStatus();
|
|
|
|
|
+
|
|
|
|
|
+ appInsStatusTimer = setInterval(() => {
|
|
|
|
|
+ getAppInstallStatus();
|
|
|
|
|
+ }, 5000);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function stopAppInstallStatusRefresh() {
|
|
|
|
|
+ if (appInsStatusTimer) {
|
|
|
|
|
+ clearInterval(appInsStatusTimer);
|
|
|
|
|
+ appInsStatusTimer = null;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function updateAppInstallButtons(state) {
|
|
|
|
|
+ switch (state) {
|
|
|
|
|
+ case 0: // 无安装包, 等待上传
|
|
|
|
|
+ setBtnStatus("btn1", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn2", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn3", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn4", false, "page6")
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 1: // 有安装包, 未安装时
|
|
|
|
|
+ setBtnStatus("btn1", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn2", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn3", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn4", false, "page6")
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2: // 有安装包, 已安装时
|
|
|
|
|
+ setBtnStatus("btn1", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn2", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn3", false, "page6")
|
|
|
|
|
+ setBtnStatus("btn4", true, "page6")
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ setBtnStatus("btn1", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn2", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn3", true, "page6")
|
|
|
|
|
+ setBtnStatus("btn4", true, "page6")
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
let userAppUploading = false;
|
|
let userAppUploading = false;
|
|
|
|
|
|
|
|
function onBtn1Click() {
|
|
function onBtn1Click() {
|
|
@@ -68,7 +269,11 @@ function uploadUserAppFile(input) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function initPage6() {
|
|
function initPage6() {
|
|
|
|
|
+ startAppInstallStatusRefresh()
|
|
|
|
|
+ connectLog("yfkj-app-install.service", "text1");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function exitPage6() {
|
|
function exitPage6() {
|
|
|
|
|
+ stopAppInstallStatusRefresh()
|
|
|
|
|
+ disconnectLog();
|
|
|
}
|
|
}
|