Browse Source

update

tags/v1.22.6.1^2
liuzx 3 years ago
parent
commit
05ab115942
6 changed files with 1210 additions and 3 deletions
  1. +64
    -1
      models/cloudbrain.go
  2. +2
    -0
      options/locale/locale_zh-CN.ini
  3. +3
    -2
      routers/api/v1/api.go
  4. +123
    -0
      routers/api/v1/repo/cloudbrain_dashboard.go
  5. +1008
    -0
      web_src/js/components/BrainAnalysis.vue
  6. +10
    -0
      web_src/js/components/DataAnalysis.vue

+ 64
- 1
models/cloudbrain.go View File

@@ -1,13 +1,14 @@
package models package models


import ( import (
"code.gitea.io/gitea/modules/util"
"encoding/json" "encoding/json"
"fmt" "fmt"
"strconv" "strconv"
"strings" "strings"
"time" "time"


"code.gitea.io/gitea/modules/util"

"xorm.io/builder" "xorm.io/builder"
"xorm.io/xorm" "xorm.io/xorm"


@@ -1564,3 +1565,65 @@ func RestartCloudbrain(old *Cloudbrain, new *Cloudbrain) (err error) {


return nil return nil
} }

func CloudbrainAll(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) {
sess := x.NewSession()
defer sess.Close()
var cond = builder.NewCond()
if (opts.Type) >= 0 {
cond = cond.And(
builder.Eq{"cloudbrain.type": opts.Type},
)
}

var count int64
var err error
condition := "cloudbrain.user_id = `user`.id"
if len(opts.Keyword) == 0 {
count, err = sess.Where(cond).Count(new(Cloudbrain))
} else {
lowerKeyWord := strings.ToLower(opts.Keyword)

cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}, builder.Like{"LOWER(cloudbrain.display_job_name)", lowerKeyWord}, builder.Like{"`user`.lower_name", lowerKeyWord}))
count, err = sess.Table(&Cloudbrain{}).Where(cond).
Join("left", "`user`", condition).Count(new(CloudbrainInfo))

}

if err != nil {
return nil, 0, fmt.Errorf("Count: %v", err)
}

if opts.Page >= 0 && opts.PageSize > 0 {
var start int
if opts.Page == 0 {
start = 0
} else {
start = (opts.Page - 1) * opts.PageSize
}
sess.Limit(opts.PageSize, start)
}

sess.OrderBy("cloudbrain.created_unix DESC")
cloudbrains := make([]*CloudbrainInfo, 0, setting.UI.IssuePagingNum)
if err := sess.Table(&Cloudbrain{}).Unscoped().Where(cond).
Join("left", "`user`", condition).
Find(&cloudbrains); err != nil {
return nil, 0, fmt.Errorf("Find: %v", err)
}
if opts.NeedRepoInfo {
var ids []int64
for _, task := range cloudbrains {
ids = append(ids, task.RepoID)
}
repositoryMap, err := GetRepositoriesMapByIDs(ids)
if err == nil {
for _, task := range cloudbrains {
task.Repo = repositoryMap[task.RepoID]
}
}

}

return cloudbrains, count, nil
}

+ 2
- 0
options/locale/locale_zh-CN.ini View File

@@ -1005,6 +1005,8 @@ modelarts.train_job.job_status=任务状态
modelarts.train_job.job_name=任务名称 modelarts.train_job.job_name=任务名称
modelarts.train_job.version=任务版本 modelarts.train_job.version=任务版本
modelarts.train_job.start_time=开始时间 modelarts.train_job.start_time=开始时间
modelarts.train_job.end_time=结束时间
modelarts.train_job.wait_time=等待时间
modelarts.train_job.dura_time=运行时长 modelarts.train_job.dura_time=运行时长
modelarts.train_job.description=任务描述 modelarts.train_job.description=任务描述
modelarts.train_job.parameter_setting=参数设置 modelarts.train_job.parameter_setting=参数设置


+ 3
- 2
routers/api/v1/api.go View File

@@ -557,10 +557,11 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll) m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll)
//cloudbrain board //cloudbrain board
m.Group("/cloudbrainboard", func() { m.Group("/cloudbrainboard", func() {
m.Get("/downloadtable", repo.ServeCloudbrainPeriodStatisticsFile)
m.Get("/downloadStatistics", repo.ServeCloudbrainPeriodStatisticsFile)
m.Get("/downloadAll", repo.DownloadCloudBrainBoard)
m.Group("/cloudbrain", func() { m.Group("/cloudbrain", func() {
m.Get("/trend", repo.GetAllCloudbrainsTrend) m.Get("/trend", repo.GetAllCloudbrainsTrend)
m.Get("", repo.GetAllCloudbrainsPeriodStatistics)
m.Get("/statistics", repo.GetAllCloudbrainsPeriodStatistics)
}) })
}, operationReq) }, operationReq)




