|
|
@@ -0,0 +1,489 @@ |
|
|
|
<style> |
|
|
|
.el-pagination.is-background .el-pager li:not(.disabled).active { |
|
|
|
background-color: #5bb973 !important; |
|
|
|
color: #FFF !important; |
|
|
|
} |
|
|
|
/* .el-pagination.is-background .el-pager li.active { |
|
|
|
color: #fff; |
|
|
|
cursor: default; |
|
|
|
} */ |
|
|
|
.el-pagination.is-background .el-pager li:hover { |
|
|
|
color: #5bb973 !important; |
|
|
|
} |
|
|
|
/* .el-pagination.is-background .el-pager li:not(.disabled):hover { |
|
|
|
color: #5bb973; |
|
|
|
} |
|
|
|
.el-pagination.is-background .el-pager li:not(.disabled).active:hover { |
|
|
|
background-color: #5bb973; |
|
|
|
color: #FFF; |
|
|
|
} */ |
|
|
|
</style> |
|
|
|
{{template "base/head" .}} |
|
|
|
<!-- 弹窗 --> |
|
|
|
<div id="mask"> |
|
|
|
<div id="loadingPage"> |
|
|
|
<div class="rect1"></div> |
|
|
|
<div class="rect2"></div> |
|
|
|
<div class="rect3"></div> |
|
|
|
<div class="rect4"></div> |
|
|
|
<div class="rect5"></div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 提示框 --> |
|
|
|
<div class="alert"></div> |
|
|
|
<div class="admin user"> |
|
|
|
{{template "admin/navbar" .}} |
|
|
|
<div class="ui container" style="width: 80%;"> |
|
|
|
{{template "base/alert" .}} |
|
|
|
|
|
|
|
<div class="ui grid" > |
|
|
|
<div class="row" style="border: 1px solid #d4d4d5;margin-top: 15px;padding-top: 0;"> |
|
|
|
<div class="ui attached segment"> |
|
|
|
<form class="ui form ignore-dirty" style="max-width: 90%"> |
|
|
|
<div class="ui fluid action input"> |
|
|
|
<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus> |
|
|
|
<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button> |
|
|
|
</div> |
|
|
|
</form> |
|
|
|
</div> |
|
|
|
<div class="ui six wide column" style="margin: 1rem 0;" id="adminCloud"> |
|
|
|
<div class="ui selection dropdown" style="min-width: 10em;min-height:2.6em;border-radius: .28571429rem;margin-right: 1em;padding: .67em 3.2em .7em 1em;"> |
|
|
|
<div class="default text" style="color: rgba(0,0,0,.87);">全部任务类型</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu"> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=&listType={{$.ListType}}&jobStatus={{$.JobStatus}}" data-value="全部任务类型">全部任务类型</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=DEBUG&listType={{$.ListType}}&jobStatus={{$.JobStatus}}" data-value="DEBUG">DEBUG</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=TRAIN&listType={{$.ListType}}&jobStatus={{$.JobStatus}}" data-value="TRAIN">TRAIN</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=INFERENCE&listType={{$.ListType}}&jobStatus={{$.JobStatus}}" data-value="INFERENCE">INFERENCE</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="ui selection dropdown" style="min-width: 10em;min-height:2.6em;border-radius: .28571429rem;margin-right: 1em;padding: .67em 3.2em .7em 1em;"> |
|
|
|
<div class="default text" style="color: rgba(0,0,0,.87);">全部计算资源</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu"> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType=&jobStatus={{$.JobStatus}}" data-value="全部计算资源">全部计算资源</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType=CPU/GPU&jobStatus={{$.JobStatus}}" data-value="CPU/GPU">CPU/GPU</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType=NPU&jobStatus={{$.JobStatus}}" data-value="NPU">NPU</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="ui selection dropdown" style="min-width: 10em;min-height:2.6em;border-radius: .28571429rem;margin-right: 1em;padding: .67em 3.2em .7em 1em;"> |
|
|
|
<div class="default text" style="color: rgba(0,0,0,.87);">全部状态</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu"> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=" data-value="all">全部状态</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=STARTING" data-value="CPU/GPU">STARTING</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=RESTARTING" data-value="NPU">RESTARTING </a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=START_FAILED" data-value="all">START_FAILED</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=STOPPING" data-value="CPU/GPU">STOPPING</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=STOPPED}" data-value="NPU">STOPPED</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=WAITING" data-value="all">WAITING</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=COMPLETED" data-value="CPU/GPU">COMPLETED</a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=FAILED" data-value="NPU">FAILED </a> |
|
|
|
<a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType={{$.JobType}}&listType={{$.ListType}}&jobStatus=OTHER" data-value="NPU">OTHER</a> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="ui ten wide column right aligned" style="margin: 1rem 0;"> |
|
|
|
<!-- <a href="/admin/cloudbrains/download"><i class="ri-download-line" style="display: inline-block;"></i>下载此报告</a> --> |
|
|
|
<a class="ui compact blue basic icon button" style="box-shadow: none !important; padding: 0.8em;" href="/admin/cloudbrains/download"><i class="ri-download-line middle aligned icon"></i>下载此报告</a> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="ui sixteen wide column"> |
|
|
|
<!-- 任务展示 --> |
|
|
|
<div class="dataset list"> |
|
|
|
|
|
|
|
<!-- 表头 --> |
|
|
|
<div class="ui grid stackable" style="background: #f0f0f0;;"> |
|
|
|
<div class="row"> |
|
|
|
<div class="two wide column padding0"> |
|
|
|
<span style="margin:0 6px">{{$.i18n.Tr "repo.cloudbrain_task"}}</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span style="margin:0 6px">任务类型</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0" style="width: 10% !important;"> |
|
|
|
<span>{{$.i18n.Tr "repo.modelarts.status"}}</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0" style="width: 10% !important;"> |
|
|
|
<span>{{$.i18n.Tr "repo.modelarts.createtime"}}</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span>{{$.i18n.Tr "repo.cloudbrain_status_runtime"}}</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span>{{$.i18n.Tr "repo.modelarts.computing_resources"}}</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>项目</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>云脑侧名称</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0" style="width: 17.5%!important;"> |
|
|
|
<span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
{{range .Tasks}} |
|
|
|
<div class="ui grid stackable item"> |
|
|
|
<div class="row"> |
|
|
|
|
|
|
|
<!-- 任务名 --> |
|
|
|
<div class="two wide column padding0"> |
|
|
|
{{if eq .JobType "DEBUG"}} |
|
|
|
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/cloudbrain/{{.JobID}}" title="{{.JobName}}" style="font-size: 14px;"> |
|
|
|
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> |
|
|
|
</a> |
|
|
|
{{else if eq .JobType "INFERENCE"}} |
|
|
|
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/inference-job/{{.JobID}}" title="{{.JobName}}" style="font-size: 14px;"> |
|
|
|
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> |
|
|
|
</a> |
|
|
|
{{else if eq .JobType "TRAIN"}} |
|
|
|
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/train-job/{{.JobID}}" title="{{.JobName}}" style="font-size: 14px;"> |
|
|
|
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> |
|
|
|
</a> |
|
|
|
{{else if eq .JobType "BENCHMARK"}} |
|
|
|
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/cloudbrain/benchmark/{{.JobID}}" title="{{.JobName}}" style="font-size: 14px;"> |
|
|
|
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> |
|
|
|
</a> |
|
|
|
{{end}} |
|
|
|
</div> |
|
|
|
<!-- 任务类型 --> |
|
|
|
|
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span style="font-size: 12px;">{{.JobType}} </span> |
|
|
|
</div> |
|
|
|
<!-- 任务状态 --> |
|
|
|
<div class="two wide column text center padding0" style="padding-left: 2.2rem !important; width: 10% !important;"> |
|
|
|
<span class="job-status" id="{{.JobID}}" data-repopath='{{.Repo.OwnerName}}/{{.Repo.Alias}}{{if eq .JobType "DEBUG"}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}{{else if eq .JobType "INFERENCE"}}/modelarts/inference-job{{else if eq .JobType "TRAIN"}}/modelarts/train-job{{else if eq .JobType "BENCHMARK"}}/cloudbrain{{end}}' data-jobid="{{.JobID}}" data-version="{{.VersionName}}"> |
|
|
|
<span><i id="{{.JobID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.JobID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<!-- 任务创建时间 --> |
|
|
|
<div class="two wide column text center padding0" style="width: 10% !important;"> |
|
|
|
<span style="font-size: 12px;" class="">{{TimeSinceUnix1 .Cloudbrain.CreatedUnix}}</span> |
|
|
|
</div> |
|
|
|
<!-- 任务运行时间 --> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span style="font-size: 12px;" id="duration-{{.JobID}}">{{if .TrainJobDuration}}{{.TrainJobDuration}}{{else}}--{{end}}</span> |
|
|
|
</div> |
|
|
|
<!-- 计算资源 --> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span style="font-size: 12px;">{{if .ComputeResource}}{{.ComputeResource}}{{else}}--{{end}}</span> |
|
|
|
</div> |
|
|
|
<!-- 创建者 --> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
{{if .User.Name}} |
|
|
|
<a href="{{AppSubUrl}}/{{.User.Name}}" title="{{.User.Name}}"><img class="ui avatar image" src="{{.User.RelAvatarLink}}"></a> |
|
|
|
{{else}} |
|
|
|
<a title="Ghost"><img class="ui avatar image" src="{{AppSubUrl}}/user/avatar/Ghost/-1"></a> |
|
|
|
{{end}} |
|
|
|
</div> |
|
|
|
<!-- 项目 --> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<a href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}" title="{{.Repo.OwnerName}}/{{.Repo.Alias}}">{{.Repo.OwnerName}}/{{.Repo.Alias}}</a> |
|
|
|
</div> |
|
|
|
<!-- 云脑侧名称 --> |
|
|
|
<div class="two wide column text center padding0" style="overflow: hidden;text-overflow:ellipsis;"> |
|
|
|
|
|
|
|
<span class="fitted">{{.JobName}}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="two wide column text center padding0" style="width: 17.5%!important;"> |
|
|
|
{{if eq .JobType "DEBUG"}} |
|
|
|
<div class="ui compact buttons"> |
|
|
|
<form id="debugAgainForm-{{.JobID}}"> |
|
|
|
{{$.CsrfTokenHtml}} |
|
|
|
{{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} |
|
|
|
<a style="margin: 0 1rem;" id="ai-debug-{{.JobID}}" class='ui basic {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}}disabled {{else}}blue {{end}}button' onclick='debugAgain("{{.JobID}}","{{if eq .ComputeResource "CPU/GPU"}}{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/cloudbrain{{else}}{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/notebook{{end}}/{{.JobID}}/")'> |
|
|
|
{{$.i18n.Tr "repo.debug"}} |
|
|
|
</a> |
|
|
|
{{else}} |
|
|
|
<a id="ai-debug-{{.JobID}}" class='ui basic {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}} disabled {{else}}blue {{end}}button' onclick='debugAgain("{{.JobID}}","{{if eq .ComputeResource "CPU/GPU"}}{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/cloudbrain{{else}}{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/notebook{{end}}/{{.JobID}}/")'> |
|
|
|
{{$.i18n.Tr "repo.debug_again"}} |
|
|
|
</a> |
|
|
|
{{end}} |
|
|
|
</form> |
|
|
|
</div> |
|
|
|
{{end}} |
|
|
|
<!-- 停止任务 --> |
|
|
|
<div class="ui compact buttons"> |
|
|
|
{{if eq .JobType "DEBUG" "BENCHMARK"}} |
|
|
|
<form id="stopForm-{{.JobID}}" style="margin-left:-1px;"> |
|
|
|
{{$.CsrfTokenHtml}} |
|
|
|
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{.JobID}}" class='ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED" "SUCCEEDED" "STOPPED" "STOPPING"}}disabled {{else}} blue {{end}}button' onclick='stopDebug("{{.JobID}}","{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else if eq .JobType "BENCHMARK" }}/cloudbrain/benchmark{{else if eq .ComputeResource "NPU" }}/modelarts/notebook{{end}}/{{.JobID}}/stop")'> |
|
|
|
{{$.i18n.Tr "repo.stop"}} |
|
|
|
</a> |
|
|
|
</form> |
|
|
|
{{else}} |
|
|
|
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{.JobID}}" class="ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" onclick='stopVersion({{.VersionName}},{{.JobID}},{{.Repo.OwnerName}},{{.Repo.Alias}})'> |
|
|
|
{{$.i18n.Tr "repo.stop"}} |
|
|
|
</a> |
|
|
|
{{end}} |
|
|
|
</div> |
|
|
|
<!-- 下载 --> |
|
|
|
<!-- {{if eq .JobType "INFERENCE"}} |
|
|
|
<div class="ui compact buttons"> |
|
|
|
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="model-download-{{.JobID}}" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/inference-job/{{.JobID}}/downloadall?version_name={{.VersionName}}" class="ui basic blue button" style="border-radius: .28571429rem;"> |
|
|
|
{{$.i18n.Tr "repo.model_download"}} |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
{{else if eq .JobType "DEBUG"}} |
|
|
|
<div class="ui compact buttons"> |
|
|
|
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="model-download-{{.JobID}}" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}/modelarts/inference-job/{{.JobID}}/downloadall?version_name={{.VersionName}}" class="ui basic blue button" style="border-radius: .28571429rem;"> |
|
|
|
{{$.i18n.Tr "repo.download"}} |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
{{end}} --> |
|
|
|
<!-- 删除任务 --> |
|
|
|
<form class="ui compact buttons" id="delForm-{{.JobID}}" action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Alias}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if eq .ComputeResource "NPU"}}/modelarts/notebook{{else if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else if eq .JobType "TRAIN"}}modelarts/train-job{{end}}/{{.JobID}}/del' method="post"> |
|
|
|
{{$.CsrfTokenHtml}} |
|
|
|
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{.JobID}}" class="ui basic blue button" onclick="assertDelete(this,{{.VersionName}},{{.JobID}},{{.Repo.OwnerName}},{{.Repo.Alias}})" style="border-radius: .28571429rem;"> |
|
|
|
{{$.i18n.Tr "repo.delete"}} |
|
|
|
</a> |
|
|
|
</form> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
{{end}} |
|
|
|
<div id="app" style="margin-top: 2rem;"> |
|
|
|
<div class="center"> |
|
|
|
<el-pagination |
|
|
|
background |
|
|
|
@current-change="handleCurrentChange" |
|
|
|
:current-page="page" |
|
|
|
:page-sizes="[10]" |
|
|
|
:page-size="10" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" |
|
|
|
:total="{{.Page.Paginater.Total}}"> |
|
|
|
</el-pagination> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 确认模态框 --> |
|
|
|
<div id="deletemodel"> |
|
|
|
<div class="ui basic modal"> |
|
|
|
<div class="ui icon header"> |
|
|
|
<i class="trash icon"></i> 删除任务 |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="content"> |
|
|
|
<p>你确认删除该任务么?此任务一旦删除不可恢复。</p> |
|
|
|
</div> |
|
|
|
<div class="actions"> |
|
|
|
<div class="ui red basic inverted cancel button"> |
|
|
|
<i class="remove icon"></i> 取消操作 |
|
|
|
</div> |
|
|
|
<div class="ui green basic inverted ok button"> |
|
|
|
<i class="checkmark icon"></i> 确定操作 |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
{{template "base/footer" .}} |
|
|
|
|
|
|
|
<script> |
|
|
|
// 删除时用户确认 |
|
|
|
console.log({{.Tasks}}) |
|
|
|
function deleteVersion(version_name,jobID,repoOwner,repoName){ |
|
|
|
const url = '/api/v1/repos/'+repoOwner+'/'+repoName+'/modelarts/inference-job/'+jobID+'/del_version' |
|
|
|
$.post(url,{version_name:version_name},(data)=>{ |
|
|
|
if(data.StatusOK===0){ |
|
|
|
location.reload() |
|
|
|
} |
|
|
|
}).fail(function(err) { |
|
|
|
console.log(err); |
|
|
|
}); |
|
|
|
} |
|
|
|
function assertDelete(obj,version_name,jobID,repoOwner,repoName) { |
|
|
|
if (obj.style.color == "rgb(204, 204, 204)") { |
|
|
|
return |
|
|
|
} else { |
|
|
|
const delId = obj.parentNode.id |
|
|
|
flag = 1; |
|
|
|
$('.ui.basic.modal') |
|
|
|
.modal({ |
|
|
|
onDeny: function() { |
|
|
|
flag = false |
|
|
|
}, |
|
|
|
onApprove: function() { |
|
|
|
if(!version_name){ |
|
|
|
document.getElementById(delId).submit() |
|
|
|
} |
|
|
|
else{ |
|
|
|
deleteVersion(version_name,jobID,repoOwner,repoName) |
|
|
|
} |
|
|
|
flag = true |
|
|
|
}, |
|
|
|
onHidden: function() { |
|
|
|
if (flag == false) { |
|
|
|
$('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut(); |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
.modal('show') |
|
|
|
} |
|
|
|
} |
|
|
|
function getParams(){ |
|
|
|
const params = new URLSearchParams(window.location.search) |
|
|
|
let jobType = !params.get('jobType')? '全部任务类型' : params.get('jobType') |
|
|
|
let listType = !params.get('listType')? '全部计算资源' : params.get('listType') |
|
|
|
let jobStatus = !params.get('jobStatus')? '全部状态' : params.get('jobStatus') |
|
|
|
const dropdownValueArray = [jobType,listType,jobStatus] |
|
|
|
$('#adminCloud .default.text ').each(function(index,e){ |
|
|
|
$(e).text(dropdownValueArray[index]) |
|
|
|
}) |
|
|
|
} |
|
|
|
getParams() |
|
|
|
function debugAgain(JobID,debugUrl){ |
|
|
|
if($('#' + JobID+ '-text').text()==="RUNNING"){ |
|
|
|
window.open(debugUrl+'debug') |
|
|
|
}else{ |
|
|
|
$.ajax({ |
|
|
|
type:"POST", |
|
|
|
url:debugUrl+'restart', |
|
|
|
data:$('#debugAgainForm-'+JobID).serialize(), |
|
|
|
success:function(res){ |
|
|
|
if(res.result_code==="0"){ |
|
|
|
if(res.job_id!==JobID){ |
|
|
|
location.reload() |
|
|
|
}else{ |
|
|
|
$('#' + JobID+'-icon').removeClass().addClass(res.status) |
|
|
|
$('#' + JobID+ '-text').text(res.status) |
|
|
|
$('#ai-debug-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
$('#ai-delete-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
$('#ai-debug-'+JobID).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) |
|
|
|
|
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
function stopDebug(JobID,stopUrl){ |
|
|
|
$.ajax({ |
|
|
|
type:"POST", |
|
|
|
url:stopUrl, |
|
|
|
data:$('#stopForm-'+JobID).serialize(), |
|
|
|
success:function(res){ |
|
|
|
if(res.result_code==="0"){ |
|
|
|
$('#' + JobID+'-icon').removeClass().addClass(res.status) |
|
|
|
$('#' + JobID+ '-text').text(res.status) |
|
|
|
if(res.status==="STOPPED"){ |
|
|
|
$('#ai-debug-'+JobID).removeClass('disabled').addClass('blue').text("再次调试").css("margin","0") |
|
|
|
$('#ai-image-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
$('#ai-model-debug-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
$('#ai-delete-'+JobID).removeClass('disabled').addClass('blue') |
|
|
|
$('#ai-stop-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
} |
|
|
|
else{ |
|
|
|
$('#ai-debug-'+JobID).removeClass('blue').addClass('disabled') |
|
|
|
$('#ai-stop-'+JobID).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) |
|
|
|
|
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
function stopVersion(version_name,jobID,repoOwner,repoName){ |
|
|
|
const url = `/api/v1/repos/${repoOwner}/${repoName}/modelarts/inference-job/${jobID}/stop_version` |
|
|
|
$.post(url,{version_name:version_name},(data)=>{ |
|
|
|
if(data.StatusOK===0){ |
|
|
|
$('#ai-stop-'+jobID).removeClass('blue') |
|
|
|
$('#ai-stop-'+jobID).addClass('disabled') |
|
|
|
refreshStatus(version_name,jobID,repoOwner,repoName) |
|
|
|
} |
|
|
|
}).fail(function(err) { |
|
|
|
console.log(err); |
|
|
|
}); |
|
|
|
} |
|
|
|
function refreshStatus(version_name,jobID,repoOwner,repoName){ |
|
|
|
|
|
|
|
const url = `/api/v1/repos/${repoOwner}/${repoName}/modelarts/inference-job/${jobID}/?version_name${version_name}` |
|
|
|
$.get(url,(data)=>{ |
|
|
|
$(`#${jobID}-icon`).attr("class",data.JobStatus) |
|
|
|
// detail status and duration |
|
|
|
$(`#${jobID}-text`).text(data.JobStatus) |
|
|
|
}).fail(function(err) { |
|
|
|
console.log(err); |
|
|
|
}); |
|
|
|
} |
|
|
|
var timeid = window.setInterval(loadJobStatus, 15000); |
|
|
|
$(document).ready(loadJobStatus); |
|
|
|
function loadJobStatus() { |
|
|
|
$(".job-status").each((index, job) => { |
|
|
|
const jobID = job.dataset.jobid; |
|
|
|
const repoPath = job.dataset.repopath; |
|
|
|
const computeResource = job.dataset.resource |
|
|
|
const versionname = job.dataset.version |
|
|
|
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(job.textContent.trim())) { |
|
|
|
return |
|
|
|
} |
|
|
|
// const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' |
|
|
|
$.get(`/api/v1/repos/${repoPath}/${jobID}?version_name=${versionname}`, (data) => { |
|
|
|
const jobID = data.JobID |
|
|
|
const status = data.JobStatus |
|
|
|
if (status != job.textContent.trim()) { |
|
|
|
$('#' + jobID+'-icon').removeClass().addClass(status) |
|
|
|
$('#' + jobID+ '-text').text(status) |
|
|
|
} |
|
|
|
if(status==="RUNNING"){ |
|
|
|
$('#ai-debug-'+jobID).removeClass('disabled').addClass('blue').text('调试').css("margin","0 1rem") |
|
|
|
$('#model-image-'+jobID).removeClass('disabled').addClass('blue') |
|
|
|
} |
|
|
|
if(status!=="RUNNING"){ |
|
|
|
// $('#model-debug-'+jobID).removeClass('blue') |
|
|
|
// $('#model-debug-'+jobID).addClass('disabled') |
|
|
|
$('#model-image-'+jobID).removeClass('blue').addClass('disabled') |
|
|
|
} |
|
|
|
if(["CREATING","STOPPING","WAITING","STARTING"].includes(status)){ |
|
|
|
$('#ai-debug-'+jobID).removeClass('blue').addClass('disabled') |
|
|
|
} |
|
|
|
if(['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED'].includes(status)){ |
|
|
|
$('#ai-debug-'+jobID).removeClass('disabled').addClass('blue').text('再次调试').css("margin","0") |
|
|
|
} |
|
|
|
if(["RUNNING","WAITING"].includes(status)){ |
|
|
|
$('#ai-stop-'+jobID).removeClass('disabled').addClass('blue') |
|
|
|
} |
|
|
|
if(["CREATING","STOPPING","STARTING","STOPPED","FAILED","START_FAILED","SUCCEEDED"].includes(status)){ |
|
|
|
$('#ai-stop-'+jobID).removeClass('blue').addClass('disabled') |
|
|
|
} |
|
|
|
if(status==="STOPPED" || status==="FAILED"|| status==="START_FAILED" || status==="KILLED" || status==="COMPLETED"){ |
|
|
|
$('#ai-delete-'+jobID).removeClass('disabled').addClass('blue') |
|
|
|
}else{ |
|
|
|
$('#ai-delete-'+jobID).removeClass('blue').addClass('disabled') |
|
|
|
} |
|
|
|
}).fail(function(err) { |
|
|
|
console.log(err); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
</script> |