You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cloudbrain_dashboard.go 4.0 kB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package repo
  2. import (
  3. "net/http"
  4. "net/url"
  5. "time"
  6. "code.gitea.io/gitea/models"
  7. "code.gitea.io/gitea/modules/context"
  8. "code.gitea.io/gitea/modules/log"
  9. "github.com/360EntSecGroup-Skylar/excelize/v2"
  10. )
  11. func DownloadCloudBrainBoard(ctx *context.Context) {
  12. page := 1
  13. pageSize := 300
  14. var cloudBrain = ctx.Tr("repo.cloudbrain")
  15. fileName := getCloudbrainFileName(cloudBrain)
  16. _, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  17. ListOptions: models.ListOptions{
  18. Page: page,
  19. PageSize: 1,
  20. },
  21. Type: models.TypeCloudBrainAll,
  22. NeedRepoInfo: false,
  23. })
  24. if err != nil {
  25. log.Warn("Can not get cloud brain info", err)
  26. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail"))
  27. return
  28. }
  29. totalPage := getTotalPage(total, pageSize)
  30. f := excelize.NewFile()
  31. index := f.NewSheet(cloudBrain)
  32. f.DeleteSheet("Sheet1")
  33. for k, v := range allCloudbrainHeader(ctx) {
  34. f.SetCellValue(cloudBrain, k, v)
  35. }
  36. var row = 2
  37. for i := 0; i < totalPage; i++ {
  38. pageRecords, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  39. ListOptions: models.ListOptions{
  40. Page: page,
  41. PageSize: pageSize,
  42. },
  43. Type: models.TypeCloudBrainAll,
  44. NeedRepoInfo: true,
  45. })
  46. if err != nil {
  47. log.Warn("Can not get cloud brain info", err)
  48. continue
  49. }
  50. for _, record := range pageRecords {
  51. for k, v := range allCloudbrainValues(row, record, ctx) {
  52. f.SetCellValue(cloudBrain, k, v)
  53. }
  54. row++
  55. }
  56. page++
  57. }
  58. f.SetActiveSheet(index)
  59. ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName))
  60. ctx.Resp.Header().Set("Content-Type", "application/octet-stream")
  61. f.WriteTo(ctx.Resp)
  62. }
  63. func getCloudbrainFileName(baseName string) string {
  64. return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx"
  65. }
  66. func allCloudbrainHeader(ctx *context.Context) map[string]string {
  67. return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.cloudbrain_task_type"), "C1": ctx.Tr("repo.modelarts.status"),
  68. "D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.wait_time"), "F1": ctx.Tr("repo.modelarts.train_job.dura_time"),
  69. "G1": ctx.Tr("repo.modelarts.train_job.start_time"),
  70. "H1": ctx.Tr("repo.modelarts.train_job.end_time"), "I1": ctx.Tr("repo.modelarts.computing_resources"),
  71. "J1": ctx.Tr("repo.cloudbrain_creator"), "K1": ctx.Tr("repo.repo_name"), "L1": ctx.Tr("repo.cloudbrain_task_name")}
  72. }
  73. func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string {
  74. return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): rs.JobType, getCellName("C", row): rs.Status,
  75. getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): getBrainWaitTime(rs),
  76. getCellName("F", row): rs.TrainJobDuration, getCellName("G", row): getBrainStartTime(rs),
  77. getCellName("H", row): getBrainEndTime(rs),
  78. getCellName("I", row): rs.ComputeResource, getCellName("J", row): rs.Name, getCellName("K", row): getBrainRepo(rs),
  79. getCellName("L", row): rs.JobName,
  80. }
  81. }
  82. func getBrainRepo(rs *models.CloudbrainInfo) string {
  83. if rs.Repo != nil {
  84. return rs.Repo.OwnerName + "/" + rs.Repo.Alias
  85. }
  86. return ""
  87. }
  88. func getBrainStartTime(rs *models.CloudbrainInfo) string {
  89. timeString := time.Unix(int64(rs.Cloudbrain.StartTime), 0).Format(CREATE_TIME_FORMAT)
  90. if timeString != "1970/01/01 08:00:00" {
  91. return timeString
  92. } else {
  93. return "0"
  94. }
  95. }
  96. func getBrainEndTime(rs *models.CloudbrainInfo) string {
  97. timeString := time.Unix(int64(rs.Cloudbrain.EndTime), 0).Format(CREATE_TIME_FORMAT)
  98. if timeString != "1970/01/01 08:00:00" {
  99. return timeString
  100. } else {
  101. return "0"
  102. }
  103. }
  104. func getBrainWaitTime(rs *models.CloudbrainInfo) string {
  105. waitTime := rs.Cloudbrain.StartTime - rs.Cloudbrain.CreatedUnix
  106. if waitTime <= 0 {
  107. return "0"
  108. } else {
  109. return models.ConvertDurationToStr(int64(waitTime))
  110. }
  111. }