+ 123
- 0
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -537,3 +537,126 @@ func ServeCloudbrainPeriodStatisticsFile(ctx *context.Context) {
f.WriteTo(ctx.Resp) f.WriteTo(ctx.Resp)


} }
func DownloadCloudBrainBoard(ctx *context.Context) {

page := 1

pageSize := 300

var cloudBrain = ctx.Tr("repo.cloudbrain")
fileName := getCloudbrainFileName(cloudBrain)

_, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{
Page: page,
PageSize: 1,
},
Type: models.TypeCloudBrainAll,
NeedRepoInfo: false,
})

if err != nil {
log.Warn("Can not get cloud brain info", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail"))
return
}

totalPage := getTotalPage(total, pageSize)
fmt.Printf("total:%v", total)
fmt.Printf("totalPage:%v", totalPage)

f := excelize.NewFile()

index := f.NewSheet(cloudBrain)
f.DeleteSheet("Sheet1")

for k, v := range allHeader(ctx) {
f.SetCellValue(cloudBrain, k, v)
}

var row = 2
for i := 0; i < totalPage; i++ {

pageRecords, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{
Page: page,
PageSize: pageSize,
},
Type: models.TypeCloudBrainAll,
NeedRepoInfo: true,
})
if err != nil {
log.Warn("Can not get cloud brain info", err)
continue
}
for _, record := range pageRecords {

for k, v := range allValues(row, record, ctx) {
f.SetCellValue(cloudBrain, k, v)
}
row++

}

page++
}
f.SetActiveSheet(index)

ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName))
ctx.Resp.Header().Set("Content-Type", "application/octet-stream")

f.WriteTo(ctx.Resp)
}

func getCloudbrainFileName(baseName string) string {
return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx"

}
func allHeader(ctx *context.Context) map[string]string {

return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.cloudbrain_task_type"), "C1": ctx.Tr("repo.modelarts.status"),
"D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.dura_time"), "F1": ctx.Tr("repo.modelarts.computing_resources"),
"G1": ctx.Tr("repo.cloudbrain_creator"), "H1": ctx.Tr("repo.repo_name"), "I1": ctx.Tr("repo.cloudbrain_task_name"), "J1": ctx.Tr("repo.modelarts.train_job.start_time"),
"K1": ctx.Tr("repo.modelarts.train_job.end_time"), "L1": ctx.Tr("repo.modelarts.train_job.wait_time")}

}
func allValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string {
return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): rs.JobType, getCellName("C", row): rs.Status,
getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): rs.TrainJobDuration,
getCellName("F", row): rs.ComputeResource, getCellName("G", row): rs.Name, getCellName("H", row): getRepoPathName(rs),
getCellName("I", row): rs.JobName, getCellName("J", row): getBrainStartTime(rs),
getCellName("K", row): getBrainEndTime(rs), getCellName("L", row): getBrainWaitTime(rs),
}
}
func getRepoPathName(rs *models.CloudbrainInfo) string {
if rs.Repo != nil {
return rs.Repo.OwnerName + "/" + rs.Repo.Alias
}
return ""
}
func getBrainStartTime(rs *models.CloudbrainInfo) string {
timeString := time.Unix(int64(rs.Cloudbrain.StartTime), 0).Format(CREATE_TIME_FORMAT)
if timeString != "1970/01/01 08:00:00" {
return timeString
} else {
return "0"
}

}
func getBrainEndTime(rs *models.CloudbrainInfo) string {
timeString := time.Unix(int64(rs.Cloudbrain.EndTime), 0).Format(CREATE_TIME_FORMAT)
if timeString != "1970/01/01 08:00:00" {
return timeString
} else {
return "0"
}

}
func getBrainWaitTime(rs *models.CloudbrainInfo) string {
waitTime := rs.Cloudbrain.StartTime - rs.Cloudbrain.CreatedUnix
if waitTime <= 0 {
return "0"
} else {
return models.ConvertDurationToStr(int64(waitTime))
}
}

+ 1008
- 0
web_src/js/components/BrainAnalysis.vue
File diff suppressed because it is too large
View File


+ 10
- 0
web_src/js/components/DataAnalysis.vue View File

@@ -26,6 +26,14 @@
</span> </span>
<UserAnalysis ref='UserAnalysis' v-if="isRouterAlive1" id ="usr"></UserAnalysis> <UserAnalysis ref='UserAnalysis' v-if="isRouterAlive1" id ="usr"></UserAnalysis>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="four" id='four' >
<BrainAnalysis ref='BrainAnalysis'id="brain" v-if="isRouterAlive"></BrainAnalysis>
<span slot="label">
<el-image style="width: 13px; height: 13px" src="/img/pro_rgb.svg">
</el-image>
云脑分析
</span>
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@@ -33,12 +41,14 @@
<script> <script>
import ProAnalysis from './ProAnalysis.vue' import ProAnalysis from './ProAnalysis.vue'
import UserAnalysis from './UserAnalysis.vue' import UserAnalysis from './UserAnalysis.vue'
import BrainAnalysis from './BrainAnalysis.vue'


export default { export default {


components:{ components:{
'ProAnalysis':ProAnalysis, 'ProAnalysis':ProAnalysis,
'UserAnalysis':UserAnalysis, 'UserAnalysis':UserAnalysis,
'BrainAnalysis':BrainAnalysis
}, },
data() { data() {
return { return {


Loading…
Cancel
Save