export default async function initCloudrain() { let timeid = window.setInterval(loadJobStatus, 15000); $(document).ready(loadJobStatus); function loadJobStatus() { $(".job-status").each((index, job) => { const ID = job.dataset.jobid; const repoPath = job.dataset.repopath; // const computeResource = job.dataset.resource const versionname = job.dataset.version 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 $('#duration-'+ID).text(duration) 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('调试').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)){ $('#ai-debug-'+ID).removeClass('disabled').addClass('blue').text('再次调试').css("margin","0") } if(["RUNNING","WAITING"].includes(status)){ $('#ai-stop-'+ID).removeClass('disabled').addClass('blue') } if(["CREATING","STOPPING","STARTING","STOPPED","FAILED","START_FAILED","SUCCEEDED","COMPLETED"].includes(status)){ $('#ai-stop-'+ID).removeClass('blue').addClass('disabled') } if(["STOPPED","FAILED","START_FAILED","KILLED","COMPLETED","SUCCEEDED"].includes(status)){ $('#ai-delete-'+ID).removeClass('disabled').addClass('blue') }else{ $('#ai-delete-'+ID).removeClass('blue').addClass('disabled') } }).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){ 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){ $.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"){ $('#ai-debug-'+ID).removeClass('disabled').addClass('blue').text("再次调试").css("margin","0") $('#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 stopDebug(ID,repoPath) }) 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) }).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){ console.log("getModelInfo") $.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("调试").css("margin","0 1rem") } }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_debug').click(function() { const ID = this.dataset.jobid const repoPath = this.dataset.repopath const redirect_to = this.dataset.linkpath debugAgain(ID,repoPath,redirect_to) }) }