export default async function initCloudrain() { function paddingZeros(str, len) { str = str.toString(); if (str.length < len) { str = new Array(len - str.length).fill('0').join('') + str; } return str; } function timeFormat(date) { return `${date.getFullYear()}-${paddingZeros(date.getMonth() + 1, 2)}-${paddingZeros(date.getDate(), 2)} ${paddingZeros(date.getHours(), 2)}:${paddingZeros(date.getMinutes(), 2)}:${paddingZeros(date.getSeconds(), 2)}`; } let debug_button = $(".cloudbrain_debug").data("debug"); let debug_again_button = $(".cloudbrain_debug").data("debug-again"); let timeid = window.setInterval(loadJobStatus, 15000); let timeidShow = window.setInterval(loadShowJobStatus, 15000); $(document).ready(loadJobStatus); $(document).ready(loadShowJobStatus); function loadJobStatus() { $(".job-status").each((index, job) => { const ID = job.dataset.jobid; if (!ID) return; const repoPath = job.dataset.repopath; // const computeResource = job.dataset.resource const versionname = job.dataset.version; const bootfile = job.dataset.bootfile; const status_text = $(`#${ID}-text`).text(); const finalState = [ "STOPPED", "CREATE_FAILED", "UNAVAILABLE", "DELETED", "RESIZE_FAILED", "SUCCEEDED", "IMAGE_FAILED", "SUBMIT_FAILED", "DELETE_FAILED", "KILLED", "COMPLETED", "FAILED", "CANCELED", "LOST", "START_FAILED", "SUBMIT_MODEL_FAILED", "DEPLOY_SERVICE_FAILED", "CHECK_FAILED", ]; if (finalState.includes(status_text)) { return; } // const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' $.get( `/api/v1/repos/${repoPath}/${ID}?version_name=${versionname}`, (data) => { const ID = data.ID || data.JobID; const status = data.JobStatus; const duration = data.JobDuration; const aiCenter = data.AiCenter || '--' $("#duration-" + ID).text(duration); data.AiCenter != undefined && $("#cluster-" + ID).text(aiCenter); data.AiCenter != undefined && $("#" + versionname + "-ai_center").text(data.AiCenter); if (status != status_text) { $("#" + ID + "-icon") .removeClass() .addClass(status); $("#" + ID + "-text").text(status); finalState.includes(status) && $("#" + ID + "-stop") .removeClass("blue") .addClass("disabled"); } if (status === "RUNNING") { $("#ai-debug-" + ID) .removeClass("disabled") .addClass("blue") .text(debug_button) .css("margin", "0 1rem"); $("#model-image-" + ID) .removeClass("disabled") .addClass("blue"); } if (status !== "RUNNING") { // $('#model-debug-'+ID).removeClass('blue') // $('#model-debug-'+ID).addClass('disabled') $("#model-image-" + ID) .removeClass("blue") .addClass("disabled"); } if ( ["CREATING", "STOPPING", "WAITING", "STARTING"].includes(status) ) { $("#ai-debug-" + ID) .removeClass("blue") .addClass("disabled"); } if ( [ "STOPPED", "FAILED", "START_FAILED", "CREATE_FAILED", "SUCCEEDED", ].includes(status) ) { if (!bootfile) { $("#ai-debug-" + ID) .removeClass("disabled") .addClass("blue") .text(debug_again_button) .css("margin", "0"); } else { $("#ai-debug-" + ID).remove() } } if (["RUNNING", "WAITING"].includes(status)) { $("#ai-stop-" + ID) .removeClass("disabled") .addClass("blue"); } if ( [ "CREATING", "STOPPING", "STARTING", "STOPPED", "FAILED", "START_FAILED", "SUCCEEDED", "COMPLETED", "CREATE_FAILED", ].includes(status) ) { $("#ai-stop-" + ID) .removeClass("blue") .addClass("disabled"); } if ( [ "STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED", "CREATE_FAILED", ].includes(status) ) { $("#ai-delete-" + ID) .removeClass("disabled") .addClass("blue"); } else { $("#ai-delete-" + ID) .removeClass("blue") .addClass("disabled"); } } ).fail(function (err) { console.log(err); }); }); } function loadShowJobStatus() { $(".ui.accordion.border-according").each((index, job) => { const jobID = job.dataset.jobid; if (!jobID) return; const repoPath = job.dataset.repopath; const versionname = job.dataset.version; // ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED'] // if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED' // || job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED' // || job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') { // return // } let status = $(`#${versionname}-status-span`).text().trim(); if ( [ "IMAGE_FAILED", "SUBMIT_FAILED", "DELETE_FAILED", "KILLED", "COMPLETED", "FAILED", "CANCELED", "LOST", "START_FAILED", "SUCCEEDED", "STOPPED", "CREATE_FAILED", ].includes(status) ) { return; } let stopArray = [ "KILLED", "FAILED", "START_FAILED", "KILLING", "COMPLETED", "SUCCEEDED", "CREATE_FAILED", "STOPPED", ]; let deleteArray = [ "KILLED", "FAILED", "START_FAILED", "COMPLETED", "SUCCEEDED", "CREATE_FAILED", "STOPPED", ]; $.get( `/api/v1/repos/${repoPath}/${jobID}?version_name=${versionname}`, (data) => { $(`#${versionname}-duration-span`).text(data.JobDuration); $(`#${versionname}-status-span span`).text(data.JobStatus); $(`#${versionname}-status-span i`).attr("class", data.JobStatus); // detail status and duration data.StartTime !== undefined && data.StartTime > 0 && $("#" + versionname + "-startTime").text(timeFormat(new Date(data.StartTime * 1000))); $("#" + versionname + "-duration").text(data.JobDuration); $("#" + versionname + "-status").text(data.JobStatus); data.AiCenter != undefined && $("#" + versionname + "-ai_center").text(data.AiCenter); if (stopArray.includes(data.JobStatus)) { $("#" + versionname + "-stop").addClass("disabled"); } if (deleteArray.includes(data.JobStatus)) { $(`#${versionname}-delete`).removeClass("disabled"); $(`#${versionname}-delete`).addClass("blue"); } if (data.JobStatus === "COMPLETED") { $("#" + versionname + "-create-model") .removeClass("disabled") .addClass("blue"); } } ).fail(function (err) { console.log(err); }); }); } function assertDelete(obj, versionName, repoPath) { if (obj.style.color == "rgb(204, 204, 204)") { return; } else { const delId = obj.parentNode.id; let flag = 1; $(".ui.basic.modal") .modal({ onDeny: function () { flag = false; }, onApprove: function () { if (!versionName) { document.getElementById(delId).submit(); } else { deleteVersion(versionName, repoPath); } flag = true; }, onHidden: function () { if (flag == false) { $(".alert") .html("您已取消操作") .removeClass("alert-success") .addClass("alert-danger") .show() .delay(1500) .fadeOut(); } }, }) .modal("show"); } } function deleteVersion(versionName, repoPath) { const url = `/api/v1/repos/${repoPath}`; $.post(url, { version_name: versionName }, (data) => { if (data.StatusOK === 0 || data.Code === 0) { location.reload(); } }).fail(function (err) { console.log(err); }); } $(".ui.basic.ai_delete").click(function () { const repoPath = this.dataset.repopath; const versionName = this.dataset.version; if (repoPath && versionName) { assertDelete(this, versionName, repoPath); } else { assertDelete(this); } }); function stopDebug(ID, stopUrl,bootFile) { $.ajax({ type: "POST", url: stopUrl, data: $("#stopForm-" + ID).serialize(), success: function (res) { if (res.result_code === "0") { $("#" + ID + "-icon") .removeClass() .addClass(res.status); $("#" + ID + "-text").text(res.status); if (res.status === "STOPPED") { if (!bootFile) { $("#ai-debug-" + ID) .removeClass("disabled") .addClass("blue") .text(debug_again_button) .css("margin", "0"); } else { $("#ai-debug-" + ID).remove() } $("#ai-image-" + ID) .removeClass("blue") .addClass("disabled"); $("#ai-model-debug-" + ID) .removeClass("blue") .addClass("disabled"); $("#ai-delete-" + ID) .removeClass("disabled") .addClass("blue"); $("#ai-stop-" + ID) .removeClass("blue") .addClass("disabled"); } else { $("#ai-debug-" + ID) .removeClass("blue") .addClass("disabled"); $("#ai-stop-" + ID) .removeClass("blue") .addClass("disabled"); } } else { $(".alert") .html(res.error_msg) .removeClass("alert-success") .addClass("alert-danger") .show() .delay(2000) .fadeOut(); } }, error: function (res) { console.log(res); }, }); } $(".ui.basic.ai_stop").click(function () { const ID = this.dataset.jobid; const repoPath = this.dataset.repopath; const bootFile = this.dataset.bootfile stopDebug(ID, repoPath,bootFile); }); function stopVersion(version_name, ID, repoPath) { const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`; $.post(url, { version_name: version_name }, (data) => { if (data.StatusOK === 0) { $("#ai-stop-" + ID).removeClass("blue"); $("#ai-stop-" + ID).addClass("disabled"); refreshStatus(version_name, ID, repoPath); } }).fail(function (err) { console.log(err); }); } function refreshStatus(version_name, ID, repoPath) { const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}`; $.get(url, (data) => { $(`#${ID}-icon`).attr("class", data.JobStatus); // detail status and duration $(`#${ID}-text`).text(data.JobStatus); if ( [ "STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED", "CREATE_FAILED", ].includes(data.JobStatus) ) { $("#ai-delete-" + ID) .removeClass("disabled") .addClass("blue"); } }).fail(function (err) { console.log(err); }); } $(".ui.basic.ai_stop_version").click(function () { const ID = this.dataset.jobid; const repoPath = this.dataset.repopath; const versionName = this.dataset.version; stopVersion(versionName, ID, repoPath); }); function getModelInfo(repoPath, modelName, versionName, jobName) { $.get( `${repoPath}/modelmanage/show_model_info_api?name=${modelName}`, (data) => { if (data.length === 0) { $(`#${jobName}`).popup("toggle"); } else { let versionData = data.filter((item) => { return item.version === versionName; }); if (versionData.length == 0) { $(`#${jobName}`).popup("toggle"); } else { location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}`; } } } ); } $(".goto_modelmanage").click(function () { const repoPath = this.dataset.repopath; const modelName = this.dataset.modelname; const versionName = this.dataset.version; const jobName = this.dataset.jobname; getModelInfo(repoPath, modelName, versionName, jobName); }); function debugAgain(ID, debugUrl, redirect_to) { if ($("#" + ID + "-text").text() === "RUNNING") { window.open(debugUrl + "debug"); } else { $.ajax({ type: "POST", url: debugUrl + "restart?redirect_to=" + redirect_to, data: $("#debugAgainForm-" + ID).serialize(), success: function (res) { if (res["WechatRedirectUrl"]) { window.location.href = res["WechatRedirectUrl"]; } else if (res.result_code === "0") { if (res.id !== ID) { location.reload(); } else { $("#" + ID + "-icon") .removeClass() .addClass(res.status); $("#" + ID + "-text").text(res.status); $("#ai-debug-" + ID) .removeClass("blue") .addClass("disabled"); $("#ai-delete-" + ID) .removeClass("blue") .addClass("disabled"); $("#ai-debug-" + ID) .text(debug_button) .css("margin", "0 1rem"); } } else if (res.result_code == "2") { $(".ui.modal.debug-again-alert").modal("show"); } else { $(".alert") .html(res.error_msg) .removeClass("alert-success") .addClass("alert-danger") .show() .delay(3000) .fadeOut(); } }, error: function (res) { console.log(res); }, }); } } $(".ui.basic.ai_debug").click(function () { const ID = this.dataset.jobid; const repoPath = this.dataset.repopath; const redirect_to = this.dataset.linkpath; debugAgain(ID, repoPath, redirect_to); }); } function userSearchControll() { if ($("#userCloud").length === 0) { return; } const params = new URLSearchParams(window.location.search); let cluster; if ($(".cloudbrain_debug").length === 1) { if (!params.get("cluster")) { cluster = $(".cloudbrain_debug").data("all-cluster"); } else { if (params.get("cluster") === "resource_cluster_c2net") { cluster = $(".cloudbrain_debug").data("cluster-c2net"); } else { cluster = $(".cloudbrain_debug").data("cluster-openi"); } } } let jobType; if ($(".cloudbrain_debug").length === 1) { if (!params.get("jobType")) { jobType = $(".cloudbrain_debug").data("allTask"); } else { if (params.get("jobType") === "DEBUG") { jobType = $(".cloudbrain_debug").data("debug-task"); } else if (params.get("jobType") === "TRAIN") { jobType = $(".cloudbrain_debug").data("train-task"); } else if (params.get("jobType") === "INFERENCE") { jobType = $(".cloudbrain_debug").data("inference-task"); } else { jobType = $(".cloudbrain_debug").data("benchmark-task"); } } } let aiCenter = !params.get("aiCenter") ? $(".cloudbrain_debug").data("all-aiCenter") : params.get("aiCenter"); let listType = !params.get("listType") ? $(".cloudbrain_debug").data("all-compute") : params.get("listType"); let jobStatus = !params.get("jobStatus") ? $(".cloudbrain_debug").data("all-status") : params.get("jobStatus").toUpperCase(); const dropdownValueArray = [cluster, aiCenter, jobType, listType, jobStatus]; $("#userCloud .default.text ").each(function (index, e) { index != 1 && $(e).text(dropdownValueArray[index]); }); } function AdaminSearchControll() { if ($("#adminCloud").length === 0) { return; } const params = new URLSearchParams(window.location.search); let cluster; if ($(".cloudbrain_debug").length === 1) { if (!params.get("cluster")) { cluster = $(".cloudbrain_debug").data("all-cluster"); } else { if (params.get("cluster") === "resource_cluster_c2net") { cluster = $(".cloudbrain_debug").data("cluster-c2net"); } else { cluster = $(".cloudbrain_debug").data("cluster-openi"); } } } let aiCenter = !params.get("aiCenter") ? $(".cloudbrain_debug").data("all-aiCenter") : params.get("aiCenter"); let jobType = !params.get("jobType") ? $(".cloudbrain_debug").data("all-task") : params.get("jobType"); let listType = !params.get("listType") ? $(".cloudbrain_debug").data("all-compute") : params.get("listType"); let jobStatus = !params.get("jobStatus") ? $(".cloudbrain_debug").data("all-status") : params.get("jobStatus").toUpperCase(); const dropdownValueArray = [cluster, aiCenter, jobType, listType, jobStatus]; $("#adminCloud .default.text ").each(function (index, e) { index != 1 && $(e).text(dropdownValueArray[index]); }); } userSearchControll(); AdaminSearchControll(); $(".message .close").on("click", function () { $(this).closest(".message").transition("fade"); });