@@ -44,6 +44,12 @@ | |||||
-webkit-line-clamp: 2; | -webkit-line-clamp: 2; | ||||
-webkit-box-orient: vertical; | -webkit-box-orient: vertical; | ||||
} | } | ||||
.ui.label{ | |||||
font-weight: normal; | |||||
} | |||||
.active { | |||||
color: #0366D6 !important; | |||||
} | |||||
.opacity5{ opacity:0.5;} | .opacity5{ opacity:0.5;} | ||||
.radius15{ border-radius:1.5rem !important; } | .radius15{ border-radius:1.5rem !important; } | ||||
@@ -250,9 +256,13 @@ | |||||
box-shadow: none !important; | box-shadow: none !important; | ||||
} | } | ||||
.homeorg-list .card .ui.small.header .content{ | .homeorg-list .card .ui.small.header .content{ | ||||
width: calc(100% - 3.25em); | |||||
width: calc(100% - 3.75em); | |||||
} | } | ||||
.homepro-list{ | |||||
.homepro-tit{ | |||||
z-index: 9; | |||||
position: relative; | |||||
} | |||||
.homepro-list, .homeorg-list{ | |||||
position: relative; | position: relative; | ||||
z-index: 9; | z-index: 9; | ||||
padding: 1.0em 1.0em 3.0em; | padding: 1.0em 1.0em 3.0em; | ||||
@@ -261,42 +271,156 @@ | |||||
.homepro-list .ui.card{ | .homepro-list .ui.card{ | ||||
border-radius: 15px; | border-radius: 15px; | ||||
background-color: #FFF; | background-color: #FFF; | ||||
box-shadow: 0px 5px 10px 0px rgba(105, 192, 255, 30); | |||||
border: 1px solid rgba(105, 192, 255, 40); | |||||
box-shadow: 0px 5px 10px 0px rgba(105, 192, 255, .3); | |||||
border: 1px solid rgba(105, 192, 255, .4); | |||||
min-height: 10.8em; | min-height: 10.8em; | ||||
} | } | ||||
.homepro-list .ui.card>.content>.header{ | .homepro-list .ui.card>.content>.header{ | ||||
line-height: 40px !important; | line-height: 40px !important; | ||||
} | } | ||||
.homepro-list .swiper-pagination-bullet-active{ | |||||
.homepro-list .swiper-pagination-bullet-active, .homeorg-list .swiper-pagination-bullet-active{ | |||||
width: 40px; | width: 40px; | ||||
border-radius: 4px; | |||||
border-radius: 4px; | |||||
} | } | ||||
.i-env > div{ | .i-env > div{ | ||||
position: relative; | position: relative; | ||||
} | } | ||||
/**seach**/ | |||||
/**搜索导航条适配窄屏**/ | |||||
.seachnav{ | |||||
overflow-x: auto; | |||||
overflow-y: hidden; | |||||
scrollbar-width: none; /* firefox */ | |||||
-ms-overflow-style: none; /* IE 10+ */ | |||||
} | |||||
.seachnav::-webkit-scrollbar { | |||||
display: none; /* Chrome Safari */ | |||||
} | |||||
.ui.green.button, .ui.green.buttons .button{ | |||||
background-color: #5BB973; | |||||
} | |||||
.seach .repos--seach{ | |||||
padding-bottom: 0; | |||||
border-bottom: none; | |||||
} | |||||
.seach .ui.secondary.pointing.menu{ | |||||
border-bottom: none; | |||||
} | |||||
.seach .ui.secondary.pointing.menu .item > i{ | |||||
margin-right: 5px; | |||||
} | |||||
.seach .ui.secondary.pointing.menu .active.item{ | |||||
border-bottom-width: 2px; | |||||
margin: 0 0 -1px; | |||||
} | |||||
.seach .ui.menu .active.item>.label { | |||||
background: #1684FC; | |||||
color: #FFF; | |||||
} | |||||
.seach .ui.menu .item>.label:not(.active.item>.label) { | |||||
background: #e8e8e8; | |||||
color: rgba(0,0,0,.6); | |||||
} | |||||
.highlight{ | |||||
color: red; | |||||
} | |||||
.ui.list .list>.item>img.image+.content, .ui.list>.item>img.image+.content { | |||||
width: calc(100% - 3.0em); | |||||
margin-left: 0; | |||||
} | |||||
.seach .ui.list .list>.item .header, .seach .ui.list>.item .header{ | |||||
margin-bottom: 0.5em; | |||||
font-size: 1.4rem !important; | |||||
font-weight: normal; | |||||
} | |||||
.seach .time, .seach .time a{ | |||||
font-size: 12px; | |||||
color: grey; | |||||
} | |||||
.seach .list .item.members .ui.avatar.image { | |||||
width: 3.2em; | |||||
height: 3.2em; | |||||
} | |||||
.ui.list .list>.item.members>img.image+.content, .ui.list>.item.members>img.image+.content { | |||||
width: calc(100% - 4.0em); | |||||
margin-left: 0; | |||||
} | |||||
@media only screen and (max-width: 767px) { | @media only screen and (max-width: 767px) { | ||||
.am-mt-30{ margin-top: 1.5rem !important;} | .am-mt-30{ margin-top: 1.5rem !important;} | ||||
.ui.secondary.hometop.segment{ | .ui.secondary.hometop.segment{ | ||||
margin-bottom: 2.0rem; | |||||
margin-bottom: 5.0rem; | |||||
} | } | ||||
.bannerpic, .i-code-pic{ | |||||
.bannerpic{ | |||||
display: none; | display: none; | ||||
} | } | ||||
.i-code h2::before { | |||||
left: calc(-5.0rem + 6px); | |||||
#homenews{ | |||||
bottom: -3em; | |||||
} | } | ||||
.i-code h2.am-bw::before{ | |||||
left: calc(-4.0rem + 6px); | |||||
#homenews > p { | |||||
margin-left: 1.0em; | |||||
} | |||||
.homenews{ | |||||
padding-left: 1.3em !important; | |||||
border-radius: 1.5em; | |||||
} | |||||
.homenews::before{ | |||||
left: 2em; | |||||
} | |||||
.homepro-tit > p{ | |||||
background: #FFF; | |||||
} | |||||
.homeorg{ | |||||
padding-left: 3.5em; | |||||
} | |||||
.homeorg-tit::after { | |||||
left: -2.3em; | |||||
} | |||||
.homeorg-list{ | |||||
margin: 0 0 2.0em !important; | |||||
} | |||||
.homeorg-list > .column{ | |||||
width: 3em !important; | |||||
margin-left: -0.5em; | |||||
padding: 0.5rem 0 0 !important; | |||||
} | |||||
.homeorg-list .card{ | |||||
background: none !important; | |||||
} | |||||
.homeorg-list .card > .content{ | |||||
padding: 0 !important; | |||||
} | |||||
.homeorg-list > .column .card .ui.header>img{ | |||||
width: 3.0em; | |||||
height: 3.0em; | |||||
border-radius: 2.0em; | |||||
border: 2px solid #FFF; | |||||
} | |||||
.homeorg-list > .column .card .ui.header > .content{ | |||||
display: none; | |||||
} | } | ||||
.leftline01{ | .leftline01{ | ||||
width: calc(50% - 4.0rem); | |||||
width: 4.0em; | |||||
bottom: 4em; | |||||
border-radius: 0 0 0 3.0em; | |||||
} | } | ||||
.leftline02{ | |||||
left: calc(50% - 1.0rem); | |||||
top: calc(-3.5rem - 2px); | |||||
.leftline02, .leftline02-2{ | |||||
left: 6.0em; | |||||
top: calc(-4.0em - 2px); | |||||
border-radius: 0 3.0em 3.0em 0; | |||||
width: calc(50% - 6.0em); | |||||
} | |||||
.leftline02-2 { | |||||
width: calc(50% - 8.0em); | |||||
} | |||||
.i-env .ui.cards>.card>.content .description{ | |||||
display: none; | |||||
} | } | ||||
} | } | ||||
@@ -88,12 +88,25 @@ func (a *Attachment) APIFormat() *api.Attachment { | |||||
Size: a.Size, | Size: a.Size, | ||||
UUID: a.UUID, | UUID: a.UUID, | ||||
DownloadURL: a.DownloadURL(), | DownloadURL: a.DownloadURL(), | ||||
S3DownloadURL: a.S3DownloadURL(), | |||||
} | } | ||||
} | } | ||||
// DownloadURL returns the download url of the attached file | // DownloadURL returns the download url of the attached file | ||||
func (a *Attachment) DownloadURL() string { | func (a *Attachment) DownloadURL() string { | ||||
return fmt.Sprintf("%sattachments/%s", setting.AppURL, a.UUID) | |||||
return fmt.Sprintf("%sattachments/%s?type=%d", setting.AppURL, a.UUID, a.Type) | |||||
} | |||||
// S3DownloadURL returns the s3 download url of the attached file | |||||
func (a *Attachment) S3DownloadURL() string { | |||||
url := "" | |||||
if a.Type == TypeCloudBrainOne { | |||||
url, _ = storage.Attachments.PresignedGetURL(setting.Attachment.Minio.BasePath+AttachmentRelativePath(a.UUID), a.Name) | |||||
} else if a.Type == TypeCloudBrainTwo { | |||||
url, _ = storage.ObsGetPreSignedUrl(a.UUID, a.Name) | |||||
} | |||||
return url | |||||
} | } | ||||
// AttachmentRelativePath returns the relative path | // AttachmentRelativePath returns the relative path | ||||
@@ -12,6 +12,7 @@ type RepoStatistic struct { | |||||
ID int64 `xorm:"pk autoincr" json:"-"` | ID int64 `xorm:"pk autoincr" json:"-"` | ||||
RepoID int64 `xorm:"unique(s) NOT NULL" json:"repo_id"` | RepoID int64 `xorm:"unique(s) NOT NULL" json:"repo_id"` | ||||
Name string `xorm:"INDEX" json:"name"` | Name string `xorm:"INDEX" json:"name"` | ||||
Alias string `xorm:"INDEX" json:"alias"` | |||||
OwnerName string `json:"ownerName"` | OwnerName string `json:"ownerName"` | ||||
IsPrivate bool `json:"isPrivate"` | IsPrivate bool `json:"isPrivate"` | ||||
IsMirror bool `json:"isMirror"` | IsMirror bool `json:"isMirror"` | ||||
@@ -63,6 +64,13 @@ type RepoStatistic struct { | |||||
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` | UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` | ||||
} | } | ||||
func (repo *RepoStatistic) DisplayName() string { | |||||
if repo.Alias == "" { | |||||
return repo.Name | |||||
} | |||||
return repo.Alias | |||||
} | |||||
func DeleteRepoStatDaily(date string) error { | func DeleteRepoStatDaily(date string) error { | ||||
sess := xStatistic.NewSession() | sess := xStatistic.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
@@ -6,12 +6,14 @@ | |||||
package context | package context | ||||
import ( | import ( | ||||
"encoding/base64" | |||||
"net/http" | |||||
"strings" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/auth" | "code.gitea.io/gitea/modules/auth" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"encoding/base64" | |||||
"net/http" | |||||
"gitea.com/macaron/csrf" | "gitea.com/macaron/csrf" | ||||
"gitea.com/macaron/macaron" | "gitea.com/macaron/macaron" | ||||
@@ -94,7 +96,14 @@ func Toggle(options *ToggleOptions) macaron.Handler { | |||||
return | return | ||||
} | } | ||||
ctx.SetCookie("redirect_to", setting.AppSubURL+ctx.Req.URL.RequestURI(), 0, setting.AppSubURL) | |||||
tempUrl := ctx.Req.URL.RequestURI() | |||||
if strings.Contains(tempUrl, "action/star?") || strings.Contains(tempUrl, "action/watch?") { | |||||
redirectForStarAndWatch(ctx, tempUrl) | |||||
} else { | |||||
ctx.SetCookie("redirect_to", setting.AppSubURL+ctx.Req.URL.RequestURI(), 0, setting.AppSubURL) | |||||
} | |||||
ctx.Redirect(setting.AppSubURL + "/user/login") | ctx.Redirect(setting.AppSubURL + "/user/login") | ||||
return | return | ||||
} else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm { | } else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm { | ||||
@@ -159,6 +168,17 @@ func Toggle(options *ToggleOptions) macaron.Handler { | |||||
} | } | ||||
} | } | ||||
func redirectForStarAndWatch(ctx *Context, tempUrl string) { | |||||
splits := strings.Split(tempUrl, "?") | |||||
if len(splits) > 1 { | |||||
redirectArguments := strings.Split(splits[1], "=") | |||||
if len(redirectArguments) > 0 && redirectArguments[0] == "redirect_to" { | |||||
ctx.SetCookie("redirect_to", setting.AppSubURL+strings.Replace(redirectArguments[1], "%2f", "/", -1), 0, setting.AppSubURL) | |||||
} | |||||
} | |||||
} | |||||
func basicAuth(ctx *Context) bool { | func basicAuth(ctx *Context) bool { | ||||
var siteAuth = base64.StdEncoding.EncodeToString([]byte(setting.CBAuthUser + ":" + setting.CBAuthPassword)) | var siteAuth = base64.StdEncoding.EncodeToString([]byte(setting.CBAuthUser + ":" + setting.CBAuthPassword)) | ||||
auth := ctx.Req.Header.Get("Authorization") | auth := ctx.Req.Header.Get("Authorization") | ||||
@@ -16,9 +16,10 @@ type Attachment struct { | |||||
Size int64 `json:"size"` | Size int64 `json:"size"` | ||||
DownloadCount int64 `json:"download_count"` | DownloadCount int64 `json:"download_count"` | ||||
// swagger:strfmt date-time | // swagger:strfmt date-time | ||||
Created time.Time `json:"created_at"` | |||||
UUID string `json:"uuid"` | |||||
DownloadURL string `json:"browser_download_url"` | |||||
Created time.Time `json:"created_at"` | |||||
UUID string `json:"uuid"` | |||||
DownloadURL string `json:"browser_download_url"` | |||||
S3DownloadURL string | |||||
} | } | ||||
// EditAttachmentOptions options for editing attachments | // EditAttachmentOptions options for editing attachments | ||||
@@ -6,7 +6,6 @@ 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, | ||||
@@ -17,7 +16,7 @@ var swiperNewMessage = new Swiper(".newslist", { | |||||
}, | }, | ||||
}); | }); | ||||
var swiperRepo = new Swiper(".homepro-list", { | var swiperRepo = new Swiper(".homepro-list", { | ||||
slidesPerView: 3, | |||||
slidesPerView: 1, | |||||
slidesPerColumn: 2, | slidesPerColumn: 2, | ||||
slidesPerColumnFill:'row', | slidesPerColumnFill:'row', | ||||
spaceBetween: 30, | spaceBetween: 30, | ||||
@@ -29,6 +28,37 @@ var swiperRepo = new Swiper(".homepro-list", { | |||||
delay: 2500, | delay: 2500, | ||||
disableOnInteraction: false, | disableOnInteraction: false, | ||||
}, | }, | ||||
breakpoints: { | |||||
768: { | |||||
slidesPerView: 2, | |||||
}, | |||||
1024: { | |||||
slidesPerView: 3, | |||||
}, | |||||
}, | |||||
}); | |||||
var swiperOrg = new Swiper(".homeorg-list", { | |||||
slidesPerView: 1, | |||||
slidesPerColumn: 4, | |||||
slidesPerColumnFill:'row', | |||||
spaceBetween: 15, | |||||
pagination: { | |||||
el: ".swiper-pagination", | |||||
clickable: true, | |||||
}, | |||||
autoplay: { | |||||
delay: 4500, | |||||
disableOnInteraction: false, | |||||
}, | |||||
breakpoints: { | |||||
768: { | |||||
slidesPerView: 2, | |||||
}, | |||||
1024: { | |||||
slidesPerView: 3, | |||||
}, | |||||
}, | |||||
}); | }); | ||||
var output = document.getElementById("newmessage"); | var output = document.getElementById("newmessage"); | ||||
@@ -392,7 +422,7 @@ function displayOrg(json){ | |||||
if (json != null && json.length > 0){ | if (json != null && json.length > 0){ | ||||
for(var i = 0; i < json.length;i++){ | for(var i = 0; i < json.length;i++){ | ||||
var record = json[i] | var record = json[i] | ||||
html += "<div class=\"column\">"; | |||||
html += "<div class=\"swiper-slide\">"; | |||||
html += " <a href=\"/" + record["Name"] + "\" class=\"ui fluid card\">"; | html += " <a href=\"/" + record["Name"] + "\" class=\"ui fluid card\">"; | ||||
html += " <div class=\"content\">"; | html += " <div class=\"content\">"; | ||||
html += " <div class=\"ui small header\">"; | html += " <div class=\"ui small header\">"; | ||||
@@ -408,4 +438,5 @@ function displayOrg(json){ | |||||
} | } | ||||
} | } | ||||
orgDiv.innerHTML = html; | orgDiv.innerHTML = html; | ||||
swiperOrg.updateSlides(); | |||||
} | } |
@@ -878,7 +878,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
}, reqAdmin()) | }, reqAdmin()) | ||||
}, reqAnyRepoReader()) | }, reqAnyRepoReader()) | ||||
m.Group("/cloudbrain", func() { | m.Group("/cloudbrain", func() { | ||||
m.Get("/:jobid", repo.GetCloudbrainTask) | |||||
// m.Get("/:jobid", repo.GetCloudbrainTask) | |||||
m.Get("/:jobname", repo.GetCloudbrainTask) | |||||
m.Get("/:jobid/log", repo.CloudbrainGetLog) | m.Get("/:jobid/log", repo.CloudbrainGetLog) | ||||
}, reqRepoReader(models.UnitTypeCloudBrain)) | }, reqRepoReader(models.UnitTypeCloudBrain)) | ||||
m.Group("/modelarts", func() { | m.Group("/modelarts", func() { | ||||
@@ -6,11 +6,12 @@ | |||||
package repo | package repo | ||||
import ( | import ( | ||||
"code.gitea.io/gitea/modules/log" | |||||
"net/http" | "net/http" | ||||
"sort" | "sort" | ||||
"time" | "time" | ||||
"code.gitea.io/gitea/modules/log" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/cloudbrain" | "code.gitea.io/gitea/modules/cloudbrain" | ||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
@@ -48,14 +49,12 @@ func GetCloudbrainTask(ctx *context.APIContext) { | |||||
err error | err error | ||||
) | ) | ||||
jobID := ctx.Params(":jobid") | |||||
repoID := ctx.Repo.Repository.ID | |||||
job, err := models.GetRepoCloudBrainByJobID(repoID, jobID) | |||||
jobName := ctx.Params(":jobname") | |||||
job, err := models.GetCloudbrainByName(jobName) | |||||
if err != nil { | if err != nil { | ||||
ctx.NotFound(err) | |||||
return | |||||
ctx.Data["error"] = err.Error() | |||||
} | } | ||||
jobResult, err := cloudbrain.GetJob(jobID) | |||||
jobResult, err := cloudbrain.GetJob(job.JobID) | |||||
if err != nil { | if err != nil { | ||||
ctx.NotFound(err) | ctx.NotFound(err) | ||||
return | return | ||||
@@ -84,7 +83,7 @@ func GetCloudbrainTask(ctx *context.APIContext) { | |||||
} | } | ||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"JobID": result.Config.JobID, | |||||
"JobName": result.Config.JobName, | |||||
"JobStatus": result.JobStatus.State, | "JobStatus": result.JobStatus.State, | ||||
"SubState": result.JobStatus.SubState, | "SubState": result.JobStatus.SubState, | ||||
"CreatedTime": time.Unix(result.JobStatus.CreatedTime/1000, 0).Format("2006-01-02 15:04:05"), | "CreatedTime": time.Unix(result.JobStatus.CreatedTime/1000, 0).Format("2006-01-02 15:04:05"), | ||||
@@ -104,7 +103,7 @@ func CloudbrainGetLog(ctx *context.Context) { | |||||
var hits []models.Hits | var hits []models.Hits | ||||
result, err := cloudbrain.GetJobLog(jobID) | result, err := cloudbrain.GetJobLog(jobID) | ||||
if err != nil{ | |||||
if err != nil { | |||||
log.Error("GetJobLog failed: %v", err, ctx.Data["MsgID"]) | log.Error("GetJobLog failed: %v", err, ctx.Data["MsgID"]) | ||||
ctx.ServerError(err.Error(), err) | ctx.ServerError(err.Error(), err) | ||||
return | return | ||||
@@ -115,7 +114,7 @@ func CloudbrainGetLog(ctx *context.Context) { | |||||
if len(result.Hits.Hits) >= cloudbrain.LogPageSize { | if len(result.Hits.Hits) >= cloudbrain.LogPageSize { | ||||
for { | for { | ||||
resultNext, err := cloudbrain.GetJobAllLog(result.ScrollID) | resultNext, err := cloudbrain.GetJobAllLog(result.ScrollID) | ||||
if err != nil{ | |||||
if err != nil { | |||||
log.Error("GetJobAllLog failed: %v", err, ctx.Data["MsgID"]) | log.Error("GetJobAllLog failed: %v", err, ctx.Data["MsgID"]) | ||||
} else { | } else { | ||||
for _, hit := range resultNext.Hits.Hits { | for _, hit := range resultNext.Hits.Hits { | ||||
@@ -142,8 +141,8 @@ func CloudbrainGetLog(ctx *context.Context) { | |||||
} | } | ||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"JobID": jobID, | |||||
"Content": content, | |||||
"JobID": jobID, | |||||
"Content": content, | |||||
}) | }) | ||||
return | return | ||||
@@ -77,6 +77,7 @@ func GetModelArtsNotebook2(ctx *context.APIContext) { | |||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"JobID": jobID, | "JobID": jobID, | ||||
"JobName": job.JobName, | |||||
"JobStatus": result.Status, | "JobStatus": result.Status, | ||||
}) | }) | ||||
@@ -297,7 +297,7 @@ func allProjectsPeroidHeader(ctx *context.Context) map[string]string { | |||||
} | } | ||||
func allProjectsPeroidValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { | func allProjectsPeroidValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { | ||||
return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.Name, getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), | |||||
return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), | |||||
getCellName("F", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("G", row): strconv.FormatInt(rs.NumDownloads, 10), getCellName("H", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("I", row): strconv.FormatInt(rs.NumCommits, 10), | getCellName("F", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("G", row): strconv.FormatInt(rs.NumDownloads, 10), getCellName("H", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("I", row): strconv.FormatInt(rs.NumCommits, 10), | ||||
getCellName("J", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("K", row): strconv.FormatInt(rs.NumStars, 10), getCellName("L", row): strconv.FormatInt(rs.NumForks, 10), getCellName("M", row): strconv.FormatInt(rs.NumIssues, 10), | getCellName("J", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("K", row): strconv.FormatInt(rs.NumStars, 10), getCellName("L", row): strconv.FormatInt(rs.NumForks, 10), getCellName("M", row): strconv.FormatInt(rs.NumIssues, 10), | ||||
getCellName("N", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("O", row): strconv.FormatInt(rs.NumContributor, 10), | getCellName("N", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("O", row): strconv.FormatInt(rs.NumContributor, 10), | ||||
@@ -317,7 +317,7 @@ func allProjectsOpenIHeader() map[string]string { | |||||
func allProjectsOpenIValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { | func allProjectsOpenIValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { | ||||
return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.Name, getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), | |||||
return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), | |||||
getCellName("F", row): strconv.FormatFloat(rs.Impact, 'f', 2, 64), getCellName("G", row): strconv.FormatFloat(rs.Completeness, 'f', 2, 64), getCellName("H", row): strconv.FormatFloat(rs.Liveness, 'f', 2, 64), getCellName("I", row): strconv.FormatFloat(rs.ProjectHealth, 'f', 2, 64), getCellName("J", row): strconv.FormatFloat(rs.TeamHealth, 'f', 2, 64), getCellName("K", row): strconv.FormatFloat(rs.Growth, 'f', 2, 64), | getCellName("F", row): strconv.FormatFloat(rs.Impact, 'f', 2, 64), getCellName("G", row): strconv.FormatFloat(rs.Completeness, 'f', 2, 64), getCellName("H", row): strconv.FormatFloat(rs.Liveness, 'f', 2, 64), getCellName("I", row): strconv.FormatFloat(rs.ProjectHealth, 'f', 2, 64), getCellName("J", row): strconv.FormatFloat(rs.TeamHealth, 'f', 2, 64), getCellName("K", row): strconv.FormatFloat(rs.Growth, 'f', 2, 64), | ||||
getCellName("L", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("M", row): strconv.FormatInt(rs.NumStars, 10), getCellName("N", row): strconv.FormatInt(rs.NumForks, 10), getCellName("O", row): strconv.FormatInt(rs.NumDownloads, 10), | getCellName("L", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("M", row): strconv.FormatInt(rs.NumStars, 10), getCellName("N", row): strconv.FormatInt(rs.NumForks, 10), getCellName("O", row): strconv.FormatInt(rs.NumDownloads, 10), | ||||
@@ -466,10 +466,10 @@ func generateCountSql(beginTime time.Time, endTime time.Time, latestDate string, | |||||
countSql := "SELECT count(*) FROM " + | countSql := "SELECT count(*) FROM " + | ||||
"(SELECT repo_id FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | "(SELECT repo_id FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | ||||
" and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | ||||
"(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||||
"(SELECT repo_id,name,alias,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||||
" where A.repo_id=B.repo_id" | " where A.repo_id=B.repo_id" | ||||
if q != "" { | if q != "" { | ||||
countSql = countSql + " and LOWER(B.name) like '%" + strings.ToLower(q) + "%'" | |||||
countSql = countSql + " and LOWER(B.alias) like '%" + strings.ToLower(q) + "%'" | |||||
} | } | ||||
return countSql | return countSql | ||||
} | } | ||||
@@ -482,22 +482,22 @@ func generateOpenICountSql(latestDate string) string { | |||||
} | } | ||||
func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | ||||
sql := "SELECT A.repo_id,name,owner_name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||||
sql := "SELECT A.repo_id,name,alias,owner_name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||||
"(SELECT repo_id,sum(num_visits) as num_visits " + | "(SELECT repo_id,sum(num_visits) as num_visits " + | ||||
" FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | ||||
" and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | ||||
"(SELECT repo_id,name,owner_name,is_private,radar_total,num_watches,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor from public.repo_statistic where date='" + latestDate + "') B" + | |||||
"(SELECT repo_id,name,alias,owner_name,is_private,radar_total,num_watches,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor from public.repo_statistic where date='" + latestDate + "') B" + | |||||
" where A.repo_id=B.repo_id" | " where A.repo_id=B.repo_id" | ||||
if q != "" { | if q != "" { | ||||
sql = sql + " and LOWER(name) like '%" + strings.ToLower(q) + "%'" | |||||
sql = sql + " and LOWER(alias) like '%" + strings.ToLower(q) + "%'" | |||||
} | } | ||||
sql = sql + " order by " + orderBy + " desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | sql = sql + " order by " + orderBy + " desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | ||||
return sql | return sql | ||||
} | } | ||||
func generateTypeAllOpenISql(latestDate string, page int, pageSize int) string { | func generateTypeAllOpenISql(latestDate string, page int, pageSize int) string { | ||||
sql := "SELECT id, repo_id, date, num_watches, num_stars, num_forks, num_downloads, num_comments, num_visits, num_closed_issues, num_versions, num_dev_months, repo_size, dataset_size, num_models, num_wiki_views, num_commits, num_issues, num_pulls, issue_fixed_rate, num_contributor, num_key_contributor, num_contributors_growth, num_commits_growth, num_commit_lines_growth, num_issues_growth, num_comments_growth, impact, completeness, liveness, project_health, team_health, growth, radar_total, name, is_private, owner_name FROM " + | |||||
sql := "SELECT id, repo_id, date, num_watches, num_stars, num_forks, num_downloads, num_comments, num_visits, num_closed_issues, num_versions, num_dev_months, repo_size, dataset_size, num_models, num_wiki_views, num_commits, num_issues, num_pulls, issue_fixed_rate, num_contributor, num_key_contributor, num_contributors_growth, num_commits_growth, num_commit_lines_growth, num_issues_growth, num_comments_growth, impact, completeness, liveness, project_health, team_health, growth, radar_total, name,alias, is_private, owner_name FROM " + | |||||
" public.repo_statistic where date='" + latestDate + "'" | " public.repo_statistic where date='" + latestDate + "'" | ||||
sql = sql + " order by radar_total desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | sql = sql + " order by radar_total desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | ||||
@@ -506,14 +506,14 @@ func generateTypeAllOpenISql(latestDate string, page int, pageSize int) string { | |||||
func generatePageSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | func generatePageSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | ||||
sql := "SELECT A.repo_id,name,owner_name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||||
sql := "SELECT A.repo_id,name,alias,owner_name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||||
"(SELECT repo_id,sum(num_watches_added) as num_watches,sum(num_visits) as num_visits, sum(num_downloads_added) as num_downloads,sum(num_pulls_added) as num_pulls,sum(num_commits_added) as num_commits,sum(num_stars_added) as num_stars,sum(num_forks_added) num_forks,sum(num_issues_added) as num_issues,sum(num_closed_issues_added) as num_closed_issues,sum(num_contributor_added) as num_contributor " + | "(SELECT repo_id,sum(num_watches_added) as num_watches,sum(num_visits) as num_visits, sum(num_downloads_added) as num_downloads,sum(num_pulls_added) as num_pulls,sum(num_commits_added) as num_commits,sum(num_stars_added) as num_stars,sum(num_forks_added) num_forks,sum(num_issues_added) as num_issues,sum(num_closed_issues_added) as num_closed_issues,sum(num_contributor_added) as num_contributor " + | ||||
" FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | ||||
" and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | ||||
"(SELECT repo_id,name,owner_name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||||
"(SELECT repo_id,name,alias,owner_name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||||
" where A.repo_id=B.repo_id" | " where A.repo_id=B.repo_id" | ||||
if q != "" { | if q != "" { | ||||
sql = sql + " and LOWER(B.name) like '%" + strings.ToLower(q) + "%'" | |||||
sql = sql + " and LOWER(B.alias) like '%" + strings.ToLower(q) + "%'" | |||||
} | } | ||||
sql = sql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | sql = sql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | ||||
return sql | return sql | ||||
@@ -351,13 +351,13 @@ func CloudBrainShow(ctx *context.Context) { | |||||
func cloudBrainShow(ctx *context.Context, tpName base.TplName) { | func cloudBrainShow(ctx *context.Context, tpName base.TplName) { | ||||
ctx.Data["PageIsCloudBrain"] = true | ctx.Data["PageIsCloudBrain"] = true | ||||
var jobID = ctx.Params(":jobid") | |||||
task, err := models.GetCloudbrainByJobID(jobID) | |||||
var jobName = ctx.Params(":jobname") | |||||
task, err := models.GetCloudbrainByName(jobName) | |||||
if err != nil { | if err != nil { | ||||
ctx.Data["error"] = err.Error() | ctx.Data["error"] = err.Error() | ||||
} | } | ||||
result, err := cloudbrain.GetJob(jobID) | |||||
result, err := cloudbrain.GetJob(task.JobID) | |||||
if err != nil { | if err != nil { | ||||
ctx.Data["error"] = err.Error() | ctx.Data["error"] = err.Error() | ||||
} | } | ||||
@@ -422,7 +422,7 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName) { | |||||
ctx.Data["duration"] = util.AddZero(duration/3600000) + ":" + util.AddZero(duration%3600000/60000) + ":" + util.AddZero(duration%60000/1000) | ctx.Data["duration"] = util.AddZero(duration/3600000) + ":" + util.AddZero(duration%3600000/60000) + ":" + util.AddZero(duration%60000/1000) | ||||
ctx.Data["task"] = task | ctx.Data["task"] = task | ||||
ctx.Data["jobID"] = jobID | |||||
// ctx.Data["jobID"] = task.JobID | |||||
ctx.Data["jobName"] = task.JobName | ctx.Data["jobName"] = task.JobName | ||||
version_list_task := make([]*models.Cloudbrain, 0) | version_list_task := make([]*models.Cloudbrain, 0) | ||||
version_list_task = append(version_list_task, task) | version_list_task = append(version_list_task, task) | ||||
@@ -582,12 +582,13 @@ func logErrorAndUpdateJobStatus(err error, taskInfo *models.Cloudbrain) { | |||||
} | } | ||||
func CloudBrainDel(ctx *context.Context) { | func CloudBrainDel(ctx *context.Context) { | ||||
var listType = ctx.Query("debugListType") | |||||
if err := deleteCloudbrainJob(ctx); err != nil { | if err := deleteCloudbrainJob(ctx); err != nil { | ||||
log.Error("deleteCloudbrainJob failed: %v", err, ctx.Data["msgID"]) | log.Error("deleteCloudbrainJob failed: %v", err, ctx.Data["msgID"]) | ||||
ctx.ServerError(err.Error(), err) | ctx.ServerError(err.Error(), err) | ||||
return | return | ||||
} | } | ||||
ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") | |||||
ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=" + listType) | |||||
} | } | ||||
func deleteCloudbrainJob(ctx *context.Context) error { | func deleteCloudbrainJob(ctx *context.Context) error { | ||||
@@ -268,6 +268,7 @@ func NotebookShow(ctx *context.Context) { | |||||
ctx.Data["task"] = task | ctx.Data["task"] = task | ||||
ctx.Data["jobID"] = jobID | ctx.Data["jobID"] = jobID | ||||
ctx.Data["jobName"] = task.JobName | |||||
ctx.Data["result"] = result | ctx.Data["result"] = result | ||||
ctx.HTML(200, tplModelArtsNotebookShow) | ctx.HTML(200, tplModelArtsNotebookShow) | ||||
} | } | ||||
@@ -417,6 +418,7 @@ func NotebookManage(ctx *context.Context) { | |||||
func NotebookDel(ctx *context.Context) { | func NotebookDel(ctx *context.Context) { | ||||
var jobID = ctx.Params(":jobid") | var jobID = ctx.Params(":jobid") | ||||
var listType = ctx.Query("debugListType") | |||||
task := ctx.Cloudbrain | task := ctx.Cloudbrain | ||||
if task.Status != string(models.ModelArtsCreateFailed) && task.Status != string(models.ModelArtsStartFailed) && task.Status != string(models.ModelArtsStopped) { | if task.Status != string(models.ModelArtsCreateFailed) && task.Status != string(models.ModelArtsStartFailed) && task.Status != string(models.ModelArtsStopped) { | ||||
@@ -442,7 +444,7 @@ func NotebookDel(ctx *context.Context) { | |||||
return | return | ||||
} | } | ||||
ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") | |||||
ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=" + listType) | |||||
} | } | ||||
func TrainJobIndex(ctx *context.Context) { | func TrainJobIndex(ctx *context.Context) { | ||||
@@ -106,7 +106,8 @@ func RepoStatisticDaily(date string) { | |||||
repoStat := models.RepoStatistic{ | repoStat := models.RepoStatistic{ | ||||
RepoID: repo.ID, | RepoID: repo.ID, | ||||
Date: date, | Date: date, | ||||
Name: repo.Alias, | |||||
Name: repo.Name, | |||||
Alias: repo.Alias, | |||||
IsPrivate: repo.IsPrivate, | IsPrivate: repo.IsPrivate, | ||||
IsMirror: repo.IsMirror, | IsMirror: repo.IsMirror, | ||||
OwnerName: repo.OwnerName, | OwnerName: repo.OwnerName, | ||||
@@ -63,11 +63,13 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
_, count := models.QueryUserStaticDataByTableName(1, 1, tableName, queryObj, userName) | _, count := models.QueryUserStaticDataByTableName(1, 1, tableName, queryObj, userName) | ||||
var indexTotal int64 | var indexTotal int64 | ||||
indexTotal = 0 | indexTotal = 0 | ||||
row := 1 | |||||
for { | for { | ||||
re, _ := models.QueryUserStaticDataByTableName(int(indexTotal), PAGE_SIZE, tableName, queryObj, "") | re, _ := models.QueryUserStaticDataByTableName(int(indexTotal), PAGE_SIZE, tableName, queryObj, "") | ||||
log.Info("return count=" + fmt.Sprint(count)) | log.Info("return count=" + fmt.Sprint(count)) | ||||
for i, userRecord := range re { | |||||
rows := fmt.Sprint(i + 2) | |||||
for _, userRecord := range re { | |||||
row++ | |||||
rows := fmt.Sprint(row) | |||||
xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | ||||
xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | ||||
xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | ||||
@@ -974,8 +974,10 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
}, context.RepoRef()) | }, context.RepoRef()) | ||||
m.Group("/cloudbrain", func() { | m.Group("/cloudbrain", func() { | ||||
m.Group("/:jobid", func() { | |||||
m.Group("/:jobname", func() { | |||||
m.Get("", reqRepoCloudBrainReader, repo.CloudBrainShow) | m.Get("", reqRepoCloudBrainReader, repo.CloudBrainShow) | ||||
}) | |||||
m.Group("/:jobid", func() { | |||||
m.Get("/debug", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDebug) | m.Get("/debug", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDebug) | ||||
m.Post("/commit_image", cloudbrain.AdminOrJobCreaterRight, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | m.Post("/commit_image", cloudbrain.AdminOrJobCreaterRight, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | ||||
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.CloudBrainStop) | m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.CloudBrainStop) | ||||
@@ -132,7 +132,7 @@ func getNotifications(c *context.Context) { | |||||
} | } | ||||
c.Data["Title"] = c.Tr("notifications") | c.Data["Title"] = c.Tr("notifications") | ||||
c.Data["Keyword"] = keyword | |||||
//c.Data["Keyword"] = keyword | |||||
c.Data["Status"] = status | c.Data["Status"] = status | ||||
c.Data["Notifications"] = notifications | c.Data["Notifications"] = notifications | ||||
@@ -20,7 +20,7 @@ | |||||
<div id="homenews" class="ui container"> | <div id="homenews" class="ui container"> | ||||
<p>* {{.page_only_dynamic}}</p> | <p>* {{.page_only_dynamic}}</p> | ||||
<div class="ui grid"> | <div class="ui grid"> | ||||
<div class="twelve wide tablet ten wide computer column homenews"> | |||||
<div class="sixteen wide mobile twelve wide tablet ten wide computer column homenews"> | |||||
<div class="newslist"> | <div class="newslist"> | ||||
<div class="ui mini aligned list swiper-wrapper" id="newmessage"> | <div class="ui mini aligned list swiper-wrapper" id="newmessage"> | ||||
@@ -42,7 +42,11 @@ | |||||
<a href="{{AppSubUrl}}/explore/organizations" class="circular ui primary basic button">{{.page_recommend_org_more}} <i class="arrow circle right icon"></i></a> | <a href="{{AppSubUrl}}/explore/organizations" class="circular ui primary basic button">{{.page_recommend_org_more}} <i class="arrow circle right icon"></i></a> | ||||
</div> | </div> | ||||
<div class="sixteen wide tablet twelve wide computer column"> | <div class="sixteen wide tablet twelve wide computer column"> | ||||
<div class="ui stackable three column grid homeorg-list" id="recommendorg"> | |||||
<div class="homeorg-list"> | |||||
<div class="swiper-wrapper" id="recommendorg"> | |||||
</div> | |||||
<div class="swiper-pagination"></div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -78,7 +82,7 @@ | |||||
<h2>{{.page_dev_env}}</h2> | <h2>{{.page_dev_env}}</h2> | ||||
<p><span class="ui text grey">{{.page_dev_env_desc}}</p> | <p><span class="ui text grey">{{.page_dev_env_desc}}</p> | ||||
</div> | </div> | ||||
<div class="ui four stackable cards"> | |||||
<div class="ui four doubling cards"> | |||||
<div class="card"> | <div class="card"> | ||||
<div class="image"> | <div class="image"> | ||||
<img src="/img/i-pic-01.svg"> | <img src="/img/i-pic-01.svg"> | ||||
@@ -158,4 +162,4 @@ | |||||
<script src="/home/home.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="/home/home.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
{{template "base/footer" .}} | |||||
{{template "base/footer" .}} |
@@ -14,7 +14,7 @@ | |||||
<div class="eight wide column right aligned"> | <div class="eight wide column right aligned"> | ||||
<div class="ui left mini icon buttons"> | <div class="ui left mini icon buttons"> | ||||
<span class="ui basic button text left" data-tooltip='{{$.i18n.Tr "dataset.download_count"}}' data-position="bottom right" style="width: 60px; padding-left: 0;">{{svg "octicon-flame" 16}} {{(.DownloadCount | PrettyNumber)}}</span> | <span class="ui basic button text left" data-tooltip='{{$.i18n.Tr "dataset.download_count"}}' data-position="bottom right" style="width: 60px; padding-left: 0;">{{svg "octicon-flame" 16}} {{(.DownloadCount | PrettyNumber)}}</span> | ||||
<span class="ui basic basic button clipboard" data-clipboard-text="{{.DownloadURL}}" data-tooltip='{{$.i18n.Tr "dataset.copy_url"}}' data-clipboard-action="copy"{{if ne $.Type 0}} style="display:none;"{{end}}>{{svg "octicon-file" 16}}</span> | |||||
<span class="ui basic basic button clipboard" data-clipboard-text="{{.DownloadURL}}" data-tooltip='{{$.i18n.Tr "dataset.copy_url"}}' data-clipboard-action="copy">{{svg "octicon-file" 16}}</span> | |||||
<span class="ui basic basic button clipboard" data-clipboard-text="{{.FileChunk.Md5}}" data-tooltip='{{$.i18n.Tr "dataset.copy_md5"}}' data-clipboard-action="copy">{{svg "octicon-file-binary" 16}}</span> | <span class="ui basic basic button clipboard" data-clipboard-text="{{.FileChunk.Md5}}" data-tooltip='{{$.i18n.Tr "dataset.copy_md5"}}' data-clipboard-action="copy">{{svg "octicon-file-binary" 16}}</span> | ||||
</div> | </div> | ||||
{{if eq .DecompressState 1}} | {{if eq .DecompressState 1}} | ||||
@@ -287,13 +287,13 @@ | |||||
<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{{else}}{{$.RepoLink}}/modelarts/notebook{{end}}/{{.JobID}}' title="{{.JobName}}" style="font-size: 14px;"> | |||||
<a class="title" href='{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain/{{.JobName}}{{else}}{{$.RepoLink}}/modelarts/notebook/{{.JobID}}{{end}}' title="{{.JobName}}" style="font-size: 14px;"> | |||||
<span class="fitted text_over" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> | <span class="fitted text_over" style="width: 90%;vertical-align: middle;">{{.JobName}}</span> | ||||
</a> | </a> | ||||
</div> | </div> | ||||
<div class="two wide column text center"> | <div class="two wide column text center"> | ||||
<!--任务状态 --> | <!--任务状态 --> | ||||
<span class="job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}" data-resource="{{.ComputeResource}}"> | |||||
<span class="job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}" data-resource="{{.ComputeResource}}" data-jobname="{{.JobName}}"> | |||||
<span><i id="{{.JobID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.JobID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | <span><i id="{{.JobID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.JobID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | ||||
</span> | </span> | ||||
</div> | </div> | ||||
@@ -366,7 +366,7 @@ | |||||
</form> | </form> | ||||
<!-- 删除 --> | <!-- 删除 --> | ||||
<form id="delForm-{{.JobID}}" action="{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain{{else}}{{$.RepoLink}}/modelarts/notebook{{end}}/{{.JobID}}/del" method="post"> | <form id="delForm-{{.JobID}}" action="{{if eq .ComputeResource "CPU/GPU"}}{{$.RepoLink}}/cloudbrain{{else}}{{$.RepoLink}}/modelarts/notebook{{end}}/{{.JobID}}/del" method="post"> | ||||
<input type="hidden" name="debugListType" value="all"> | |||||
<input type="hidden" name="debugListType" value="{{$.ListType}}"> | |||||
{{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
{{if .CanDel}} | {{if .CanDel}} | ||||
<a id="model-delete-{{.JobID}}" class='ui basic {{if eq .Status "STOPPED" "FAILED" "START_FAILED"}}blue {{else}}disabled {{end}}button' onclick="assertDelete(this)" style="border-radius: .28571429rem;"> | <a id="model-delete-{{.JobID}}" class='ui basic {{if eq .Status "STOPPED" "FAILED" "START_FAILED"}}blue {{else}}disabled {{end}}button' onclick="assertDelete(this)" style="border-radius: .28571429rem;"> | ||||
@@ -607,6 +607,7 @@ | |||||
function loadJobStatus() { | function loadJobStatus() { | ||||
$(".job-status").each((index, job) => { | $(".job-status").each((index, job) => { | ||||
const jobID = job.dataset.jobid; | const jobID = job.dataset.jobid; | ||||
const jobName = job.dataset.jobname; | |||||
const repoPath = job.dataset.repopath; | const repoPath = job.dataset.repopath; | ||||
const computeResource = job.dataset.resource | const computeResource = job.dataset.resource | ||||
const initArray = ['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED','UNAVAILABLE','DELETED','RESIZE_FAILED'] | const initArray = ['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED','UNAVAILABLE','DELETED','RESIZE_FAILED'] | ||||
@@ -615,38 +616,39 @@ | |||||
return | return | ||||
} | } | ||||
const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' | const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' | ||||
$.get(`/api/v1/repos/${repoPath}/${diffResource}/${jobID}`, (data) => { | |||||
const jobID = data.JobID | |||||
const diffApi = computeResource == "NPU" ? jobID : jobName | |||||
$.get(`/api/v1/repos/${repoPath}/${diffResource}/${diffApi}`, (data) => { | |||||
const jobName = data.JobName | |||||
const status = data.JobStatus | const status = data.JobStatus | ||||
if (status != job.textContent.trim()) { | if (status != job.textContent.trim()) { | ||||
$('#' + jobID+'-icon').removeClass().addClass(status) | |||||
$('#' + jobID+ '-text').text(status) | |||||
$('#' + jobName+'-icon').removeClass().addClass(status) | |||||
$('#' + jobName+ '-text').text(status) | |||||
} | } | ||||
if(status==="RUNNING"){ | if(status==="RUNNING"){ | ||||
$('#model-debug-'+jobID).removeClass('disabled').addClass('blue').text('调试').css("margin","0 1rem") | |||||
$('#model-image-'+jobID).removeClass('disabled').addClass('blue') | |||||
$('#model-debug-'+jobName).removeClass('disabled').addClass('blue').text('调试').css("margin","0 1rem") | |||||
$('#model-image-'+jobName).removeClass('disabled').addClass('blue') | |||||
} | } | ||||
if(status!=="RUNNING"){ | if(status!=="RUNNING"){ | ||||
// $('#model-debug-'+jobID).removeClass('blue') | // $('#model-debug-'+jobID).removeClass('blue') | ||||
// $('#model-debug-'+jobID).addClass('disabled') | // $('#model-debug-'+jobID).addClass('disabled') | ||||
$('#model-image-'+jobID).removeClass('blue').addClass('disabled') | |||||
$('#model-image-'+jobName).removeClass('blue').addClass('disabled') | |||||
} | } | ||||
if(["CREATING","STOPPING","WAITING","STARTING"].includes(status)){ | if(["CREATING","STOPPING","WAITING","STARTING"].includes(status)){ | ||||
$('#model-debug-'+jobID).removeClass('blue').addClass('disabled') | |||||
$('#model-debug-'+jobName).removeClass('blue').addClass('disabled') | |||||
} | } | ||||
if(['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED'].includes(status)){ | if(['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED'].includes(status)){ | ||||
$('#model-debug-'+jobID).removeClass('disabled').addClass('blue').text('再次调试').css("margin","0") | |||||
$('#model-debug-'+jobName).removeClass('disabled').addClass('blue').text('再次调试').css("margin","0") | |||||
} | } | ||||
if(["RUNNING","WAITING"].includes(status)){ | if(["RUNNING","WAITING"].includes(status)){ | ||||
$('#stop-model-debug-'+jobID).removeClass('disabled').addClass('blue') | |||||
$('#stop-model-debug-'+jobName).removeClass('disabled').addClass('blue') | |||||
} | } | ||||
if(["CREATING","STOPPING","STARTING","STOPPED","FAILED","START_FAILED","SUCCEEDED"].includes(status)){ | if(["CREATING","STOPPING","STARTING","STOPPED","FAILED","START_FAILED","SUCCEEDED"].includes(status)){ | ||||
$('#stop-model-debug-'+jobID).removeClass('blue').addClass('disabled') | |||||
$('#stop-model-debug-'+jobName).removeClass('blue').addClass('disabled') | |||||
} | } | ||||
if(status==="STOPPED" || status==="FAILED"|| status==="START_FAILED"){ | if(status==="STOPPED" || status==="FAILED"|| status==="START_FAILED"){ | ||||
$('#model-delete-'+jobID).removeClass('disabled').addClass('blue') | |||||
$('#model-delete-'+jobName).removeClass('disabled').addClass('blue') | |||||
}else{ | }else{ | ||||
$('#model-delete-'+jobID).removeClass('blue').addClass('disabled') | |||||
$('#model-delete-'+jobName).removeClass('blue').addClass('disabled') | |||||
} | } | ||||
}).fail(function(err) { | }).fail(function(err) { | ||||
console.log(err); | console.log(err); | ||||
@@ -255,9 +255,9 @@ | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
<div class="ui six wide tablet four wide computer column"> | <div class="ui six wide tablet four wide computer column"> | ||||
<div id="repo-desc"> | |||||
<h4 id="about-desc" class="ui header">简介</h4> | |||||
<input type="hidden" id="edit-alias" value="{{.Repository.Alias}}"> | |||||
<div id="repo-desc" data-IsSigned= "{{.IsSigned}}" > | |||||
<h4 id="about-desc" class="ui header">简介</h4> | |||||
<input type="hidden" id="edit-alias" value="{{.Repository.Alias}}"> | |||||
<p> | <p> | ||||
{{if .Repository.DescriptionHTML}} | {{if .Repository.DescriptionHTML}} | ||||
<span class="description" style="word-break:break-all">{{.Repository.DescriptionHTML}}</span> | <span class="description" style="word-break:break-all">{{.Repository.DescriptionHTML}}</span> | ||||
@@ -1,7 +1,7 @@ | |||||
<template> | <template> | ||||
<div> | <div> | ||||
<h4 id="about-desc" class="ui header desc-home">简介 | <h4 id="about-desc" class="ui header desc-home">简介 | ||||
<a class="edit-icon" href="javascript:void(0)" @click="editClick"> | |||||
<a class="edit-icon" v-if="IsSigned" id ="editBtn" href="javascript:void(0)" @click="editClick" > | |||||
<i class="gray edit outline icon" style="margin-right: 0;"></i> | <i class="gray edit outline icon" style="margin-right: 0;"></i> | ||||
</a> | </a> | ||||
</h4> | </h4> | ||||
@@ -52,7 +52,8 @@ export default { | |||||
desc: '', | desc: '', | ||||
index_web: '', | index_web: '', | ||||
repo_name_name: '', | repo_name_name: '', | ||||
alias:'' | |||||
alias:'', | |||||
IsSigned:false | |||||
}, | }, | ||||
// rule1:[{min:3,max:5,message:'1',trigger:"blur"}], | // rule1:[{min:3,max:5,message:'1',trigger:"blur"}], | ||||
rule: { | rule: { | ||||
@@ -63,8 +64,17 @@ export default { | |||||
}; | }; | ||||
}, | }, | ||||
methods: { | methods: { | ||||
getIsSigned(){ | |||||
this.IsSigned = document.getElementById("repo-desc").dataset.issigned; | |||||
// console.log("IsSigned:",this.IsSigned) | |||||
if (this.IsSigned==true || this.IsSigned=="true"){ | |||||
this.IsSigned=true; | |||||
} | |||||
}, | |||||
editClick() { | editClick() { | ||||
this.editDataDialog = true; | |||||
if (this.IsSigned){ | |||||
this.editDataDialog = true; | |||||
} | |||||
}, | }, | ||||
getDesc() { | getDesc() { | ||||
const el = $('span.description').text(); | const el = $('span.description').text(); | ||||
@@ -121,6 +131,7 @@ export default { | |||||
} | } | ||||
}, | }, | ||||
mounted() { | mounted() { | ||||
this.getIsSigned(); | |||||
this.getUrl(); | this.getUrl(); | ||||
this.getRepoName(); | this.getRepoName(); | ||||
this.getDesc(); | this.getDesc(); | ||||
@@ -135,7 +146,7 @@ export default { | |||||
} | } | ||||
}, | }, | ||||
created() { | created() { | ||||
this.getIsSigned(); | |||||
} | } | ||||
}; | }; | ||||