@@ -45,7 +45,7 @@ type ImageStar struct { | |||||
} | } | ||||
type ImageTopic struct { | type ImageTopic struct { | ||||
ID int64 | |||||
ID int64 `xorm:"pk autoincr"` | |||||
Name string `xorm:"UNIQUE VARCHAR(105)"` | Name string `xorm:"UNIQUE VARCHAR(105)"` | ||||
ImageCount int | ImageCount int | ||||
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | ||||
@@ -468,8 +468,13 @@ func (images ImageList) loadAttributes(e Engine, uid int64) error { | |||||
} | } | ||||
for i := range images { | for i := range images { | ||||
images[i].UserName = users[images[i].UID].Name | |||||
images[i].RelAvatarLink = users[images[i].UID].RelAvatarLink() | |||||
if users[images[i].UID] != nil { | |||||
images[i].UserName = users[images[i].UID].Name | |||||
images[i].RelAvatarLink = users[images[i].UID].RelAvatarLink() | |||||
} else { | |||||
images[i].UserName = "" | |||||
images[i].RelAvatarLink = "" | |||||
} | |||||
if uid == -1 { | if uid == -1 { | ||||
images[i].IsStar = false | images[i].IsStar = false | ||||
} else { | } else { | ||||
@@ -491,34 +491,22 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
} | } | ||||
} | } | ||||
taskRoles := jobRes.TaskRoles | taskRoles := jobRes.TaskRoles | ||||
if jobRes.JobStatus.State != string(models.JobFailed) { | |||||
taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{})) | |||||
ctx.Data["taskRes"] = taskRes | |||||
task.Status = taskRes.TaskStatuses[0].State | |||||
task.ContainerID = taskRes.TaskStatuses[0].ContainerID | |||||
task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | |||||
models.ParseAndSetDurationFromCloudBrainOne(jobRes, task) | |||||
if task.DeletedAt.IsZero() { //normal record | |||||
err = models.UpdateJob(task) | |||||
if err != nil { | |||||
ctx.Data["error"] = err.Error() | |||||
return | |||||
} | |||||
} else { //deleted record | |||||
taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{})) | |||||
ctx.Data["taskRes"] = taskRes | |||||
ctx.Data["ExitDiagnostics"] = taskRes.TaskStatuses[0].ExitDiagnostics | |||||
task.Status = taskRes.TaskStatuses[0].State | |||||
task.ContainerID = taskRes.TaskStatuses[0].ContainerID | |||||
task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | |||||
models.ParseAndSetDurationFromCloudBrainOne(jobRes, task) | |||||
if task.DeletedAt.IsZero() { //normal record | |||||
err = models.UpdateJob(task) | |||||
if err != nil { | |||||
ctx.Data["error"] = err.Error() | |||||
return | |||||
} | } | ||||
} else { | |||||
task.Status = jobRes.JobStatus.State | |||||
taskRes := models.TaskPod{TaskStatuses: []models.TaskStatuses{ | |||||
{ | |||||
State: jobRes.JobStatus.State, | |||||
}, | |||||
}} | |||||
ctx.Data["taskRes"] = taskRes | |||||
jobRes.JobStatus.StartTime = time.Unix(int64(task.CreatedUnix), 0).Format("2006-01-02 15:04:05") | |||||
jobRes.JobStatus.EndTime = time.Unix(int64(task.UpdatedUnix), 0).Format("2006-01-02 15:04:05") | |||||
} else { //deleted record | |||||
} | } | ||||
ctx.Data["result"] = jobRes | ctx.Data["result"] = jobRes | ||||
@@ -15,7 +15,7 @@ | |||||
<span class="help">{{.i18n.Tr "org.org_name_helper"}}</span> | <span class="help">{{.i18n.Tr "org.org_name_helper"}}</span> | ||||
</div> | </div> | ||||
<div class="inline field {{if .Err_OrgVisibility}}error{{end}}"> | |||||
<!-- <div class="inline field {{if .Err_OrgVisibility}}error{{end}}"> | |||||
<span class="inline required field"><label for="visibility">{{.i18n.Tr "org.settings.visibility"}}</label></span> | <span class="inline required field"><label for="visibility">{{.i18n.Tr "org.settings.visibility"}}</label></span> | ||||
<div class="inline-grouped-list"> | <div class="inline-grouped-list"> | ||||
<div class="ui radio checkbox"> | <div class="ui radio checkbox"> | ||||
@@ -31,7 +31,7 @@ | |||||
<label>{{.i18n.Tr "org.settings.visibility.private"}}</label> | <label>{{.i18n.Tr "org.settings.visibility.private"}}</label> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | |||||
</div> --> | |||||
<div class="inline field" id="permission_box"> | <div class="inline field" id="permission_box"> | ||||
<label>{{.i18n.Tr "org.settings.permission"}}</label> | <label>{{.i18n.Tr "org.settings.permission"}}</label> | ||||
@@ -43,13 +43,13 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="field"> | <div class="field"> | ||||
<div class="ui radio checkbox"> | |||||
<div class="ui radio disabled checkbox"> | |||||
<input class="hidden enable-system-radio" tabindex="0" name="visibility" type="radio" value="1" {{if eq .CurrentVisibility 1}}checked{{end}}/> | <input class="hidden enable-system-radio" tabindex="0" name="visibility" type="radio" value="1" {{if eq .CurrentVisibility 1}}checked{{end}}/> | ||||
<label>{{.i18n.Tr "org.settings.visibility.limited"}}</label> | <label>{{.i18n.Tr "org.settings.visibility.limited"}}</label> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="field"> | <div class="field"> | ||||
<div class="ui radio checkbox"> | |||||
<div class="ui radio disabled checkbox"> | |||||
<input class="hidden enable-system-radio" tabindex="0" name="visibility" type="radio" value="2" {{if eq .CurrentVisibility 2}}checked{{end}}/> | <input class="hidden enable-system-radio" tabindex="0" name="visibility" type="radio" value="2" {{if eq .CurrentVisibility 2}}checked{{end}}/> | ||||
<label>{{.i18n.Tr "org.settings.visibility.private"}}</label> | <label>{{.i18n.Tr "org.settings.visibility.private"}}</label> | ||||
</div> | </div> | ||||
@@ -516,17 +516,21 @@ td, th { | |||||
let podEventArray = podEvents[task0]; | let podEventArray = podEvents[task0]; | ||||
if(podEventArray != null){ | if(podEventArray != null){ | ||||
for(var i=0; i < podEventArray.length;i++){ | for(var i=0; i < podEventArray.length;i++){ | ||||
html +="<p><b>[" +podEventArray[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +podEventArray[i]["message"] + "</p>"; | |||||
html +="<p>" +podEventArray[i]["action"] + "</p>"; | |||||
if (podEventArray[i]["reason"]!="") { | |||||
html +="<p><b>[" +podEventArray[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +podEventArray[i]["message"] + "</p>"; | |||||
html +="<p>" +podEventArray[i]["action"] + "</p>"; | |||||
} | |||||
} | } | ||||
} | } | ||||
let extras= jsonObj["extras"]; | let extras= jsonObj["extras"]; | ||||
if(extras != null){ | if(extras != null){ | ||||
for(var i=0; i < extras.length;i++){ | for(var i=0; i < extras.length;i++){ | ||||
html +="<p><b>[" +extras[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +extras[i]["message"] + "</p>"; | |||||
html +="<p>" +extras[i]["action"] + "</p>"; | |||||
if (extras[i]["reason"]!="") { | |||||
html +="<p><b>[" +extras[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +extras[i]["message"] + "</p>"; | |||||
html +="<p>" +extras[i]["action"] + "</p>"; | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -214,8 +214,9 @@ td, th { | |||||
<div class="content-pad"> | <div class="content-pad"> | ||||
<div class="ui pointing secondary menu" style="border-bottom: 1px solid rgba(34,36,38,.15);"> | <div class="ui pointing secondary menu" style="border-bottom: 1px solid rgba(34,36,38,.15);"> | ||||
<a class="active item" data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | <a class="active item" data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | ||||
<a class="item" data-tab="second{{$k}}" onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||||
<a class="item" data-tab="third{{$k}}" onclick="loadModelFile({{.VersionName}},'','','init')">{{$.i18n.Tr "repo.model_download"}}</a> | |||||
<a class="item" data-tab="second{{$k}}" onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | |||||
<a class="item" data-tab="third{{$k}}" onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||||
<a class="item" data-tab="four{{$k}}" onclick="loadModelFile({{.VersionName}},'','','init')">{{$.i18n.Tr "repo.model_download"}}</a> | |||||
</div> | </div> | ||||
<div class="ui tab active" data-tab="first{{$k}}"> | <div class="ui tab active" data-tab="first{{$k}}"> | ||||
<div style="padding-top: 10px;"> | <div style="padding-top: 10px;"> | ||||
@@ -376,11 +377,29 @@ td, th { | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="ui tab" data-tab="second{{$k}}"> | <div class="ui tab" data-tab="second{{$k}}"> | ||||
<div> | <div> | ||||
<div class="ui message message{{.VersionName}}" style="display: none;"> | <div class="ui message message{{.VersionName}}" style="display: none;"> | ||||
<div id="header"></div> | <div id="header"></div> | ||||
</div> | </div> | ||||
<div class="ui attached log" id="log{{.VersionName}}" style="height: 390px !important; overflow: auto;"> | |||||
<input type="hidden" id="json_value" value="{{$.result.JobStatus.AppExitDiagnostics}}"> | |||||
<input type="hidden" id="ExitDiagnostics" value="{{$.ExitDiagnostics}}"> | |||||
<span id="info_display" class="info_text"> | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="ui tab" data-tab="third{{$k}}"> | |||||
<div> | |||||
<div class="ui message message{{.VersionName}}" style="display: none;"> | |||||
<div id="header"></div> | |||||
</div> | |||||
<div class="ui attached log" id="log{{.VersionName}}" style="height: 300px !important; overflow: auto;"> | <div class="ui attached log" id="log{{.VersionName}}" style="height: 300px !important; overflow: auto;"> | ||||
<input type="hidden" name="end_line" value> | <input type="hidden" name="end_line" value> | ||||
<input type="hidden" name="start_line" value> | <input type="hidden" name="start_line" value> | ||||
@@ -391,7 +410,7 @@ td, th { | |||||
</div> | </div> | ||||
<div class="ui tab" data-tab="third{{$k}}"> | |||||
<div class="ui tab" data-tab="four{{$k}}"> | |||||
<input type="hidden" name="model{{.VersionName}}" value="-1"> | <input type="hidden" name="model{{.VersionName}}" value="-1"> | ||||
<input type="hidden" name="modelback{{.VersionName}}" value="-1"> | <input type="hidden" name="modelback{{.VersionName}}" value="-1"> | ||||
<div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | <div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | ||||
@@ -609,10 +628,10 @@ td, th { | |||||
// } | // } | ||||
let status = $(`#${versionname}-status-span`).text() | let status = $(`#${versionname}-status-span`).text() | ||||
if(['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED','SUCCEEDED'].includes(status)){ | |||||
if(['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED','SUCCEEDED','STOPPED'].includes(status)){ | |||||
return | return | ||||
} | } | ||||
let stopArray=["KILLED","FAILED","START_FAILED","KILLING","COMPLETED","SUCCEEDED"] | |||||
let stopArray=["KILLED","FAILED","START_FAILED","KILLING","COMPLETED","SUCCEEDED","STOPPED"] | |||||
$.get(`/api/v1/repos/${repoPath}/cloudbrain/${taskID}?version_name=${versionname}`, (data) => { | $.get(`/api/v1/repos/${repoPath}/cloudbrain/${taskID}?version_name=${versionname}`, (data) => { | ||||
//$(`#${versionname}-duration-span`).text(data.JobDuration) | //$(`#${versionname}-duration-span`).text(data.JobDuration) | ||||
$(`#${versionname}-status-span span`).text(data.JobStatus) | $(`#${versionname}-status-span span`).text(data.JobStatus) | ||||
@@ -649,5 +668,48 @@ td, th { | |||||
}); | }); | ||||
stopBubbling(arguments.callee.caller.arguments[0]) | stopBubbling(arguments.callee.caller.arguments[0]) | ||||
} | } | ||||
function parseInfo(){ | |||||
let jsonValue = document.getElementById("json_value").value; | |||||
let jsonObj = JSON.parse(jsonValue); | |||||
let podRoleName = jsonObj["podRoleName"]; | |||||
let html = ""; | |||||
if (podRoleName != null){ | |||||
let task0 = podRoleName["task1-0"]; | |||||
let podEvents = jsonObj["podEvents"]; | |||||
let podEventArray = podEvents[task0]; | |||||
if(podEventArray != null){ | |||||
for(var i=0; i < podEventArray.length;i++){ | |||||
if (podEventArray[i]["reason"]!="") { | |||||
html +="<p><b>[" +podEventArray[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +podEventArray[i]["message"] + "</p>"; | |||||
html +="<p>" +podEventArray[i]["action"] + "</p>"; | |||||
} | |||||
} | |||||
} | |||||
let extras= jsonObj["extras"]; | |||||
if(extras != null){ | |||||
for(var i=0; i < extras.length;i++){ | |||||
if (extras[i]["reason"]!="") { | |||||
html +="<p><b>[" +extras[i]["reason"] + "]</b></p>"; | |||||
html +="<p>" +extras[i]["message"] + "</p>"; | |||||
html +="<p>" +extras[i]["action"] + "</p>"; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
let string = document.getElementById("ExitDiagnostics").value; | |||||
string = string.replace(/\r\n/g,"<br>") | |||||
string = string.replace(/\n/g,"<br>"); | |||||
string = string.replace(/(\r\n)|(\n)/g,'<br>'); | |||||
if (string!=""){ | |||||
html +="<p><b>[ExitDiagnostics]</b></p>"; | |||||
html +="<p>" +string + "</p>"; | |||||
} | |||||
document.getElementById("info_display").innerHTML=html; | |||||
} | |||||
</script> | </script> |
@@ -239,7 +239,7 @@ const params = new URLSearchParams(location.search) | |||||
if(!location.search){ | if(!location.search){ | ||||
$('.default.text').text(all) | $('.default.text').text(all) | ||||
}else{ | }else{ | ||||
if(params.has('listType') && params.get('listType')=='all'){ | |||||
if(!params.has('listType') || params.get('listType')=='all'){ | |||||
$('.default.text').text(all) | $('.default.text').text(all) | ||||
} | } | ||||
else{ | else{ | ||||