| @@ -237,6 +237,8 @@ page_recommend_repo_desc=Excellent AI projects recommendation. To show your proj | |||||
| page_recommend_repo_commit=Click here to submit. | page_recommend_repo_commit=Click here to submit. | ||||
| page_recommend_repo_go=Click here to | page_recommend_repo_go=Click here to | ||||
| page_recommend_repo_more=explore more projects. | page_recommend_repo_more=explore more projects. | ||||
| page_recommend_activity=Community Activities | |||||
| page_recommend_activity_desc=The community has prepared a wealth of activities, waiting for you to participate! | |||||
| page_dev_env=Collaborative Development Environment | page_dev_env=Collaborative Development Environment | ||||
| page_dev_env_desc=Provide a collaborative development environment for AI development, which is the biggest highlight that distinguishes the OpenI AI Collaboration Platform from other traditional Git platforms. | page_dev_env_desc=Provide a collaborative development environment for AI development, which is the biggest highlight that distinguishes the OpenI AI Collaboration Platform from other traditional Git platforms. | ||||
| page_dev_env_desc_title=Unified Management of Development Elements | page_dev_env_desc_title=Unified Management of Development Elements | ||||
| @@ -239,6 +239,8 @@ page_recommend_repo_desc=优秀的AI项目推荐;你的项目也想展示到 | |||||
| page_recommend_repo_commit=点此提交 | page_recommend_repo_commit=点此提交 | ||||
| page_recommend_repo_go=。进入 | page_recommend_repo_go=。进入 | ||||
| page_recommend_repo_more=项目广场 | page_recommend_repo_more=项目广场 | ||||
| page_recommend_activity=社区活动 | |||||
| page_recommend_activity_desc=社区准备了丰富的活动,等你来参加! | |||||
| page_dev_env=协同开发环境 | page_dev_env=协同开发环境 | ||||
| page_dev_env_desc=启智AI协作开发平台与传统git平台最大的不同就在于提供了面向AI开发的协同开发环境 | page_dev_env_desc=启智AI协作开发平台与传统git平台最大的不同就在于提供了面向AI开发的协同开发环境 | ||||
| page_dev_env_desc_title=开发要素统一管理 | page_dev_env_desc_title=开发要素统一管理 | ||||
| @@ -6,6 +6,7 @@ if(isEmpty(token)){ | |||||
| token = meta.attr("content"); | token = meta.attr("content"); | ||||
| } | } | ||||
| } | } | ||||
| var swiperNewMessage = new Swiper(".newslist", { | var swiperNewMessage = new Swiper(".newslist", { | ||||
| direction: "vertical", | direction: "vertical", | ||||
| slidesPerView: 10, | slidesPerView: 10, | ||||
| @@ -15,6 +16,18 @@ var swiperNewMessage = new Swiper(".newslist", { | |||||
| disableOnInteraction: false, | disableOnInteraction: false, | ||||
| }, | }, | ||||
| }); | }); | ||||
| var swiperEvent = new Swiper(".event-list", { | |||||
| slidesPerView: 2, | |||||
| spaceBetween: 30, | |||||
| pagination: { | |||||
| el: ".swiper-pagination", | |||||
| clickable: true, | |||||
| }, | |||||
| autoplay: { | |||||
| delay: 2500, | |||||
| disableOnInteraction: false, | |||||
| }, | |||||
| }); | |||||
| var swiperRepo = new Swiper(".homepro-list", { | var swiperRepo = new Swiper(".homepro-list", { | ||||
| slidesPerView: 1, | slidesPerView: 1, | ||||
| slidesPerColumn: 2, | slidesPerColumn: 2, | ||||
| @@ -433,6 +446,38 @@ function queryRecommendData(){ | |||||
| } | } | ||||
| }); | }); | ||||
| $.ajax({ | |||||
| type:"GET", | |||||
| url:"/recommend/imageinfo", | |||||
| headers: { | |||||
| authorization:token, | |||||
| }, | |||||
| dataType:"json", | |||||
| async:false, | |||||
| success:function(json){ | |||||
| displayActivity(json); | |||||
| }, | |||||
| error:function(response) { | |||||
| } | |||||
| }); | |||||
| } | |||||
| function displayActivity(json){ | |||||
| var activityDiv = document.getElementById("recommendactivity"); | |||||
| var html = ""; | |||||
| if (json != null && json.length > 0){ | |||||
| for(var i = 0; i < json.length;i++){ | |||||
| var record = json[i] | |||||
| html += "<div class=\"swiper-slide\">"; | |||||
| html += "<a href=\"" + record["image_link"] + "\" class=\"ui fluid card\">"; | |||||
| html += " <div class=\"image\"><img src=\"" + record["url"] + "\"></div>" | |||||
| html += "</a>"; | |||||
| html += "</div>"; | |||||
| } | |||||
| } | |||||
| activityDiv.innerHTML = html; | |||||
| swiperEvent.updateSlides(); | |||||
| swiperEvent.updateProgress(); | |||||
| } | } | ||||
| function displayRepo(json){ | function displayRepo(json){ | ||||
| @@ -8,6 +8,7 @@ package routers | |||||
| import ( | import ( | ||||
| "bytes" | "bytes" | ||||
| "net/http" | "net/http" | ||||
| "strconv" | |||||
| "strings" | "strings" | ||||
| "code.gitea.io/gitea/services/repository" | "code.gitea.io/gitea/services/repository" | ||||
| @@ -92,6 +93,8 @@ func setRecommendURL(ctx *context.Context) { | |||||
| ctx.Data["page_dev_yunlao_desc3"] = ctx.Tr("home.page_dev_yunlao_desc3") | ctx.Data["page_dev_yunlao_desc3"] = ctx.Tr("home.page_dev_yunlao_desc3") | ||||
| ctx.Data["page_dev_yunlao_desc4"] = ctx.Tr("home.page_dev_yunlao_desc4") | ctx.Data["page_dev_yunlao_desc4"] = ctx.Tr("home.page_dev_yunlao_desc4") | ||||
| ctx.Data["page_dev_yunlao_apply"] = ctx.Tr("home.page_dev_yunlao_apply") | ctx.Data["page_dev_yunlao_apply"] = ctx.Tr("home.page_dev_yunlao_apply") | ||||
| ctx.Data["page_recommend_activity"] = ctx.Tr("home.page_recommend_activity") | |||||
| ctx.Data["page_recommend_activity_desc"] = ctx.Tr("home.page_recommend_activity_desc") | |||||
| } | } | ||||
| func Dashboard(ctx *context.Context) { | func Dashboard(ctx *context.Context) { | ||||
| @@ -640,6 +643,87 @@ func GetRecommendOrg() ([]map[string]interface{}, error) { | |||||
| } | } | ||||
| return resultOrg, nil | return resultOrg, nil | ||||
| } | } | ||||
| func GetImageInfo() ([]map[string]interface{}, error) { | |||||
| url := setting.RecommentRepoAddr + "picture_info" | |||||
| result, err := repository.RecommendFromPromote(url) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| imageInfo := make([]map[string]interface{}, 0) | |||||
| for i := 0; i < (len(result) - 1); i++ { | |||||
| line := result[i] | |||||
| imageMap := make(map[string]interface{}) | |||||
| if line[0:4] == "url=" { | |||||
| url := line[4:] | |||||
| imageMap["url"] = url | |||||
| if result[i+1][0:11] == "image_link=" { | |||||
| image_link := result[i+1][11:] | |||||
| imageMap["image_link"] = image_link | |||||
| } | |||||
| } | |||||
| imageInfo = append(imageInfo, imageMap) | |||||
| i = i + 1 | |||||
| } | |||||
| return imageInfo, nil | |||||
| } | |||||
| func GetRankUser(index string) ([]map[string]interface{}, error) { | |||||
| url := setting.RecommentRepoAddr + "user_rank_" + index | |||||
| result, err := repository.RecommendFromPromote(url) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| resultOrg := make([]map[string]interface{}, 0) | |||||
| for _, userRank := range result { | |||||
| tmpIndex := strings.Index(userRank, " ") | |||||
| userName := userRank | |||||
| score := 0 | |||||
| if tmpIndex != -1 { | |||||
| userName = userRank[0:tmpIndex] | |||||
| tmpScore, err := strconv.Atoi(userRank[tmpIndex+1:]) | |||||
| if err != nil { | |||||
| log.Info("convert to int error.") | |||||
| } | |||||
| score = tmpScore | |||||
| } | |||||
| user, err := models.GetUserByName(userName) | |||||
| if err == nil { | |||||
| userMap := make(map[string]interface{}) | |||||
| userMap["Name"] = user.Name | |||||
| userMap["Description"] = user.Description | |||||
| userMap["FullName"] = user.FullName | |||||
| userMap["HomeLink"] = user.HomeLink() | |||||
| userMap["ID"] = user.ID | |||||
| userMap["Avatar"] = user.RelAvatarLink() | |||||
| userMap["Score"] = score | |||||
| resultOrg = append(resultOrg, userMap) | |||||
| } else { | |||||
| log.Info("query user error," + err.Error()) | |||||
| } | |||||
| } | |||||
| return resultOrg, nil | |||||
| } | |||||
| func GetImageInfoFromPromote(ctx *context.Context) { | |||||
| imageInfo, err := GetImageInfo() | |||||
| if err != nil { | |||||
| ctx.ServerError("500", err) | |||||
| return | |||||
| } | |||||
| ctx.JSON(200, imageInfo) | |||||
| } | |||||
| func GetUserRankFromPromote(ctx *context.Context) { | |||||
| index := ctx.Params("index") | |||||
| resultUserRank, err := GetRankUser(index) | |||||
| if err != nil { | |||||
| ctx.ServerError("500", err) | |||||
| return | |||||
| } | |||||
| ctx.JSON(200, resultUserRank) | |||||
| } | |||||
| func RecommendOrgFromPromote(ctx *context.Context) { | func RecommendOrgFromPromote(ctx *context.Context) { | ||||
| resultOrg, err := GetRecommendOrg() | resultOrg, err := GetRecommendOrg() | ||||
| @@ -325,6 +325,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Get("/action/notification", routers.ActionNotification) | m.Get("/action/notification", routers.ActionNotification) | ||||
| m.Get("/recommend/org", routers.RecommendOrgFromPromote) | m.Get("/recommend/org", routers.RecommendOrgFromPromote) | ||||
| m.Get("/recommend/repo", routers.RecommendRepoFromPromote) | m.Get("/recommend/repo", routers.RecommendRepoFromPromote) | ||||
| m.Get("/recommend/userrank/:index", routers.GetUserRankFromPromote) | |||||
| m.Get("/recommend/imageinfo", routers.GetImageInfoFromPromote) | |||||
| m.Post("/all/search/", routers.Search) | m.Post("/all/search/", routers.Search) | ||||
| m.Get("/all/search/", routers.EmptySearch) | m.Get("/all/search/", routers.EmptySearch) | ||||
| m.Get("/all/dosearch/", routers.SearchApi) | m.Get("/all/dosearch/", routers.SearchApi) | ||||
| @@ -36,6 +36,20 @@ | |||||
| <!--组织--> | <!--组织--> | ||||
| <div class="ui container homeorg"> | <div class="ui container homeorg"> | ||||
| <div class="ui stackable grid"> | <div class="ui stackable grid"> | ||||
| <div class="sixteen wide tablet four wide computer column homeorg-tit"> | |||||
| <h2>{{.page_recommend_activity}}</h2> | |||||
| <p><span class="ui text grey">{{.page_recommend_activity_desc}}</p> | |||||
| </div> | |||||
| <div class="sixteen wide tablet twelve wide computer column"> | |||||
| <div class="event-list"> | |||||
| <div class="swiper-wrapper" id="recommendactivity"> | |||||
| </div> | |||||
| <div class="swiper-pagination"></div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="sixteen wide tablet four wide computer column homeorg-tit"> | <div class="sixteen wide tablet four wide computer column homeorg-tit"> | ||||
| <h2>{{.page_recommend_org}}</h2> | <h2>{{.page_recommend_org}}</h2> | ||||
| <p><span class="ui text grey">{{.page_recommend_org_desc}} </span><a href="{{.RecommendURL}}">{{.page_recommend_org_commit}}</a></p> | <p><span class="ui text grey">{{.page_recommend_org_desc}} </span><a href="{{.RecommendURL}}">{{.page_recommend_org_commit}}</a></p> | ||||
| @@ -1,171 +1,205 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <style> | <style> | ||||
| .according-panel-heading{ | |||||
| box-sizing: border-box; | |||||
| padding: 8px 16px; | |||||
| color: #252b3a; | |||||
| background-color: #f2f5fc; | |||||
| line-height: 1.5; | |||||
| cursor: pointer; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| .accordion-panel-title { | |||||
| margin-top: 0; | |||||
| margin-bottom: 0; | |||||
| color: #252b3a; | |||||
| } | |||||
| .accordion-panel-title-content{ | |||||
| vertical-align: middle; | |||||
| display: inline-block; | |||||
| width: calc(100% - 32px); | |||||
| cursor: default; | |||||
| } | |||||
| .acc-margin-bottom { | |||||
| margin-bottom: 5px; | |||||
| } | |||||
| .title_text { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ac-display-inblock { | |||||
| display: inline-block; | |||||
| } | |||||
| .cti-mgRight-sm { | |||||
| margin-right: 8px; | |||||
| } | |||||
| .ac-text-normal { | |||||
| font-size: 14px; | |||||
| color: #575d6c; | |||||
| } | |||||
| .uc-accordionTitle-black { | |||||
| color: #333; | |||||
| } | |||||
| .accordion-border{ | |||||
| border:1px solid #cce2ff; | |||||
| } | |||||
| .padding0{ | |||||
| padding: 0 !important; | |||||
| } | |||||
| .content-pad{ | |||||
| padding: 15px 35px; | |||||
| } | |||||
| .content-margin{ | |||||
| margin:10px 5px ; | |||||
| } | |||||
| .tab_2_content { | |||||
| min-height: 420px; | |||||
| margin-left: 10px; | |||||
| } | |||||
| .ac-grid { | |||||
| display: block; | |||||
| *zoom: 1; | |||||
| } | |||||
| .ac-grid-col { | |||||
| float: left; | |||||
| width: 100%; | |||||
| } | |||||
| .ac-grid-col2 .ac-grid-col { | |||||
| width: 50%; | |||||
| } | |||||
| .ti-form { | |||||
| text-align: left; | |||||
| max-width: 100%; | |||||
| vertical-align: middle; | |||||
| } | |||||
| .ti-form>tbody { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-form>tbody, .ti-form>tbody>tr { | |||||
| vertical-align: inherit; | |||||
| } | |||||
| .info_text { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-text-form-label { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| color: #8a8e99; | |||||
| font-size: 12px; | |||||
| white-space: nowrap !important; | |||||
| width: 80px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .ti-text-form-content{ | |||||
| line-height: 30px; | |||||
| padding-bottom: 20px; | |||||
| } | |||||
| .ti-form>tbody>tr>td { | |||||
| vertical-align: top; | |||||
| white-space: normal; | |||||
| } | |||||
| td, th { | |||||
| padding: 0; | |||||
| } | |||||
| .ac-grid-col .text-span { | |||||
| width: 450px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .redo-color{ | |||||
| color: #3291F8; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child){ | |||||
| margin-right: 10px; | |||||
| padding-right: 11px; | |||||
| text-decoration: none!important; | |||||
| color: #526ecc; | |||||
| cursor: pointer; | |||||
| display: inline-block; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| position: relative; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child):after { | |||||
| content: ""; | |||||
| display: inline-block; | |||||
| position: absolute; | |||||
| height: 12px; | |||||
| right: 0; | |||||
| top: 50%; | |||||
| -webkit-transform: translateY(-6px); | |||||
| -ms-transform: translateY(-6px); | |||||
| -o-transform: translateY(-6px); | |||||
| transform: translateY(-6px); | |||||
| border-right: 1px solid #dfe1e6; | |||||
| } | |||||
| .text-width80{ | |||||
| width: 100px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .border-according{ | |||||
| border: 1px solid #dfe1e6; | |||||
| } | |||||
| .disabled { | |||||
| .according-panel-heading { | |||||
| box-sizing: border-box; | |||||
| padding: 8px 16px; | |||||
| color: #252b3a; | |||||
| background-color: #f2f5fc; | |||||
| line-height: 1.5; | |||||
| cursor: pointer; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| .accordion-panel-title { | |||||
| margin-top: 0; | |||||
| margin-bottom: 0; | |||||
| color: #252b3a; | |||||
| } | |||||
| .accordion-panel-title-content { | |||||
| vertical-align: middle; | |||||
| display: inline-block; | |||||
| width: calc(100% - 32px); | |||||
| cursor: default; | |||||
| } | |||||
| .acc-margin-bottom { | |||||
| margin-bottom: 5px; | |||||
| } | |||||
| .title_text { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ac-display-inblock { | |||||
| display: inline-block; | |||||
| } | |||||
| .cti-mgRight-sm { | |||||
| margin-right: 8px; | |||||
| } | |||||
| .ac-text-normal { | |||||
| font-size: 14px; | |||||
| color: #575d6c; | |||||
| } | |||||
| .uc-accordionTitle-black { | |||||
| color: #333; | |||||
| } | |||||
| .accordion-border { | |||||
| border: 1px solid #cce2ff; | |||||
| } | |||||
| .padding0 { | |||||
| padding: 0 !important; | |||||
| } | |||||
| .content-pad { | |||||
| padding: 15px 35px; | |||||
| } | |||||
| .content-margin { | |||||
| margin: 10px 5px; | |||||
| } | |||||
| .tab_2_content { | |||||
| min-height: 420px; | |||||
| margin-left: 10px; | |||||
| } | |||||
| .ac-grid { | |||||
| display: block; | |||||
| *zoom: 1; | |||||
| } | |||||
| .ac-grid-col { | |||||
| float: left; | |||||
| width: 100%; | |||||
| } | |||||
| .ac-grid-col2 .ac-grid-col { | |||||
| width: 50%; | |||||
| } | |||||
| .ti-form { | |||||
| text-align: left; | |||||
| max-width: 100%; | |||||
| vertical-align: middle; | |||||
| } | |||||
| .ti-form>tbody { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-form>tbody, | |||||
| .ti-form>tbody>tr { | |||||
| vertical-align: inherit; | |||||
| } | |||||
| .info_text { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-text-form-label { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| color: #8a8e99; | |||||
| font-size: 12px; | |||||
| white-space: nowrap !important; | |||||
| width: 80px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .ti-text-form-content { | |||||
| line-height: 30px; | |||||
| padding-bottom: 20px; | |||||
| } | |||||
| .ti-form>tbody>tr>td { | |||||
| vertical-align: top; | |||||
| white-space: normal; | |||||
| } | |||||
| td, | |||||
| th { | |||||
| padding: 0; | |||||
| } | |||||
| .ac-grid-col .text-span { | |||||
| width: 450px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .redo-color { | |||||
| color: #3291F8; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child) { | |||||
| margin-right: 10px; | |||||
| padding-right: 11px; | |||||
| text-decoration: none !important; | |||||
| color: #526ecc; | |||||
| cursor: pointer; | |||||
| display: inline-block; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| position: relative; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child):after { | |||||
| content: ""; | |||||
| display: inline-block; | |||||
| position: absolute; | |||||
| height: 12px; | |||||
| right: 0; | |||||
| top: 50%; | |||||
| -webkit-transform: translateY(-6px); | |||||
| -ms-transform: translateY(-6px); | |||||
| -o-transform: translateY(-6px); | |||||
| transform: translateY(-6px); | |||||
| border-right: 1px solid #dfe1e6; | |||||
| } | |||||
| .text-width80 { | |||||
| width: 100px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .border-according { | |||||
| border: 1px solid #dfe1e6; | |||||
| } | |||||
| .disabled { | |||||
| cursor: default; | cursor: default; | ||||
| pointer-events: none; | pointer-events: none; | ||||
| color: rgba(0,0,0,.6) !important; | |||||
| color: rgba(0, 0, 0, .6) !important; | |||||
| opacity: .45 !important; | opacity: .45 !important; | ||||
| } | |||||
| .pad20{ | |||||
| border:0px !important; | |||||
| } | |||||
| .model_file_bread{ | |||||
| margin-bottom: -0.5rem !important; | |||||
| padding-left: 1rem; | |||||
| padding-top: 0.5rem ; | |||||
| } | |||||
| } | |||||
| .pad20 { | |||||
| border: 0px !important; | |||||
| } | |||||
| .model_file_bread { | |||||
| margin-bottom: -0.5rem !important; | |||||
| padding-left: 1rem; | |||||
| padding-top: 0.5rem; | |||||
| } | |||||
| </style> | </style> | ||||
| @@ -179,7 +213,7 @@ td, th { | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="repository"> | <div class="repository"> | ||||
| {{template "repo/header" .}} | |||||
| {{template "repo/header" .}} | |||||
| <div class="ui container"> | <div class="ui container"> | ||||
| <h4 class="ui header" id="vertical-segment"> | <h4 class="ui header" id="vertical-segment"> | ||||
| <div class="ui breadcrumb"> | <div class="ui breadcrumb"> | ||||
| @@ -191,11 +225,12 @@ td, th { | |||||
| {{$.i18n.Tr "repo.modelarts.notebook"}} | {{$.i18n.Tr "repo.modelarts.notebook"}} | ||||
| </a> | </a> | ||||
| <div class="divider"> / </div> | <div class="divider"> / </div> | ||||
| <div class="active section">{{.displayJobName}}</div> | |||||
| </div> | |||||
| <div class="active section">{{.displayJobName}}</div> | |||||
| </div> | |||||
| </h4> | </h4> | ||||
| {{range $k ,$v := .version_list_task}} | {{range $k ,$v := .version_list_task}} | ||||
| <div class="ui accordion border-according" id="accordion{{.VersionName}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}" data-version="{{.VersionName}}"> | |||||
| <div class="ui accordion border-according" id="accordion{{.VersionName}}" | |||||
| data-repopath="{{$.RepoRelPath}}/cloudbrain" data-jobid="{{.ID}}" data-version="{{.VersionName}}"> | |||||
| <input type="hidden" id="jobId_input" name="jobId_input" value="{{.JobID}}"> | <input type="hidden" id="jobId_input" name="jobId_input" value="{{.JobID}}"> | ||||
| <div class="{{if eq $k 0}}active{{end}} title padding0"> | <div class="{{if eq $k 0}}active{{end}} title padding0"> | ||||
| <div class="according-panel-heading"> | <div class="according-panel-heading"> | ||||
| @@ -205,19 +240,26 @@ td, th { | |||||
| <span> | <span> | ||||
| <div class="ac-display-inblock title_text acc-margin-bottom"> | <div class="ac-display-inblock title_text acc-margin-bottom"> | ||||
| <span class="cti-mgRight-sm"> | <span class="cti-mgRight-sm"> | ||||
| {{if not (eq .StartTime 0)}} | |||||
| <td>{{TimeSinceUnix1 .StartTime}}</td> | |||||
| {{else}} | |||||
| <td>{{TimeSinceUnix1 .CreatedUnix}}<td> | |||||
| {{end}} | |||||
| </span> | |||||
| {{if not (eq .StartTime 0)}} | |||||
| <td>{{TimeSinceUnix1 .StartTime}}</td> | |||||
| {{else}} | |||||
| <td>{{TimeSinceUnix1 .CreatedUnix}} | |||||
| <td> | |||||
| {{end}} | |||||
| </span> | |||||
| <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: | <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: | ||||
| <span id="{{.VersionName}}-status-span"><i id="icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| <span id="{{.VersionName}}-status-span"><i id="icon" | |||||
| style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" | |||||
| style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| </span> | </span> | ||||
| <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span> | |||||
| <span class="cti-mgRight-sm uc-accordionTitle-black" id="{{.VersionName}}-duration-span">{{$.duration}}</span> | |||||
| <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}: | |||||
| </span> | |||||
| <span class="cti-mgRight-sm uc-accordionTitle-black" | |||||
| id="{{.VersionName}}-duration-span">{{$.duration}}</span> | |||||
| <span data-tooltip="刷新" style="cursor: pointer;" data-inverted="" | |||||
| onclick="refreshStatus({{.VersionName}})"><i | |||||
| class="redo icon redo-color"></i></span> | |||||
| </div> | </div> | ||||
| </span> | </span> | ||||
| </span> | </span> | ||||
| @@ -227,8 +269,10 @@ td, th { | |||||
| <div class="{{if eq $k 0}}active{{end}} content"> | <div class="{{if eq $k 0}}active{{end}} content"> | ||||
| <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="item" data-tab="second{{$k}}" onclick="javascript:parseLog()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</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="javascript:parseLog()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</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;"> | ||||
| @@ -259,192 +303,199 @@ td, th { | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.User.Name}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.User.Name}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.computing_resources"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-computeresource"> | |||||
| {{.ComputeResource}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.computing_resources"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-computeresource"> | |||||
| {{.ComputeResource}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.task_type"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-computeresource"> | |||||
| {{.JobType}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.code_version"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-code"> | |||||
| {{.BranchName}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.task_type"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-computeresource"> | |||||
| {{.JobType}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.gpu_type"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.resource_type}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.code_version"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-code"> | |||||
| {{.BranchName}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.createtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-createtime"> | |||||
| {{TimeSinceUnix1 .CreatedUnix}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.gpu_type"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.resource_type}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-duration"> | |||||
| {{$.duration}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.createtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-createtime"> | |||||
| {{TimeSinceUnix1 .CreatedUnix}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-duration"> | |||||
| {{$.duration}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | </tbody> | ||||
| </table> | </table> | ||||
| </div> | </div> | ||||
| <div class="ac-grid-col"> | <div class="ac-grid-col"> | ||||
| <table class="ti-form"> | |||||
| <tbody class="ti-text-form"> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.mirror"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.Image}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dataset"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-BenchmarkTypeName"> | |||||
| {{$.datasetname}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.dataset_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="dataset_storage_path"> | |||||
| <table class="ti-form"> | |||||
| <tbody class="ti-text-form"> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.mirror"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.Image}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dataset"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-BenchmarkTypeName"> | |||||
| {{$.datasetname}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.dataset_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="dataset_storage_path"> | |||||
| {{$.dataset_path}} | {{$.dataset_path}} | ||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.model_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="model_storage_path"> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.model_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="model_storage_path"> | |||||
| {{$.model_path}} | {{$.model_path}} | ||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.code_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="code_storage_path"> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.code_storage_path"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="code_storage_path"> | |||||
| {{$.code_path}} | {{$.code_path}} | ||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.starttime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-startTime"> | |||||
| {{if not (eq .StartTime 0)}} | |||||
| {{TimeSinceUnix1 .StartTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.endtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-EndTime"> | |||||
| {{if not (eq .EndTime 0)}} | |||||
| {{TimeSinceUnix1 .EndTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </div> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.starttime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-startTime"> | |||||
| {{if not (eq .StartTime 0)}} | |||||
| {{TimeSinceUnix1 .StartTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.endtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-EndTime"> | |||||
| {{if not (eq .EndTime 0)}} | |||||
| {{TimeSinceUnix1 .EndTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -455,10 +506,11 @@ td, th { | |||||
| <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;"> | |||||
| <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="json_value" value="{{$.result.JobStatus.AppExitDiagnostics}}"> | ||||
| <span id="info_display" class="info_text"> | <span id="info_display" class="info_text"> | ||||
| </span> | </span> | ||||
| </div> | </div> | ||||
| @@ -498,42 +550,71 @@ td, th { | |||||
| <script> | <script> | ||||
| $('.menu .item').tab() | $('.menu .item').tab() | ||||
| $(document).ready(function(){ | |||||
| $('.ui.accordion').accordion({selector:{trigger:'.icon'}}); | |||||
| $(document).ready(function () { | |||||
| $('.ui.accordion').accordion({ selector: { trigger: '.icon' } }); | |||||
| }); | }); | ||||
| $(document).ready(function(){ | |||||
| $(document).ready(function () { | |||||
| $('.secondary.menu .item').tab(); | $('.secondary.menu .item').tab(); | ||||
| }); | }); | ||||
| function parseLog(){ | |||||
| 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>"; | |||||
| function parseLog() { | |||||
| 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 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>"; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| document.getElementById("info_display").innerHTML = html; | |||||
| } | |||||
| function stopBubbling(e) { | |||||
| e = window.event || e; | |||||
| if (e.stopPropagation) { | |||||
| e.stopPropagation(); //阻止事件 冒泡传播 | |||||
| } else { | |||||
| e.cancelBubble = true; //ie兼容 | |||||
| } | |||||
| } | |||||
| function refreshStatus(version_name) { | |||||
| $(".ui.accordion.border-according").each((index, job) => { | |||||
| const jobID = job.dataset.jobid; | |||||
| const repoPath = job.dataset.repopath; | |||||
| const versionname = job.dataset.version | |||||
| $.get(`/api/v1/repos/${repoPath}/cloudbrain/${jobID}?version_name=${versionname}`, (data) => { | |||||
| // header status and duration | |||||
| //$(`#${version_name}-duration-span`).text(data.JobDuration) | |||||
| $(`#${version_name}-status-span span`).text(data.JobStatus) | |||||
| $(`#${version_name}-status-span i`).attr("class", data.JobStatus) | |||||
| // detail status and duration | |||||
| //$('#'+version_name+'-duration').text(data.JobDuration) | |||||
| $('#' + version_name + '-status').text(data.JobStatus) | |||||
| parseLog() | |||||
| }).fail(function (err) { | |||||
| console.log(err); | |||||
| }); | |||||
| stopBubbling(arguments.callee.caller.arguments[0]) | |||||
| }) | |||||
| } | } | ||||
| document.getElementById("info_display").innerHTML=html; | |||||
| } | |||||
| </script> | </script> | ||||
| @@ -2,20 +2,23 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <style> | <style> | ||||
| .label_after::after{ | |||||
| .label_after::after { | |||||
| margin: -.2em 0 0 .2em; | margin: -.2em 0 0 .2em; | ||||
| content: '\00a0'; | content: '\00a0'; | ||||
| } | |||||
| .selectcloudbrain .active.item{ | |||||
| } | |||||
| .selectcloudbrain .active.item { | |||||
| color: #0087f5 !important; | color: #0087f5 !important; | ||||
| border: 1px solid #0087f5; | border: 1px solid #0087f5; | ||||
| margin: -1px; | margin: -1px; | ||||
| background: #FFF !important; | background: #FFF !important; | ||||
| } | } | ||||
| #deletemodel { | #deletemodel { | ||||
| width: 100%; | width: 100%; | ||||
| height: 100%; | height: 100%; | ||||
| } | } | ||||
| /* 弹窗 */ | /* 弹窗 */ | ||||
| #mask { | #mask { | ||||
| @@ -73,28 +76,33 @@ | |||||
| } | } | ||||
| @-webkit-keyframes sk-stretchdelay { | @-webkit-keyframes sk-stretchdelay { | ||||
| 0%, | 0%, | ||||
| 40%, | 40%, | ||||
| 100% { | 100% { | ||||
| -webkit-transform: scaleY(0.4) | -webkit-transform: scaleY(0.4) | ||||
| } | } | ||||
| 20% { | 20% { | ||||
| -webkit-transform: scaleY(1.0) | -webkit-transform: scaleY(1.0) | ||||
| } | } | ||||
| } | } | ||||
| @keyframes sk-stretchdelay { | @keyframes sk-stretchdelay { | ||||
| 0%, | 0%, | ||||
| 40%, | 40%, | ||||
| 100% { | 100% { | ||||
| transform: scaleY(0.4); | transform: scaleY(0.4); | ||||
| -webkit-transform: scaleY(0.4); | -webkit-transform: scaleY(0.4); | ||||
| } | } | ||||
| 20% { | 20% { | ||||
| transform: scaleY(1.0); | transform: scaleY(1.0); | ||||
| -webkit-transform: scaleY(1.0); | -webkit-transform: scaleY(1.0); | ||||
| } | } | ||||
| } | } | ||||
| /* 消息框 */ | /* 消息框 */ | ||||
| .alert { | .alert { | ||||
| @@ -137,6 +145,7 @@ | |||||
| width: calc(100% - 260px); | width: calc(100% - 260px); | ||||
| box-sizing: border-box; | box-sizing: border-box; | ||||
| } | } | ||||
| /* 弹窗 (background) */ | /* 弹窗 (background) */ | ||||
| #imageModal { | #imageModal { | ||||
| @@ -151,6 +160,7 @@ | |||||
| background-color: rgb(0, 0, 0); | background-color: rgb(0, 0, 0); | ||||
| background-color: rgba(0, 0, 0, 0.4); | background-color: rgba(0, 0, 0, 0.4); | ||||
| } | } | ||||
| /* 弹窗内容 */ | /* 弹窗内容 */ | ||||
| .modal-content { | .modal-content { | ||||
| @@ -160,6 +170,7 @@ | |||||
| border: 1px solid #888; | border: 1px solid #888; | ||||
| width: 30%; | width: 30%; | ||||
| } | } | ||||
| /* 关闭按钮 */ | /* 关闭按钮 */ | ||||
| .close { | .close { | ||||
| @@ -184,12 +195,12 @@ | |||||
| cursor: pointer; | cursor: pointer; | ||||
| pointer-events: none; | pointer-events: none; | ||||
| } | } | ||||
| .time-show{ | |||||
| .time-show { | |||||
| font-size: 10px; | font-size: 10px; | ||||
| margin-top: 0.4rem; | margin-top: 0.4rem; | ||||
| display: inline-block; | display: inline-block; | ||||
| } | } | ||||
| </style> | </style> | ||||
| <!-- 弹窗 --> | <!-- 弹窗 --> | ||||
| @@ -208,49 +219,56 @@ | |||||
| {{template "repo/header" .}} | {{template "repo/header" .}} | ||||
| {{template "base/alert" .}} | {{template "base/alert" .}} | ||||
| <!-- 提示框 --> | <!-- 提示框 --> | ||||
| <div class="cloudbrain_debug" style="display: none;" data-debug="{{$.i18n.Tr "repo.debug"}}" data-debug-again="{{$.i18n.Tr "repo.debug_again"}}"></div> | |||||
| <div class="cloudbrain_debug" style="display: none;" data-debug="{{$.i18n.Tr "repo.debug"}}" | |||||
| data-debug-again="{{$.i18n.Tr "repo.debug_again"}}"></div> | |||||
| <!-- 列表容器 --> | <!-- 列表容器 --> | ||||
| <div class="ui container"> | <div class="ui container"> | ||||
| <div class="ui two column stackable grid"> | <div class="ui two column stackable grid"> | ||||
| <div class="column"> | |||||
| <div class="ui blue small menu compact selectcloudbrain"> | |||||
| <a class="active item" href="{{.RepoLink}}/debugjob?debugListType=all">{{$.i18n.Tr "repo.modelarts.notebook"}}</a> | |||||
| <a class="item" href="{{.RepoLink}}/modelarts/train-job">{{$.i18n.Tr "repo.modelarts.train_job"}}</a> | |||||
| <a class="item" href="{{.RepoLink}}/modelarts/inference-job">{{$.i18n.Tr "repo.modelarts.infer_job"}}</a> | |||||
| <a class="item" href="{{.RepoLink}}/cloudbrain/benchmark">{{$.i18n.Tr "repo.modelarts.evaluate_job"}}</a> | |||||
| </div> | |||||
| <div class="column"> | |||||
| <div class="ui blue small menu compact selectcloudbrain"> | |||||
| <a class="active item" | |||||
| href="{{.RepoLink}}/debugjob?debugListType=all">{{$.i18n.Tr "repo.modelarts.notebook"}}</a> | |||||
| <a class="item" | |||||
| href="{{.RepoLink}}/modelarts/train-job">{{$.i18n.Tr "repo.modelarts.train_job"}}</a> | |||||
| <a class="item" | |||||
| href="{{.RepoLink}}/modelarts/inference-job">{{$.i18n.Tr "repo.modelarts.infer_job"}}</a> | |||||
| <a class="item" | |||||
| href="{{.RepoLink}}/cloudbrain/benchmark">{{$.i18n.Tr "repo.modelarts.evaluate_job"}}</a> | |||||
| </div> | </div> | ||||
| <div class="column right aligned"> | |||||
| <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;"> | |||||
| {{svg "octicon-server" 16}} | |||||
| <div class="default text" style="color: rgba(0,0,0,.87);"></div> | |||||
| <i class="dropdown icon"></i> | |||||
| <div class="menu"> | |||||
| <div class="item" data-value="all">{{$.i18n.Tr "repo.gpu_type_all"}}</div> | |||||
| <div class="item" data-value="CPU/GPU">CPU/GPU</div> | |||||
| <div class="item" data-value="NPU">NPU</div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="column right aligned"> | |||||
| <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;"> | |||||
| {{svg "octicon-server" 16}} | |||||
| <div class="default text" style="color: rgba(0,0,0,.87);"></div> | |||||
| <i class="dropdown icon"></i> | |||||
| <div class="menu"> | |||||
| <div class="item" data-value="all">{{$.i18n.Tr "repo.gpu_type_all"}}</div> | |||||
| <div class="item" data-value="CPU/GPU">CPU/GPU</div> | |||||
| <div class="item" data-value="NPU">NPU</div> | |||||
| </div> | </div> | ||||
| {{if .Permission.CanWrite $.UnitTypeCloudBrain}} | |||||
| <a class="ui green button" href="{{.RepoLink}}/cloudbrain/create">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a> | |||||
| {{else}} | |||||
| <a class="ui disabled button">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a> | |||||
| {{end}} | |||||
| </div> | </div> | ||||
| {{if .Permission.CanWrite $.UnitTypeCloudBrain}} | |||||
| <a class="ui green button" | |||||
| href="{{.RepoLink}}/cloudbrain/create">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a> | |||||
| {{else}} | |||||
| <a class="ui disabled button">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a> | |||||
| {{end}} | |||||
| </div> | |||||
| </div> | </div> | ||||
| {{if eq 0 (len .Tasks)}} | {{if eq 0 (len .Tasks)}} | ||||
| <div class="ui placeholder segment bgtask-none"> | <div class="ui placeholder segment bgtask-none"> | ||||
| <div class="ui icon header bgtask-header-pic"></div> | |||||
| <div class="bgtask-content-header">{{$.i18n.Tr "repo.debug_task_not_created"}}</div> | |||||
| <div class="bgtask-content"> | |||||
| {{if $.RepoIsEmpty}} | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.repo_not_initialized" .RepoLink | Safe}}</div> | |||||
| {{end}} | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.debug_task_running_limit"}}</div> | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.dataset_desc"}}</div> | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.platform_instructions" | Safe}}</div> | |||||
| </div> | |||||
| <div class="ui icon header bgtask-header-pic"></div> | |||||
| <div class="bgtask-content-header">{{$.i18n.Tr "repo.debug_task_not_created"}}</div> | |||||
| <div class="bgtask-content"> | |||||
| {{if $.RepoIsEmpty}} | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.repo_not_initialized" .RepoLink | Safe}}</div> | |||||
| {{end}} | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.debug_task_running_limit"}}</div> | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.dataset_desc"}}</div> | |||||
| <div class="bgtask-content-txt">{{$.i18n.Tr "repo.platform_instructions" | Safe}}</div> | |||||
| </div> | |||||
| </div> | </div> | ||||
| {{else}} | {{else}} | ||||
| <!-- 中下列表展示区 --> | <!-- 中下列表展示区 --> | ||||
| @@ -287,29 +305,40 @@ | |||||
| <div class="row"> | <div class="row"> | ||||
| <!-- 任务名 --> | <!-- 任务名 --> | ||||
| <div class="four wide column"> | <div class="four wide column"> | ||||
| <a class="title" href='{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}{{else}}{{$.RepoLink}}/modelarts/notebook/{{.Cloudbrain.ID}}{{end}}' title="{{.JobName}}" style="font-size: 14px;"> | |||||
| <span class="fitted text_over" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | |||||
| <a class="title" | |||||
| href='{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}{{else}}{{$.RepoLink}}/modelarts/notebook/{{.Cloudbrain.ID}}{{end}}' | |||||
| title="{{.DisplayJobName}}" style="font-size: 14px;"> | |||||
| <span class="fitted text_over" | |||||
| style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | |||||
| </a> | </a> | ||||
| </div> | </div> | ||||
| <div class="two wide column text center"> | <div class="two wide column text center"> | ||||
| <!--任务状态 --> | |||||
| <span class="job-status" id="{{.Cloudbrain.ID}}" data-repopath="{{$.RepoRelPath}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}" data-jobid="{{.Cloudbrain.ID}}" data-resource="{{.ComputeResource}}"> | |||||
| <span><i id="{{.Cloudbrain.ID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.Cloudbrain.ID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| <!--任务状态 --> | |||||
| <span class="job-status" id="{{.Cloudbrain.ID}}" | |||||
| data-repopath="{{$.RepoRelPath}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}" | |||||
| data-jobid="{{.Cloudbrain.ID}}" data-resource="{{.ComputeResource}}"> | |||||
| <span><i id="{{.Cloudbrain.ID}}-icon" style="vertical-align: middle;" | |||||
| class="{{.Status}}"></i><span id="{{.Cloudbrain.ID}}-text" | |||||
| style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| </span> | </span> | ||||
| </div> | </div> | ||||
| <div class="two wide column text center"> | <div class="two wide column text center"> | ||||
| <!-- 任务创建时间 --> | <!-- 任务创建时间 --> | ||||
| <span style="font-size: 12px;margin-left: 0.4rem;" class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span> | |||||
| <span style="font-size: 12px;margin-left: 0.4rem;" | |||||
| class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span> | |||||
| </div> | </div> | ||||
| <div class="two wide column text center"> | <div class="two wide column text center"> | ||||
| <!-- 任务计算资源 --> | |||||
| <span style="font-size: 12px;margin-left: 0.4rem;" class="">{{.ComputeResource}}</span> | |||||
| <!-- 任务计算资源 --> | |||||
| <span style="font-size: 12px;margin-left: 0.4rem;" | |||||
| class="">{{.ComputeResource}}</span> | |||||
| </div> | </div> | ||||
| <div class="one wide column text center"> | <div class="one wide column text center"> | ||||
| {{if .User.Name}} | {{if .User.Name}} | ||||
| <a href="{{AppSubUrl}}/{{.User.Name}}" title="{{.User.Name}}"><img class="ui avatar image" src="{{.User.RelAvatarLink}}"></a> | |||||
| <a href="{{AppSubUrl}}/{{.User.Name}}" title="{{.User.Name}}"><img | |||||
| class="ui avatar image" src="{{.User.RelAvatarLink}}"></a> | |||||
| {{else}} | {{else}} | ||||
| <a title="Ghost"><img class="ui avatar image" src="{{AppSubUrl}}/user/avatar/Ghost/-1"></a> | |||||
| <a title="Ghost"><img class="ui avatar image" | |||||
| src="{{AppSubUrl}}/user/avatar/Ghost/-1"></a> | |||||
| {{end}} | {{end}} | ||||
| </div> | </div> | ||||
| <div class="five wide column text center"> | <div class="five wide column text center"> | ||||
| @@ -323,79 +352,103 @@ | |||||
| <form id="debugAgainForm-{{.Cloudbrain.ID}}"> | <form id="debugAgainForm-{{.Cloudbrain.ID}}"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| {{if .CanDebug}} | {{if .CanDebug}} | ||||
| {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} | |||||
| <a style="margin: 0 1rem;" id="ai-debug-{{.Cloudbrain.ID}}" class='ui basic ai_debug {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}}disabled {{else}}blue {{end}}button' data-jobid="{{.Cloudbrain.ID}}" data-repopath='{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/'> | |||||
| {{$.i18n.Tr "repo.debug"}} | |||||
| </a> | |||||
| {{else}} | |||||
| <a id="ai-debug-{{.Cloudbrain.ID}}" class='ui basic ai_debug {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}} disabled {{else}}blue {{end}}button' data-jobid="{{.Cloudbrain.ID}}" data-repopath='{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/' data-linkpath='{{$.Link}}'> | |||||
| {{$.i18n.Tr "repo.debug_again"}} | |||||
| </a> | |||||
| {{end}} | |||||
| {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} | |||||
| <a style="margin: 0 1rem;" id="ai-debug-{{.Cloudbrain.ID}}" | |||||
| class='ui basic ai_debug {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}}disabled {{else}}blue {{end}}button' | |||||
| data-jobid="{{.Cloudbrain.ID}}" | |||||
| data-repopath='{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/'> | |||||
| {{$.i18n.Tr "repo.debug"}} | |||||
| </a> | |||||
| {{else}} | {{else}} | ||||
| {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} | |||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.debug"}} | |||||
| </a> | |||||
| {{else}} | |||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.debug_again"}} | |||||
| </a> | |||||
| {{end}} | |||||
| <a id="ai-debug-{{.Cloudbrain.ID}}" | |||||
| class='ui basic ai_debug {{if eq .Status "CREATING" "STOPPING" "WAITING" "STARTING"}} disabled {{else}}blue {{end}}button' | |||||
| data-jobid="{{.Cloudbrain.ID}}" | |||||
| data-repopath='{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/' | |||||
| data-linkpath='{{$.Link}}'> | |||||
| {{$.i18n.Tr "repo.debug_again"}} | |||||
| </a> | |||||
| {{end}} | |||||
| {{else}} | |||||
| {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} | |||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.debug"}} | |||||
| </a> | |||||
| {{else}} | |||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.debug_again"}} | |||||
| </a> | |||||
| {{end}} | |||||
| {{end}} | {{end}} | ||||
| </form> | </form> | ||||
| <!-- 停止 --> | <!-- 停止 --> | ||||
| <form id="stopForm-{{.Cloudbrain.ID}}" style="margin-left:-1px;"> | |||||
| <form id="stopForm-{{.Cloudbrain.ID}}" style="margin-left:-1px;"> | |||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| {{if .CanDel}} | {{if .CanDel}} | ||||
| <a id="ai-stop-{{.Cloudbrain.ID}}" class='ui basic ai_stop {{if eq .Status "STOPPED" "FAILED" "START_FAILED" "STOPPING" "CREATING" "STARTING" "SUCCEEDED"}}disabled {{else}}blue {{end}}button' data-repopath="{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/stop" data-jobid="{{.Cloudbrain.ID}}"> | |||||
| <a id="ai-stop-{{.Cloudbrain.ID}}" | |||||
| class='ui basic ai_stop {{if eq .Status "STOPPED" "FAILED" "START_FAILED" "STOPPING" "CREATING" "STARTING" "SUCCEEDED"}}disabled {{else}}blue {{end}}button' | |||||
| data-repopath="{{$.RepoLink}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/stop" | |||||
| data-jobid="{{.Cloudbrain.ID}}"> | |||||
| {{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
| </a> | </a> | ||||
| {{else}} | {{else}} | ||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.stop"}} | |||||
| <a class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.stop"}} | |||||
| </a> | </a> | ||||
| {{end}} | {{end}} | ||||
| </form> | </form> | ||||
| <!-- 删除 --> | <!-- 删除 --> | ||||
| <form id="delForm-{{.Cloudbrain.ID}}" action="{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain{{else}}{{$.RepoLink}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/del" method="post"> | |||||
| <form id="delForm-{{.Cloudbrain.ID}}" | |||||
| action="{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain{{else}}{{$.RepoLink}}/modelarts/notebook{{end}}/{{.Cloudbrain.ID}}/del" | |||||
| method="post"> | |||||
| <input type="hidden" name="debugListType" value="{{$.ListType}}"> | <input type="hidden" name="debugListType" value="{{$.ListType}}"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| {{if .CanDel}} | {{if .CanDel}} | ||||
| <a id="ai-delete-{{.Cloudbrain.ID}}" class='ui basic ai_delete {{if eq .Status "STOPPED" "FAILED" "START_FAILED"}}blue {{else}}disabled {{end}}button' style="border-radius: .28571429rem;"> | |||||
| <a id="ai-delete-{{.Cloudbrain.ID}}" | |||||
| class='ui basic ai_delete {{if eq .Status "STOPPED" "FAILED" "START_FAILED"}}blue {{else}}disabled {{end}}button' | |||||
| style="border-radius: .28571429rem;"> | |||||
| {{$.i18n.Tr "repo.delete"}} | {{$.i18n.Tr "repo.delete"}} | ||||
| </a> | </a> | ||||
| {{else}} | {{else}} | ||||
| <a class="ui basic button disabled" style="border-radius: .28571429rem;"> | |||||
| <a class="ui basic button disabled" style="border-radius: .28571429rem;"> | |||||
| {{$.i18n.Tr "repo.delete"}} | {{$.i18n.Tr "repo.delete"}} | ||||
| </a> | </a> | ||||
| {{end}} | {{end}} | ||||
| </form> | </form> | ||||
| </div> | </div> | ||||
| <div class="ui compact buttons" style="{{if eq .ComputeResource "CPU/GPU"}} visibility: visible {{else}} visibility: hidden{{end}}"> | |||||
| <div class="ui dropdown" id="model_more" style="padding: .58928571em 1.125em .58928571em;"> | |||||
| <div class="ui compact buttons" | |||||
| style="{{if eq .ComputeResource "CPU/GPU"}} visibility: visible {{else}} visibility: hidden{{end}}"> | |||||
| <div class="ui dropdown" id="model_more" | |||||
| style="padding: .58928571em 1.125em .58928571em;"> | |||||
| <div class="text">{{$.i18n.Tr "repo.more"}}</div> | <div class="text">{{$.i18n.Tr "repo.more"}}</div> | ||||
| <i class="dropdown icon"></i> | <i class="dropdown icon"></i> | ||||
| <div class="menu" style="right: auto;"> | <div class="menu" style="right: auto;"> | ||||
| <div class="item" style="padding: 0 !important;"> | <div class="item" style="padding: 0 !important;"> | ||||
| {{if .CanDebug}} | {{if .CanDebug}} | ||||
| <a id="model-image-{{.Cloudbrain.ID}}" class='imageBtn ui basic {{if ne .Status "RUNNING"}}disabled {{else}}blue {{end}}button' href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/commit_image">{{$.i18n.Tr "repo.submit_image"}}</a> | |||||
| <a id="model-image-{{.Cloudbrain.ID}}" | |||||
| class='imageBtn ui basic {{if ne .Status "RUNNING"}}disabled {{else}}blue {{end}}button' | |||||
| href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/commit_image">{{$.i18n.Tr "repo.submit_image"}}</a> | |||||
| {{else}} | {{else}} | ||||
| <a class="imageBtn ui basic disabled button">{{$.i18n.Tr "repo.submit_image"}}</a> | |||||
| <a | |||||
| class="imageBtn ui basic disabled button">{{$.i18n.Tr "repo.submit_image"}}</a> | |||||
| {{end}} | {{end}} | ||||
| </div> | </div> | ||||
| <div class="item" style="padding: 0 !important;"> | <div class="item" style="padding: 0 !important;"> | ||||
| <!-- 模型下载 --> | |||||
| <!-- 模型下载 --> | |||||
| {{if .CanDebug}} | {{if .CanDebug}} | ||||
| <a class="ui basic blue button" href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/models" target="_blank">{{$.i18n.Tr "repo.download"}}</a> | |||||
| <a class="ui basic blue button" | |||||
| href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/models" | |||||
| target="_blank">{{$.i18n.Tr "repo.download"}}</a> | |||||
| {{else}} | {{else}} | ||||
| <a class="ui basic disabled button">{{$.i18n.Tr "repo.download"}}</a> | |||||
| <a | |||||
| class="ui basic disabled button">{{$.i18n.Tr "repo.download"}}</a> | |||||
| {{end}} | {{end}} | ||||
| </div> | </div> | ||||
| {{if and (ne .JobType "DEBUG") (eq .Cloudbrain.Type 0)}} | {{if and (ne .JobType "DEBUG") (eq .Cloudbrain.Type 0)}} | ||||
| <div class="item" style="padding: 0 !important;"> | <div class="item" style="padding: 0 !important;"> | ||||
| <a class="ui basic blue button" href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/rate" target="_blank"> | |||||
| <a class="ui basic blue button" | |||||
| href="{{$.RepoLink}}/cloudbrain/{{.Cloudbrain.ID}}/rate" | |||||
| target="_blank"> | |||||
| 评分 | 评分 | ||||
| </a> | </a> | ||||
| </div> | </div> | ||||
| @@ -405,20 +458,15 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <!-- 镜像列表弹窗 --> | <!-- 镜像列表弹窗 --> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {{end}} | |||||
| {{end}} | |||||
| <div id="app" style="margin-top: 2rem;"> | <div id="app" style="margin-top: 2rem;"> | ||||
| <div class="center"> | <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 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> | </el-pagination> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -457,42 +505,41 @@ | |||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script> | <script> | ||||
| // 调试和评分新开窗口 | // 调试和评分新开窗口 | ||||
| const {AppSubUrl, StaticUrlPrefix, csrf} = window.config; | |||||
| let url={{.RepoLink}} | |||||
| let redirect_to = {{$.Link}} | |||||
| let getParam=getQueryVariable('debugListType') | |||||
| const { AppSubUrl, StaticUrlPrefix, csrf } = window.config; | |||||
| let url = {{.RepoLink }} | |||||
| let redirect_to = {{ $.Link }} | |||||
| let getParam = getQueryVariable('debugListType') | |||||
| let dropdownValue = ['all','',false].includes(getParam)? '{{$.i18n.Tr "repo.gpu_type_all"}}' : getParam | |||||
| let dropdownValue = ['all', '', false].includes(getParam) ? '{{$.i18n.Tr "repo.gpu_type_all"}}' : getParam | |||||
| // localStorage.setItem('all',location.href) | // localStorage.setItem('all',location.href) | ||||
| function getQueryVariable(variable) | |||||
| { | |||||
| function getQueryVariable(variable) { | |||||
| let query = window.location.search.substring(1); | let query = window.location.search.substring(1); | ||||
| let vars = query.split("&"); | let vars = query.split("&"); | ||||
| for (let i=0;i<vars.length;i++) { | |||||
| let pair = vars[i].split("="); | |||||
| if(pair[0] == variable){return pair[1];} | |||||
| for (let i = 0; i < vars.length; i++) { | |||||
| let pair = vars[i].split("="); | |||||
| if (pair[0] == variable) { return pair[1]; } | |||||
| } | } | ||||
| return(false); | |||||
| return (false); | |||||
| } | } | ||||
| $(document).ready(function(){ | |||||
| dropdownValue = dropdownValue==="CPU%2FGPU"? 'CPU/GPU' : dropdownValue | |||||
| $(document).ready(function () { | |||||
| dropdownValue = dropdownValue === "CPU%2FGPU" ? 'CPU/GPU' : dropdownValue | |||||
| $('.default.text').text(dropdownValue) | $('.default.text').text(dropdownValue) | ||||
| $('.ui.dropdown') | $('.ui.dropdown') | ||||
| .dropdown({ | |||||
| action: 'hide', | |||||
| }) | |||||
| .dropdown({ | |||||
| action: 'hide', | |||||
| }) | |||||
| $('.ui.selection.dropdown').dropdown({ | $('.ui.selection.dropdown').dropdown({ | ||||
| onChange:function(value){ | |||||
| onChange: function (value) { | |||||
| location.href = `${url}/debugjob?debugListType=${value}` | location.href = `${url}/debugjob?debugListType=${value}` | ||||
| } | } | ||||
| }) | }) | ||||
| $('.message .close') | $('.message .close') | ||||
| .on('click', function() { | |||||
| $(this) | |||||
| .closest('.message') | |||||
| .transition('fade') | |||||
| }) | |||||
| .on('click', function () { | |||||
| $(this) | |||||
| .closest('.message') | |||||
| .transition('fade') | |||||
| }) | |||||
| }) | }) | ||||
| </script> | |||||
| </script> | |||||
| @@ -1,179 +1,213 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <style> | <style> | ||||
| .according-panel-heading{ | |||||
| box-sizing: border-box; | |||||
| padding: 8px 16px; | |||||
| color: #252b3a; | |||||
| background-color: #f2f5fc; | |||||
| line-height: 1.5; | |||||
| cursor: pointer; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| .accordion-panel-title { | |||||
| margin-top: 0; | |||||
| margin-bottom: 0; | |||||
| color: #252b3a; | |||||
| } | |||||
| .accordion-panel-title-content{ | |||||
| vertical-align: middle; | |||||
| display: inline-block; | |||||
| width: calc(100% - 32px); | |||||
| cursor: default; | |||||
| } | |||||
| .acc-margin-bottom { | |||||
| margin-bottom: 5px; | |||||
| } | |||||
| .title_text { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ac-display-inblock { | |||||
| display: inline-block; | |||||
| } | |||||
| .cti-mgRight-sm { | |||||
| margin-right: 8px; | |||||
| } | |||||
| .ac-text-normal { | |||||
| font-size: 14px; | |||||
| color: #575d6c; | |||||
| } | |||||
| .uc-accordionTitle-black { | |||||
| color: #333; | |||||
| } | |||||
| .accordion-border{ | |||||
| border:1px solid #cce2ff; | |||||
| } | |||||
| .padding0{ | |||||
| padding: 0 !important; | |||||
| } | |||||
| .content-pad{ | |||||
| padding: 15px 35px; | |||||
| } | |||||
| .content-margin{ | |||||
| margin:10px 5px ; | |||||
| } | |||||
| .tab_2_content { | |||||
| min-height: 460px; | |||||
| margin-left: 10px; | |||||
| } | |||||
| .ac-grid { | |||||
| display: block; | |||||
| *zoom: 1; | |||||
| } | |||||
| .ac-grid-col { | |||||
| float: left; | |||||
| width: 100%; | |||||
| } | |||||
| .ac-grid-col2 .ac-grid-col { | |||||
| width: 50%; | |||||
| } | |||||
| .ti-form { | |||||
| text-align: left; | |||||
| max-width: 100%; | |||||
| vertical-align: middle; | |||||
| } | |||||
| .ti-form>tbody { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-form>tbody, .ti-form>tbody>tr { | |||||
| vertical-align: inherit; | |||||
| } | |||||
| .info_text { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-text-form-label { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| color: #8a8e99; | |||||
| font-size: 12px; | |||||
| white-space: nowrap !important; | |||||
| width: 80px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .ti-text-form-content{ | |||||
| line-height: 30px; | |||||
| padding-bottom: 20px; | |||||
| } | |||||
| .ti-form>tbody>tr>td { | |||||
| vertical-align: top; | |||||
| white-space: normal; | |||||
| } | |||||
| td, th { | |||||
| padding: 0; | |||||
| } | |||||
| .ac-grid-col .text-span { | |||||
| width: 450px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .text-span-new { | |||||
| width: 800px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| height: 20%; | |||||
| word-break: break-all; | |||||
| } | |||||
| .redo-color{ | |||||
| color: #3291F8; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child){ | |||||
| margin-right: 10px; | |||||
| padding-right: 11px; | |||||
| text-decoration: none!important; | |||||
| color: #526ecc; | |||||
| cursor: pointer; | |||||
| display: inline-block; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| position: relative; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child):after { | |||||
| content: ""; | |||||
| display: inline-block; | |||||
| position: absolute; | |||||
| height: 12px; | |||||
| right: 0; | |||||
| top: 50%; | |||||
| -webkit-transform: translateY(-6px); | |||||
| -ms-transform: translateY(-6px); | |||||
| -o-transform: translateY(-6px); | |||||
| transform: translateY(-6px); | |||||
| border-right: 1px solid #dfe1e6; | |||||
| } | |||||
| .text-width80{ | |||||
| width: 100px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .border-according{ | |||||
| border: 1px solid #dfe1e6; | |||||
| } | |||||
| .disabled { | |||||
| .according-panel-heading { | |||||
| box-sizing: border-box; | |||||
| padding: 8px 16px; | |||||
| color: #252b3a; | |||||
| background-color: #f2f5fc; | |||||
| line-height: 1.5; | |||||
| cursor: pointer; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| .accordion-panel-title { | |||||
| margin-top: 0; | |||||
| margin-bottom: 0; | |||||
| color: #252b3a; | |||||
| } | |||||
| .accordion-panel-title-content { | |||||
| vertical-align: middle; | |||||
| display: inline-block; | |||||
| width: calc(100% - 32px); | |||||
| cursor: default; | |||||
| } | |||||
| .acc-margin-bottom { | |||||
| margin-bottom: 5px; | |||||
| } | |||||
| .title_text { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ac-display-inblock { | |||||
| display: inline-block; | |||||
| } | |||||
| .cti-mgRight-sm { | |||||
| margin-right: 8px; | |||||
| } | |||||
| .ac-text-normal { | |||||
| font-size: 14px; | |||||
| color: #575d6c; | |||||
| } | |||||
| .uc-accordionTitle-black { | |||||
| color: #333; | |||||
| } | |||||
| .accordion-border { | |||||
| border: 1px solid #cce2ff; | |||||
| } | |||||
| .padding0 { | |||||
| padding: 0 !important; | |||||
| } | |||||
| .content-pad { | |||||
| padding: 15px 35px; | |||||
| } | |||||
| .content-margin { | |||||
| margin: 10px 5px; | |||||
| } | |||||
| .tab_2_content { | |||||
| min-height: 460px; | |||||
| margin-left: 10px; | |||||
| } | |||||
| .ac-grid { | |||||
| display: block; | |||||
| *zoom: 1; | |||||
| } | |||||
| .ac-grid-col { | |||||
| float: left; | |||||
| width: 100%; | |||||
| } | |||||
| .ac-grid-col2 .ac-grid-col { | |||||
| width: 50%; | |||||
| } | |||||
| .ti-form { | |||||
| text-align: left; | |||||
| max-width: 100%; | |||||
| vertical-align: middle; | |||||
| } | |||||
| .ti-form>tbody { | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-form>tbody, | |||||
| .ti-form>tbody>tr { | |||||
| vertical-align: inherit; | |||||
| } | |||||
| .info_text { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| font-size: 12px; | |||||
| } | |||||
| .ti-text-form-label { | |||||
| padding-bottom: 20px; | |||||
| padding-right: 20px; | |||||
| color: #8a8e99; | |||||
| font-size: 12px; | |||||
| white-space: nowrap !important; | |||||
| width: 80px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .ti-text-form-content { | |||||
| line-height: 30px; | |||||
| padding-bottom: 20px; | |||||
| } | |||||
| .ti-form>tbody>tr>td { | |||||
| vertical-align: top; | |||||
| white-space: normal; | |||||
| } | |||||
| td, | |||||
| th { | |||||
| padding: 0; | |||||
| } | |||||
| .ac-grid-col .text-span { | |||||
| width: 450px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .text-span-new { | |||||
| width: 800px; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| height: 20%; | |||||
| word-break: break-all; | |||||
| } | |||||
| .redo-color { | |||||
| color: #3291F8; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child) { | |||||
| margin-right: 10px; | |||||
| padding-right: 11px; | |||||
| text-decoration: none !important; | |||||
| color: #526ecc; | |||||
| cursor: pointer; | |||||
| display: inline-block; | |||||
| -moz-user-select: none; | |||||
| -webkit-user-select: none; | |||||
| -ms-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| user-select: none; | |||||
| position: relative; | |||||
| } | |||||
| .ti-action-menu-item:not(:last-child):after { | |||||
| content: ""; | |||||
| display: inline-block; | |||||
| position: absolute; | |||||
| height: 12px; | |||||
| right: 0; | |||||
| top: 50%; | |||||
| -webkit-transform: translateY(-6px); | |||||
| -ms-transform: translateY(-6px); | |||||
| -o-transform: translateY(-6px); | |||||
| transform: translateY(-6px); | |||||
| border-right: 1px solid #dfe1e6; | |||||
| } | |||||
| .text-width80 { | |||||
| width: 100px; | |||||
| line-height: 30px; | |||||
| } | |||||
| .border-according { | |||||
| border: 1px solid #dfe1e6; | |||||
| } | |||||
| .disabled { | |||||
| cursor: default; | cursor: default; | ||||
| pointer-events: none; | pointer-events: none; | ||||
| color: rgba(0,0,0,.6) !important; | |||||
| color: rgba(0, 0, 0, .6) !important; | |||||
| opacity: .45 !important; | opacity: .45 !important; | ||||
| } | |||||
| .pad20{ | |||||
| border:0px !important; | |||||
| } | |||||
| .model_file_bread{ | |||||
| margin-bottom: -0.5rem !important; | |||||
| padding-left: 1rem; | |||||
| padding-top: 0.5rem ; | |||||
| } | |||||
| } | |||||
| .pad20 { | |||||
| border: 0px !important; | |||||
| } | |||||
| .model_file_bread { | |||||
| margin-bottom: -0.5rem !important; | |||||
| padding-left: 1rem; | |||||
| padding-top: 0.5rem; | |||||
| } | |||||
| </style> | </style> | ||||
| <div id="mask"> | <div id="mask"> | ||||
| <div id="loadingPage"> | <div id="loadingPage"> | ||||
| @@ -185,7 +219,7 @@ td, th { | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="repository"> | <div class="repository"> | ||||
| {{template "repo/header" .}} | |||||
| {{template "repo/header" .}} | |||||
| <div class="ui container"> | <div class="ui container"> | ||||
| <h4 class="ui header" id="vertical-segment"> | <h4 class="ui header" id="vertical-segment"> | ||||
| <div class="ui breadcrumb"> | <div class="ui breadcrumb"> | ||||
| @@ -194,36 +228,42 @@ td, th { | |||||
| </a> | </a> | ||||
| <div class="divider"> / </div> | <div class="divider"> / </div> | ||||
| <a class="section backTodeBug" href="{{.RepoLink}}/debugjob?debugListType=all"> | <a class="section backTodeBug" href="{{.RepoLink}}/debugjob?debugListType=all"> | ||||
| {{$.i18n.Tr "repo.modelarts.notebook"}} | |||||
| {{$.i18n.Tr "repo.modelarts.notebook"}} | |||||
| </a> | </a> | ||||
| <div class="divider"> / </div> | <div class="divider"> / </div> | ||||
| {{with .task}} | |||||
| {{with .task}} | |||||
| <div class="active section">{{.DisplayJobName}}</div> | <div class="active section">{{.DisplayJobName}}</div> | ||||
| {{end}} | {{end}} | ||||
| </div> | |||||
| </div> | |||||
| </h4> | </h4> | ||||
| {{with .task}} | {{with .task}} | ||||
| <div class="ui accordion border-according" id="accordion" data-repopath="" data-jobid="" data-version=""> | |||||
| <div class="ui accordion border-according" id="accordion" data-repopath="{{$.RepoRelPath}}/modelarts/notebook" | |||||
| data-jobid="{{.ID}}" data-version=""> | |||||
| <div class="active title padding0"> | <div class="active title padding0"> | ||||
| <div class="according-panel-heading"> | <div class="according-panel-heading"> | ||||
| <div class="accordion-panel-title"> | <div class="accordion-panel-title"> | ||||
| <!-- <i class="dropdown icon"></i> --> | |||||
| <!-- <i class="dropdown icon"></i> --> | |||||
| <span class="accordion-panel-title-content"> | <span class="accordion-panel-title-content"> | ||||
| <span> | <span> | ||||
| <div class="ac-display-inblock title_text acc-margin-bottom"> | <div class="ac-display-inblock title_text acc-margin-bottom"> | ||||
| <span class="cti-mgRight-sm"> | <span class="cti-mgRight-sm"> | ||||
| {{if not (eq .StartTime 0)}} | |||||
| <td>{{TimeSinceUnix1 .StartTime}}</td> | |||||
| {{else}} | |||||
| <td>{{TimeSinceUnix1 .CreatedUnix}}<td> | |||||
| {{end}} | |||||
| </span> | |||||
| {{if not (eq .StartTime 0)}} | |||||
| <td>{{TimeSinceUnix1 .StartTime}}</td> | |||||
| {{else}} | |||||
| <td>{{TimeSinceUnix1 .CreatedUnix}} | |||||
| <td> | |||||
| {{end}} | |||||
| </span> | |||||
| <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: | <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: | ||||
| <span id="{{.VersionName}}-status-span"><i id="icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| <span id="{{.VersionName}}-status-span"><i id="icon" | |||||
| style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" | |||||
| style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
| </span> | </span> | ||||
| <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span> | |||||
| <span class="cti-mgRight-sm uc-accordionTitle-black" id="{{.VersionName}}-duration-span">{{$.duration}}</span> | |||||
| <span | |||||
| class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span> | |||||
| <span class="cti-mgRight-sm uc-accordionTitle-black" | |||||
| id="{{.VersionName}}-duration-span">{{$.duration}}</span> | |||||
| </div> | </div> | ||||
| </span> | </span> | ||||
| @@ -265,36 +305,38 @@ td, th { | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.User.Name}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
| {{.User.Name}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.computing_resources"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-computeresource"> | |||||
| {{.ComputeResource}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.computing_resources"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-computeresource"> | |||||
| {{.ComputeResource}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.createtime"}} | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.createtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-createtime"> | |||||
| {{TimeSinceUnix1 .CreatedUnix}} | |||||
| </div> | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-createtime"> | |||||
| {{TimeSinceUnix1 .CreatedUnix}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| @@ -303,40 +345,41 @@ td, th { | |||||
| </td> | </td> | ||||
| <td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
| <div class="text-span text-span-w" id="{{.VersionName}}-duration"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-duration"> | |||||
| {{$.duration}} | {{$.duration}} | ||||
| </div> | </div> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.datasetdownload"}} | |||||
| </td> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.datasetdownload"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span-new" id="model_description"> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span-new" id="model_description"> | |||||
| {{$.datasetDownloadLink}} | {{$.datasetDownloadLink}} | ||||
| </div> | |||||
| </td> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.description"}} | |||||
| </td> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "cloudbrain.description"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span-new" id="model_description"> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span-new" id="model_description"> | |||||
| {{.Description}} | {{.Description}} | ||||
| </div> | |||||
| </td> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | </tr> | ||||
| </tbody> | </tbody> | ||||
| </table> | </table> | ||||
| </div> | </div> | ||||
| <div class="ac-grid-col"> | <div class="ac-grid-col"> | ||||
| <table class="ti-form"> | |||||
| <tbody class="ti-text-form"> | |||||
| <table class="ti-form"> | |||||
| <tbody class="ti-text-form"> | |||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
| @@ -350,33 +393,34 @@ td, th { | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dataset"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-BenchmarkTypeName"> | |||||
| {{.DatasetName}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.dataset"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-BenchmarkTypeName"> | |||||
| {{.DatasetName}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.resource_spec}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{$.resource_spec}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
| {{$.i18n.Tr "repo.cloudbrain.time.starttime"}} | {{$.i18n.Tr "repo.cloudbrain.time.starttime"}} | ||||
| @@ -384,44 +428,46 @@ td, th { | |||||
| <td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
| <div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
| <div class="text-span text-span-w" id="{{.VersionName}}-startTime"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-startTime"> | |||||
| {{if not (eq .StartTime 0)}} | {{if not (eq .StartTime 0)}} | ||||
| {{TimeSinceUnix1 .StartTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| {{TimeSinceUnix1 .StartTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.endtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" id="{{.VersionName}}-EndTime"> | |||||
| {{if not (eq .EndTime 0)}} | |||||
| {{TimeSinceUnix1 .EndTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </div> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.time.endtime"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w" | |||||
| id="{{.VersionName}}-EndTime"> | |||||
| {{if not (eq .EndTime 0)}} | |||||
| {{TimeSinceUnix1 .EndTime}} | |||||
| {{else}} | |||||
| -- | |||||
| {{end}} | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -457,24 +503,10 @@ td, th { | |||||
| <script> | <script> | ||||
| $('.menu .item').tab() | $('.menu .item').tab() | ||||
| $(document).ready(function(){ | |||||
| $('.ui.accordion').accordion({selector:{trigger:'.icon'}}); | |||||
| $(document).ready(function () { | |||||
| $('.ui.accordion').accordion({ selector: { trigger: '.icon' } }); | |||||
| }); | }); | ||||
| $(document).ready(function(){ | |||||
| $(document).ready(function () { | |||||
| $('.secondary.menu .item').tab(); | $('.secondary.menu .item').tab(); | ||||
| }); | }); | ||||
| let userName | |||||
| let repoPath | |||||
| let jobName | |||||
| $(document).ready(function(){ | |||||
| let url = window.location.href; | |||||
| let urlArr = url.split('/') | |||||
| userName = urlArr.slice(-5)[0] | |||||
| repoPath = urlArr.slice(-4)[0] | |||||
| jobName = urlArr.slice(-1)[0] | |||||
| }) | |||||
| </script> | |||||
| </script> | |||||
| @@ -2,7 +2,9 @@ export default async function initCloudrain() { | |||||
| let debug_button = $('.cloudbrain_debug').data('debug') | let debug_button = $('.cloudbrain_debug').data('debug') | ||||
| let debug_again_button = $('.cloudbrain_debug').data('debug-again') | let debug_again_button = $('.cloudbrain_debug').data('debug-again') | ||||
| let timeid = window.setInterval(loadJobStatus, 15000); | let timeid = window.setInterval(loadJobStatus, 15000); | ||||
| let timeidShow = window.setInterval(loadShowJobStatus, 15000); | |||||
| $(document).ready(loadJobStatus); | $(document).ready(loadJobStatus); | ||||
| $(document).ready(loadShowJobStatus); | |||||
| function loadJobStatus() { | function loadJobStatus() { | ||||
| $(".job-status").each((index, job) => { | $(".job-status").each((index, job) => { | ||||
| const ID = job.dataset.jobid; | const ID = job.dataset.jobid; | ||||
| @@ -10,7 +12,7 @@ export default async function initCloudrain() { | |||||
| // const computeResource = job.dataset.resource | // const computeResource = job.dataset.resource | ||||
| const versionname = job.dataset.version | const versionname = job.dataset.version | ||||
| const status_text = $(`#${ID}-text`).text() | 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'] | |||||
| 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)) { | if (finalState.includes(status_text)) { | ||||
| return | return | ||||
| } | } | ||||
| @@ -19,46 +21,83 @@ export default async function initCloudrain() { | |||||
| const ID = data.ID || data.JobID | const ID = data.ID || data.JobID | ||||
| const status = data.JobStatus | const status = data.JobStatus | ||||
| const duration = data.JobDuration | const duration = data.JobDuration | ||||
| $('#duration-'+ID).text(duration) | |||||
| console.log(status,["STOPPED"].includes(status)) | |||||
| $('#duration-' + ID).text(duration) | |||||
| if (status != status_text) { | if (status != status_text) { | ||||
| $('#' + ID+'-icon').removeClass().addClass(status) | |||||
| $('#' + ID+ '-text').text(status) | |||||
| $('#' + ID + '-icon').removeClass().addClass(status) | |||||
| $('#' + ID + '-text').text(status) | |||||
| finalState.includes(status) && $('#' + ID + '-stop').removeClass('blue').addClass('disabled') | 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") { | |||||
| $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_button).css("margin", "0 1rem") | |||||
| $('#model-image-' + ID).removeClass('disabled').addClass('blue') | |||||
| } | } | ||||
| if(status!=="RUNNING"){ | |||||
| if (status !== "RUNNING") { | |||||
| // $('#model-debug-'+ID).removeClass('blue') | // $('#model-debug-'+ID).removeClass('blue') | ||||
| // $('#model-debug-'+ID).addClass('disabled') | // $('#model-debug-'+ID).addClass('disabled') | ||||
| $('#model-image-'+ID).removeClass('blue').addClass('disabled') | |||||
| $('#model-image-' + ID).removeClass('blue').addClass('disabled') | |||||
| } | } | ||||
| if(["CREATING","STOPPING","WAITING","STARTING"].includes(status)){ | |||||
| $('#ai-debug-'+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(debug_again_button).css("margin","0") | |||||
| } | |||||
| if(["RUNNING","WAITING"].includes(status)){ | |||||
| $('#ai-stop-'+ID).removeClass('disabled').addClass('blue') | |||||
| if (['STOPPED', 'FAILED', 'START_FAILED', 'CREATE_FAILED', 'SUCCEEDED'].includes(status)) { | |||||
| $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_again_button).css("margin", "0") | |||||
| } | } | ||||
| if(["CREATING","STOPPING","STARTING","STOPPED","FAILED","START_FAILED","SUCCEEDED","COMPLETED","CREATE_FAILED"].includes(status)){ | |||||
| $('#ai-stop-'+ID).removeClass('blue').addClass('disabled') | |||||
| if (["RUNNING", "WAITING"].includes(status)) { | |||||
| $('#ai-stop-' + ID).removeClass('disabled').addClass('blue') | |||||
| } | } | ||||
| 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') | |||||
| if (["CREATING", "STOPPING", "STARTING", "STOPPED", "FAILED", "START_FAILED", "SUCCEEDED", "COMPLETED", "CREATE_FAILED"].includes(status)) { | |||||
| $('#ai-stop-' + ID).removeClass('blue').addClass('disabled') | |||||
| } | } | ||||
| }).fail(function(err) { | |||||
| 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 loadShowJobStatus() { | |||||
| $(".ui.accordion.border-according").each((index, job) => { | |||||
| const jobID = job.dataset.jobid; | |||||
| 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() | |||||
| if (['IMAGE_FAILED', 'SUBMIT_FAILED', 'DELETE_FAILED', 'KILLED', 'COMPLETED', 'FAILED', 'CANCELED', 'LOST', 'START_FAILED', 'SUCCEEDED', 'STOPPED'].includes(status)) { | |||||
| return | |||||
| } | |||||
| let stopArray = ["KILLED", "FAILED", "START_FAILED", "KILLING", "COMPLETED", "SUCCEEDED", "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 | |||||
| //$('#'+versionname+'-duration').text(data.JobDuration) | |||||
| $('#' + versionname + '-status').text(data.JobStatus) | |||||
| if (stopArray.includes(data.JobStatus)) { | |||||
| $('#' + versionname + '-stop').addClass('disabled') | |||||
| } | |||||
| if (data.JobStatus === "COMPLETED") { | |||||
| $('#' + versionname + '-create-model').removeClass('disabled').addClass('blue') | |||||
| } | |||||
| }).fail(function (err) { | |||||
| console.log(err); | console.log(err); | ||||
| }); | }); | ||||
| }); | }); | ||||
| }; | }; | ||||
| function assertDelete(obj,versionName,repoPath) { | |||||
| function assertDelete(obj, versionName, repoPath) { | |||||
| if (obj.style.color == "rgb(204, 204, 204)") { | if (obj.style.color == "rgb(204, 204, 204)") { | ||||
| return | return | ||||
| } else { | } else { | ||||
| @@ -66,19 +105,19 @@ export default async function initCloudrain() { | |||||
| let flag = 1; | let flag = 1; | ||||
| $('.ui.basic.modal') | $('.ui.basic.modal') | ||||
| .modal({ | .modal({ | ||||
| onDeny: function() { | |||||
| onDeny: function () { | |||||
| flag = false | flag = false | ||||
| }, | }, | ||||
| onApprove: function() { | |||||
| if(!versionName){ | |||||
| onApprove: function () { | |||||
| if (!versionName) { | |||||
| document.getElementById(delId).submit() | document.getElementById(delId).submit() | ||||
| } | } | ||||
| else{ | |||||
| deleteVersion(versionName,repoPath) | |||||
| else { | |||||
| deleteVersion(versionName, repoPath) | |||||
| } | } | ||||
| flag = true | flag = true | ||||
| }, | }, | ||||
| onHidden: function() { | |||||
| onHidden: function () { | |||||
| if (flag == false) { | if (flag == false) { | ||||
| $('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut(); | $('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut(); | ||||
| } | } | ||||
| @@ -87,157 +126,156 @@ export default async function initCloudrain() { | |||||
| .modal('show') | .modal('show') | ||||
| } | } | ||||
| } | } | ||||
| function deleteVersion(versionName,repoPath){ | |||||
| function deleteVersion(versionName, repoPath) { | |||||
| const url = `/api/v1/repos/${repoPath}` | const url = `/api/v1/repos/${repoPath}` | ||||
| $.post(url,{version_name:versionName},(data)=>{ | |||||
| if(data.StatusOK===0){ | |||||
| $.post(url, { version_name: versionName }, (data) => { | |||||
| if (data.StatusOK === 0) { | |||||
| location.reload() | location.reload() | ||||
| } | } | ||||
| }).fail(function(err) { | |||||
| console.log(err); | |||||
| }).fail(function (err) { | |||||
| console.log(err); | |||||
| }); | }); | ||||
| } | } | ||||
| $('.ui.basic.ai_delete').click(function() { | |||||
| $('.ui.basic.ai_delete').click(function () { | |||||
| const repoPath = this.dataset.repopath | const repoPath = this.dataset.repopath | ||||
| const versionName = this.dataset.version | const versionName = this.dataset.version | ||||
| if(repoPath && versionName){ | |||||
| assertDelete(this,versionName,repoPath) | |||||
| if (repoPath && versionName) { | |||||
| assertDelete(this, versionName, repoPath) | |||||
| } | } | ||||
| else{ | |||||
| else { | |||||
| assertDelete(this) | assertDelete(this) | ||||
| } | } | ||||
| }) | }) | ||||
| function stopDebug(ID,stopUrl){ | |||||
| function stopDebug(ID, stopUrl) { | |||||
| $.ajax({ | $.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(debug_again_button).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') | |||||
| 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(debug_again_button).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 { | |||||
| $('#ai-debug-' + ID).removeClass('blue').addClass('disabled') | |||||
| $('#ai-stop-' + ID).removeClass('blue').addClass('disabled') | |||||
| } | } | ||||
| }else{ | |||||
| } else { | |||||
| $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); | $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); | ||||
| } | } | ||||
| }, | }, | ||||
| error :function(res){ | |||||
| error: function (res) { | |||||
| console.log(res) | console.log(res) | ||||
| } | } | ||||
| }) | }) | ||||
| } | } | ||||
| $('.ui.basic.ai_stop').click(function() { | |||||
| $('.ui.basic.ai_stop').click(function () { | |||||
| const ID = this.dataset.jobid | const ID = this.dataset.jobid | ||||
| const repoPath = this.dataset.repopath | const repoPath = this.dataset.repopath | ||||
| stopDebug(ID,repoPath) | |||||
| stopDebug(ID, repoPath) | |||||
| }) | }) | ||||
| function stopVersion(version_name,ID,repoPath){ | |||||
| function stopVersion(version_name, ID, repoPath) { | |||||
| const url = `/api/v1/repos/${repoPath}/${ID}/stop_version` | 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) | |||||
| $.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); | |||||
| }).fail(function (err) { | |||||
| console.log(err); | |||||
| }); | }); | ||||
| } | } | ||||
| function refreshStatus(version_name,ID,repoPath){ | |||||
| function refreshStatus(version_name, ID, repoPath) { | |||||
| const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}` | const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}` | ||||
| $.get(url,(data)=>{ | |||||
| $(`#${ID}-icon`).attr("class",data.JobStatus) | |||||
| $.get(url, (data) => { | |||||
| $(`#${ID}-icon`).attr("class", data.JobStatus) | |||||
| // detail status and duration | // detail status and duration | ||||
| $(`#${ID}-text`).text(data.JobStatus) | $(`#${ID}-text`).text(data.JobStatus) | ||||
| if(["STOPPED","FAILED","START_FAILED","KILLED","COMPLETED","SUCCEEDED"].includes(data.JobStatus)){ | |||||
| $('#ai-delete-'+ID).removeClass('disabled').addClass('blue') | |||||
| if (["STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED"].includes(data.JobStatus)) { | |||||
| $('#ai-delete-' + ID).removeClass('disabled').addClass('blue') | |||||
| } | } | ||||
| }).fail(function(err) { | |||||
| }).fail(function (err) { | |||||
| console.log(err); | console.log(err); | ||||
| }); | }); | ||||
| } | } | ||||
| $('.ui.basic.ai_stop_version').click(function() { | |||||
| $('.ui.basic.ai_stop_version').click(function () { | |||||
| const ID = this.dataset.jobid | const ID = this.dataset.jobid | ||||
| const repoPath = this.dataset.repopath | const repoPath = this.dataset.repopath | ||||
| const versionName = this.dataset.version | const versionName = this.dataset.version | ||||
| stopVersion(versionName,ID,repoPath) | |||||
| stopVersion(versionName, ID, repoPath) | |||||
| }) | }) | ||||
| function getModelInfo(repoPath,modelName,versionName,jobName){ | |||||
| $.get(`${repoPath}/modelmanage/show_model_info_api?name=${modelName}`,(data)=>{ | |||||
| if(data.length===0){ | |||||
| function getModelInfo(repoPath, modelName, versionName, jobName) { | |||||
| $.get(`${repoPath}/modelmanage/show_model_info_api?name=${modelName}`, (data) => { | |||||
| if (data.length === 0) { | |||||
| $(`#${jobName}`).popup('toggle') | $(`#${jobName}`).popup('toggle') | ||||
| }else{ | |||||
| let versionData = data.filter((item)=>{ | |||||
| } else { | |||||
| let versionData = data.filter((item) => { | |||||
| return item.Version === versionName | return item.Version === versionName | ||||
| }) | }) | ||||
| if(versionData.length==0){ | |||||
| if (versionData.length == 0) { | |||||
| $(`#${jobName}`).popup('toggle') | $(`#${jobName}`).popup('toggle') | ||||
| } | } | ||||
| else{ | |||||
| else { | |||||
| location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}` | location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}` | ||||
| } | } | ||||
| } | } | ||||
| }) | }) | ||||
| } | } | ||||
| $('.goto_modelmanage').click(function() { | |||||
| $('.goto_modelmanage').click(function () { | |||||
| const repoPath = this.dataset.repopath | const repoPath = this.dataset.repopath | ||||
| const modelName = this.dataset.modelname | const modelName = this.dataset.modelname | ||||
| const versionName = this.dataset.version | const versionName = this.dataset.version | ||||
| const jobName = this.dataset.jobname | const jobName = this.dataset.jobname | ||||
| getModelInfo(repoPath,modelName,versionName,jobName) | |||||
| getModelInfo(repoPath, modelName, versionName, jobName) | |||||
| }) | }) | ||||
| function debugAgain(ID,debugUrl,redirect_to){ | |||||
| if($('#' + ID+ '-text').text()==="RUNNING"){ | |||||
| window.open(debugUrl+'debug') | |||||
| }else{ | |||||
| function debugAgain(ID, debugUrl, redirect_to) { | |||||
| if ($('#' + ID + '-text').text() === "RUNNING") { | |||||
| window.open(debugUrl + 'debug') | |||||
| } else { | |||||
| $.ajax({ | $.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'] | |||||
| 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){ | |||||
| else if (res.result_code === "0") { | |||||
| if (res.id !== ID) { | |||||
| location.reload() | 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 { | |||||
| $('#' + 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{ | |||||
| } else { | |||||
| $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); | $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); | ||||
| } | } | ||||
| }, | }, | ||||
| error :function(res){ | |||||
| error: function (res) { | |||||
| console.log(res) | console.log(res) | ||||
| } | } | ||||
| }) | }) | ||||
| } | } | ||||
| } | } | ||||
| $('.ui.basic.ai_debug').click(function() { | |||||
| $('.ui.basic.ai_debug').click(function () { | |||||
| const ID = this.dataset.jobid | const ID = this.dataset.jobid | ||||
| const repoPath = this.dataset.repopath | const repoPath = this.dataset.repopath | ||||
| const redirect_to = this.dataset.linkpath | const redirect_to = this.dataset.linkpath | ||||
| debugAgain(ID,repoPath,redirect_to) | |||||
| debugAgain(ID, repoPath, redirect_to) | |||||
| }) | }) | ||||
| } | } | ||||