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 19 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. package repo
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. "time"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/context"
  9. "code.gitea.io/gitea/modules/log"
  10. "github.com/360EntSecGroup-Skylar/excelize/v2"
  11. "code.gitea.io/gitea/modules/setting"
  12. )
  13. type CloudbrainsPeriodData struct {
  14. DebugOneCount int64 `json:"debugOneCount"`
  15. BenchmarkOneCount int64 `json:"benchmarkOneCount"`
  16. TrainOneCount int64 `json:"trainOneCount"`
  17. DebugTwoCount int64 `json:"debugTwoCount"`
  18. TrainTwoCount int64 `json:"trainTwoCount"`
  19. InferenceTwoCount int64 `json:"inferenceTwoCount"`
  20. JobWaitingCount int64 `json:"jobWaitingCount"`
  21. JobRunningCount int64 `json:"jobRunningCount"`
  22. JobSucceededCount int64 `json:"jobRunningCount"`
  23. }
  24. type TimeCloudbrainsNum struct {
  25. TimeCloudbrainNum []DateCloudbrainNum `json:"dateCloudbrainNum"`
  26. }
  27. type DateCloudbrainNum struct {
  28. Date string `json:"date"`
  29. DebugOneCount int64 `json:"debugOneCount"`
  30. BenchmarkOneCount int64 `json:"benchmarkOneCount"`
  31. TrainOneCount int64 `json:"trainOneCount"`
  32. DebugTwoCount int64 `json:"debugTwoCount"`
  33. TrainTwoCount int64 `json:"trainTwoCount"`
  34. InferenceTwoCount int64 `json:"inferenceTwoCount"`
  35. CloudbrainOneCount int64 `json:"cloudbrainOneCount"`
  36. CloudbrainTwoCount int64 `json:"cloudbrainTwoCount"`
  37. CloudbrainCount int64 `json:"cloudbrainCount"`
  38. }
  39. func GetAllCloudbrainsOverview(ctx *context.Context) {
  40. now := time.Now()
  41. //today overview
  42. beginTime := now.AddDate(0, 0, 0)
  43. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  44. endTime := now
  45. jobWaitingCount, err := models.GetJobWaitingCount(beginTime, endTime)
  46. if err != nil {
  47. log.Error("Can not query jobWaitingCount.", err)
  48. }
  49. jobRunningCount, err := models.GetJobRunningCount(beginTime, endTime)
  50. if err != nil {
  51. log.Error("Can not query jobRunningCount.", err)
  52. }
  53. jobSucceededCount, err := models.GetJobSucceededCount(beginTime, endTime)
  54. if err != nil {
  55. log.Error("Can not query jobSucceededCount.", err)
  56. }
  57. cloudbrainsPeriodData := CloudbrainsPeriodData{
  58. JobWaitingCount: jobWaitingCount,
  59. JobRunningCount: jobRunningCount,
  60. JobSucceededCount: jobSucceededCount,
  61. }
  62. ctx.JSON(http.StatusOK, cloudbrainsPeriodData)
  63. }
  64. func GetAllCloudbrainsTrend(ctx *context.Context) {
  65. brainRecordBeginTime, err := getBrainRecordBeginTime()
  66. if err != nil {
  67. log.Error("Can not get brain record begin time", err)
  68. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.brain_record_begintime_get_err"))
  69. return
  70. }
  71. queryType := ctx.QueryTrim("type")
  72. now := time.Now()
  73. beginTimeStr := ctx.QueryTrim("beginTime")
  74. endTimeStr := ctx.QueryTrim("endTime")
  75. var beginTime time.Time
  76. var endTime time.Time
  77. var endTimeTemp time.Time
  78. dateCloudbrainNum := make([]DateCloudbrainNum, 0)
  79. if queryType != "" {
  80. if queryType == "all" {
  81. beginTime = brainRecordBeginTime
  82. endTime = now
  83. endTimeTemp = beginTime.AddDate(0, 1, 0)
  84. dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime)
  85. if err != nil {
  86. log.Error("Can not query getYearCloudbrainNum.", err)
  87. ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error"))
  88. return
  89. }
  90. } else if queryType == "yesterday" {
  91. beginTime = now.AddDate(0, 0, -1)
  92. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  93. endTimeTemp = beginTime.Add(time.Hour)
  94. endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  95. dateCloudbrainNum, err = getHourCloudbrainNum(beginTime, endTimeTemp, endTime)
  96. if err != nil {
  97. log.Error("Can not query getHourCloudbrainNum.", err)
  98. ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error"))
  99. return
  100. }
  101. } else if queryType == "current_week" {
  102. beginTime = now.AddDate(0, 0, -int(time.Now().Weekday())+1) //begin from monday
  103. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  104. endTime = now
  105. endTimeTemp = beginTime.AddDate(0, 0, 1)
  106. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime)
  107. if err != nil {
  108. log.Error("Can not query getDayCloudbrainNum.", err)
  109. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  110. return
  111. }
  112. } else if queryType == "current_month" {
  113. endTime = now
  114. beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location())
  115. endTimeTemp = beginTime.AddDate(0, 0, 1)
  116. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime)
  117. if err != nil {
  118. log.Error("Can not query getDayCloudbrainNum.", err)
  119. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  120. return
  121. }
  122. } else if queryType == "monthly" {
  123. endTime = now
  124. beginTime = now.AddDate(0, -1, 0)
  125. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  126. endTimeTemp = beginTime.AddDate(0, 0, 1)
  127. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime)
  128. if err != nil {
  129. log.Error("Can not query getDayCloudbrainNum.", err)
  130. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  131. return
  132. }
  133. } else if queryType == "current_year" {
  134. endTime = now
  135. beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  136. endTimeTemp = beginTime.AddDate(0, 1, 0)
  137. dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime)
  138. if err != nil {
  139. log.Error("Can not query getDayCloudbrainNum.", err)
  140. ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error"))
  141. return
  142. }
  143. } else if queryType == "last_month" {
  144. lastMonthTime := now.AddDate(0, -1, 0)
  145. beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location())
  146. endTime = time.Date(now.Year(), now.Month(), 2, 0, 0, 0, 0, now.Location())
  147. endTimeTemp = beginTime.AddDate(0, 0, 1)
  148. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime)
  149. if err != nil {
  150. log.Error("Can not query getDayCloudbrainNum.", err)
  151. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  152. return
  153. }
  154. }
  155. } else {
  156. if beginTimeStr == "" || endTimeStr == "" {
  157. //如果查询类型和开始时间结束时间都未设置,按queryType=all处理
  158. beginTime = brainRecordBeginTime
  159. endTime = now
  160. endTimeTemp = beginTime.AddDate(0, 1, 0)
  161. dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime)
  162. if err != nil {
  163. log.Error("Can not query getDayCloudbrainNum.", err)
  164. ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error"))
  165. return
  166. }
  167. } else {
  168. beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
  169. if err != nil {
  170. log.Error("Can not ParseInLocation.", err)
  171. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  172. return
  173. }
  174. endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
  175. if err != nil {
  176. log.Error("Can not ParseInLocation.", err)
  177. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  178. return
  179. }
  180. days := (endTime.Unix() - beginTime.Unix()) / 3600 / 24
  181. if 1 < days {
  182. endTimeTemp = beginTime.AddDate(0, 0, 1)
  183. endTime = endTime.AddDate(0, 0, 2)
  184. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime)
  185. if err != nil {
  186. log.Error("Can not query getDayCloudbrainNum.", err)
  187. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  188. return
  189. }
  190. } else if 0 < days || days <= 1 {
  191. endTimeTemp = beginTime.Add(time.Hour)
  192. dateCloudbrainNum, err = getHourCloudbrainNum(beginTime, endTimeTemp, endTime)
  193. if err != nil {
  194. log.Error("Can not query getHourCloudbrainNum.", err)
  195. ctx.Error(http.StatusBadRequest, ctx.Tr("getHourCloudbrainNum_get_error"))
  196. return
  197. }
  198. } else {
  199. return
  200. }
  201. }
  202. }
  203. cloudbrainsPeriodData := TimeCloudbrainsNum{
  204. TimeCloudbrainNum: dateCloudbrainNum,
  205. }
  206. ctx.JSON(http.StatusOK, cloudbrainsPeriodData)
  207. }
  208. func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
  209. recordBeginTime, err := getBrainRecordBeginTime()
  210. if err != nil {
  211. log.Error("Can not get record begin time", err)
  212. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  213. return
  214. }
  215. beginTime, endTime, err := getTimePeroid(ctx, recordBeginTime)
  216. if err != nil {
  217. log.Error("Parameter is wrong", err)
  218. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong"))
  219. return
  220. }
  221. page := ctx.QueryInt("page")
  222. if page <= 0 {
  223. page = 1
  224. }
  225. pageSize := ctx.QueryInt("pagesize")
  226. if pageSize <= 0 {
  227. pageSize = DEFAULT_PAGE_SIZE
  228. }
  229. debugOneCount, err := models.GetDebugOneCount(beginTime, endTime)
  230. if err != nil {
  231. log.Error("Can not query debugOneCount.", err)
  232. ctx.Error(http.StatusBadRequest, ctx.Tr("debugOneCount_get_error"))
  233. return
  234. }
  235. benchmarkOneCount, err := models.GetBenchmarkOneCount(beginTime, endTime)
  236. if err != nil {
  237. log.Error("Can not query benchmarkCount.", err)
  238. ctx.Error(http.StatusBadRequest, ctx.Tr("benchmarkOneCount_get_error"))
  239. return
  240. }
  241. trainOneCount, err := models.GetTrainOneCount(beginTime, endTime)
  242. if err != nil {
  243. log.Error("Can not query trainOneCount.", err)
  244. ctx.Error(http.StatusBadRequest, ctx.Tr("trainOneCount_get_error"))
  245. return
  246. }
  247. debugTwoCount, err := models.GetDebugTwoCount(beginTime, endTime)
  248. if err != nil {
  249. log.Error("Can not query debugTwoCount.", err)
  250. ctx.Error(http.StatusBadRequest, ctx.Tr("debugTwoCount_get_error"))
  251. return
  252. }
  253. trainTwoCount, err := models.GetTrainTwoCount(beginTime, endTime)
  254. if err != nil {
  255. log.Error("Can not query DebugOneTotal count.", err)
  256. ctx.Error(http.StatusBadRequest, ctx.Tr("total_count_get_error"))
  257. return
  258. }
  259. inferenceTwoCount, err := models.GetInferenceTwoCount(beginTime, endTime)
  260. if err != nil {
  261. log.Error("Can not query inferenceTwoCount.", err)
  262. ctx.Error(http.StatusBadRequest, ctx.Tr("inferenceTwoCount_get_error"))
  263. return
  264. }
  265. cloudbrainsPeriodData := CloudbrainsPeriodData{
  266. DebugOneCount: debugOneCount,
  267. BenchmarkOneCount: benchmarkOneCount,
  268. TrainOneCount: trainOneCount,
  269. DebugTwoCount: debugTwoCount,
  270. TrainTwoCount: trainTwoCount,
  271. InferenceTwoCount: inferenceTwoCount,
  272. }
  273. ctx.JSON(http.StatusOK, cloudbrainsPeriodData)
  274. }
  275. func getCloudbrainCount(beginTime time.Time, endTime time.Time) (int64, int64, int64, int64, int64, int64, int64, int64, int64, error) {
  276. debugOneCount, err := models.GetDebugOneCount(beginTime, endTime)
  277. if err != nil {
  278. log.Error("Can not query debugOneCount.", err)
  279. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  280. }
  281. benchmarkOneCount, err := models.GetBenchmarkOneCount(beginTime, endTime)
  282. if err != nil {
  283. log.Error("Can not query benchmarkCount.", err)
  284. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  285. }
  286. trainOneCount, err := models.GetTrainOneCount(beginTime, endTime)
  287. if err != nil {
  288. log.Error("Can not query trainOneCount.", err)
  289. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  290. }
  291. debugTwoCount, err := models.GetDebugTwoCount(beginTime, endTime)
  292. if err != nil {
  293. log.Error("Can not query debugTwoCount.", err)
  294. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  295. }
  296. trainTwoCount, err := models.GetTrainTwoCount(beginTime, endTime)
  297. if err != nil {
  298. log.Error("Can not query DebugOneTotal count.", err)
  299. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  300. }
  301. inferenceTwoCount, err := models.GetInferenceTwoCount(beginTime, endTime)
  302. if err != nil {
  303. log.Error("Can not query inferenceTwoCount.", err)
  304. return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
  305. }
  306. cloudbrainOneCount := debugOneCount + benchmarkOneCount + trainOneCount
  307. cloudbrainTwoCount := debugTwoCount + trainTwoCount + inferenceTwoCount
  308. cloudbrainCount := cloudbrainOneCount + cloudbrainTwoCount
  309. return debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err
  310. }
  311. func getHourCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
  312. dayCloudbrainNum := make([]DateCloudbrainNum, 0)
  313. for endTimeTemp.Before(endTime) || endTimeTemp.Equal(endTime) {
  314. debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp)
  315. if err != nil {
  316. log.Error("Can not query getCloudbrainCount.", err)
  317. return nil, err
  318. }
  319. dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{
  320. Date: beginTime.Format(time.RFC3339),
  321. DebugOneCount: debugOneCount,
  322. BenchmarkOneCount: benchmarkOneCount,
  323. TrainOneCount: trainOneCount,
  324. DebugTwoCount: debugTwoCount,
  325. TrainTwoCount: trainTwoCount,
  326. InferenceTwoCount: inferenceTwoCount,
  327. CloudbrainOneCount: cloudbrainOneCount,
  328. CloudbrainTwoCount: cloudbrainTwoCount,
  329. CloudbrainCount: cloudbrainCount,
  330. })
  331. beginTime = endTimeTemp
  332. endTimeTemp = beginTime.Add(time.Hour)
  333. }
  334. return dayCloudbrainNum, nil
  335. }
  336. func getDayCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
  337. dayCloudbrainNum := make([]DateCloudbrainNum, 0)
  338. for endTimeTemp.Before(endTime) {
  339. debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount,
  340. cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp)
  341. if err != nil {
  342. log.Error("Can not query getCloudbrainCount.", err)
  343. return nil, err
  344. }
  345. dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{
  346. Date: beginTime.Format("2006-01-02"),
  347. DebugOneCount: debugOneCount,
  348. BenchmarkOneCount: benchmarkOneCount,
  349. TrainOneCount: trainOneCount,
  350. DebugTwoCount: debugTwoCount,
  351. TrainTwoCount: trainTwoCount,
  352. InferenceTwoCount: inferenceTwoCount,
  353. CloudbrainOneCount: cloudbrainOneCount,
  354. CloudbrainTwoCount: cloudbrainTwoCount,
  355. CloudbrainCount: cloudbrainCount,
  356. })
  357. beginTime = endTimeTemp
  358. endTimeTemp = beginTime.AddDate(0, 0, 1)
  359. }
  360. return dayCloudbrainNum, nil
  361. }
  362. func getYearCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
  363. yearCloudbrainNum := make([]DateCloudbrainNum, 0)
  364. for endTimeTemp.Before(endTime) {
  365. debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount,
  366. cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp)
  367. if err != nil {
  368. log.Error("Can not query getCloudbrainCount.", err)
  369. return nil, err
  370. }
  371. yearCloudbrainNum = append(yearCloudbrainNum, DateCloudbrainNum{
  372. Date: beginTime.Format("2006-01"),
  373. DebugOneCount: debugOneCount,
  374. BenchmarkOneCount: benchmarkOneCount,
  375. TrainOneCount: trainOneCount,
  376. DebugTwoCount: debugTwoCount,
  377. TrainTwoCount: trainTwoCount,
  378. InferenceTwoCount: inferenceTwoCount,
  379. CloudbrainOneCount: cloudbrainOneCount,
  380. CloudbrainTwoCount: cloudbrainTwoCount,
  381. CloudbrainCount: cloudbrainCount,
  382. })
  383. beginTime = endTimeTemp
  384. endTimeTemp = beginTime.AddDate(0, 1, 0)
  385. }
  386. return yearCloudbrainNum, nil
  387. }
  388. func getBrainRecordBeginTime() (time.Time, error) {
  389. return time.ParseInLocation(DATE_FORMAT, setting.BrainRecordBeginTime, time.Local)
  390. }
  391. func DownloadCloudBrainBoard(ctx *context.Context) {
  392. page := 1
  393. pageSize := 300
  394. var cloudBrain = ctx.Tr("repo.cloudbrain")
  395. fileName := getCloudbrainFileName(cloudBrain)
  396. _, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  397. ListOptions: models.ListOptions{
  398. Page: page,
  399. PageSize: pageSize,
  400. },
  401. Type: models.TypeCloudBrainAll,
  402. NeedRepoInfo: false,
  403. })
  404. if err != nil {
  405. log.Warn("Can not get cloud brain info", err)
  406. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail"))
  407. return
  408. }
  409. totalPage := getTotalPage(total, pageSize)
  410. fmt.Printf("total:%v", total)
  411. fmt.Printf("totalPage:%v", totalPage)
  412. f := excelize.NewFile()
  413. index := f.NewSheet(cloudBrain)
  414. f.DeleteSheet("Sheet1")
  415. for k, v := range allCloudbrainHeader(ctx) {
  416. f.SetCellValue(cloudBrain, k, v)
  417. }
  418. var row = 2
  419. for i := 0; i < totalPage; i++ {
  420. pageRecords, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  421. ListOptions: models.ListOptions{
  422. Page: page,
  423. PageSize: pageSize,
  424. },
  425. Type: models.TypeCloudBrainAll,
  426. NeedRepoInfo: true,
  427. })
  428. if err != nil {
  429. log.Warn("Can not get cloud brain info", err)
  430. continue
  431. }
  432. for _, record := range pageRecords {
  433. for k, v := range allCloudbrainValues(row, record, ctx) {
  434. f.SetCellValue(cloudBrain, k, v)
  435. }
  436. row++
  437. }
  438. page++
  439. }
  440. f.SetActiveSheet(index)
  441. ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName))
  442. ctx.Resp.Header().Set("Content-Type", "application/octet-stream")
  443. f.WriteTo(ctx.Resp)
  444. }
  445. func getCloudbrainFileName(baseName string) string {
  446. return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx"
  447. }
  448. func allCloudbrainHeader(ctx *context.Context) map[string]string {
  449. return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.cloudbrain_task_type"), "C1": ctx.Tr("repo.modelarts.status"),
  450. "D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.wait_time"), "F1": ctx.Tr("repo.modelarts.train_job.dura_time"),
  451. "G1": ctx.Tr("repo.modelarts.train_job.start_time"),
  452. "H1": ctx.Tr("repo.modelarts.train_job.end_time"), "I1": ctx.Tr("repo.modelarts.computing_resources"),
  453. "J1": ctx.Tr("repo.cloudbrain_creator"), "K1": ctx.Tr("repo.repo_name"), "L1": ctx.Tr("repo.cloudbrain_task_name")}
  454. }
  455. func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string {
  456. return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): rs.JobType, getCellName("C", row): rs.Status,
  457. getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): getBrainWaitTime(rs),
  458. getCellName("F", row): rs.TrainJobDuration, getCellName("G", row): getBrainStartTime(rs),
  459. getCellName("H", row): getBrainEndTime(rs),
  460. getCellName("I", row): rs.ComputeResource, getCellName("J", row): rs.Name, getCellName("K", row): getBrainRepo(rs),
  461. getCellName("L", row): rs.JobName,
  462. }
  463. }
  464. func getBrainRepo(rs *models.CloudbrainInfo) string {
  465. if rs.Repo != nil {
  466. return rs.Repo.OwnerName + "/" + rs.Repo.Alias
  467. }
  468. return ""
  469. }
  470. func getBrainStartTime(rs *models.CloudbrainInfo) string {
  471. timeString := time.Unix(int64(rs.Cloudbrain.StartTime), 0).Format(CREATE_TIME_FORMAT)
  472. if timeString != "1970/01/01 08:00:00" {
  473. return timeString
  474. } else {
  475. return "0"
  476. }
  477. }
  478. func getBrainEndTime(rs *models.CloudbrainInfo) string {
  479. timeString := time.Unix(int64(rs.Cloudbrain.EndTime), 0).Format(CREATE_TIME_FORMAT)
  480. if timeString != "1970/01/01 08:00:00" {
  481. return timeString
  482. } else {
  483. return "0"
  484. }
  485. }
  486. func getBrainWaitTime(rs *models.CloudbrainInfo) string {
  487. waitTime := rs.Cloudbrain.StartTime - rs.Cloudbrain.CreatedUnix
  488. if waitTime <= 0 {
  489. return "0"
  490. } else {
  491. return models.ConvertDurationToStr(int64(waitTime))
  492. }
  493. }