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 51 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
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
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
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
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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383
  1. package repo
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. "strings"
  7. "time"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/modules/context"
  10. "code.gitea.io/gitea/modules/log"
  11. "github.com/360EntSecGroup-Skylar/excelize/v2"
  12. )
  13. type DateCloudbrainNum struct {
  14. Date string `json:"date"`
  15. CloudOneJobTypeRes map[string]int `json:"cloudOneJobTypeRes"`
  16. CloudTwoJobTypeRes map[string]int `json:"cloudTwoJobTypeRes"`
  17. IntelligentNetJobTypeRes map[string]int `json:"intelligentNetJobTypeRes"`
  18. CloudBrainPeriodNum map[int]int `json:"cloudBrainPeriodNum"`
  19. CloudBrainComputeResource map[string]int `json:"cloudBrainComputeResource"`
  20. }
  21. type DateCloudbrainInfo struct {
  22. Date string `json:"date"`
  23. CloudBrainPeriodNum map[int]int `json:"cloudBrainPeriodNum"`
  24. CloudBrainComputeResource map[string]int `json:"cloudBrainComputeResource"`
  25. }
  26. type CloudbrainsStatusAnalysis struct {
  27. JobWaitingCount int64 `json:"jobWaitingCount"`
  28. JobRunningCount int64 `json:"jobRunningCount"`
  29. JobStoppedCount int64 `json:"jobStoppedCount"`
  30. JobCompletedCount int64 `json:"jobCompletedCount"`
  31. JobFailedCount int64 `json:"jobFailedCount"`
  32. JobKilledCount int64 `json:"jobKilledCount"`
  33. JobInitCount int64 `json:"jobInitCount"`
  34. }
  35. func GetAllCloudbrainsOverview(ctx *context.Context) {
  36. recordCloudbrain, err := models.GetRecordBeginTime()
  37. if err != nil {
  38. log.Error("Can not get recordCloudbrain", err)
  39. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  40. return
  41. }
  42. recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix
  43. now := time.Now()
  44. beginTime := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  45. endTime := now
  46. todayCreatorCount, err := models.GetTodayCreatorCount(beginTime, endTime)
  47. if err != nil {
  48. log.Error("Can not query todayCreatorCount.", err)
  49. return
  50. }
  51. creatorCount, err := models.GetCreatorCount()
  52. if err != nil {
  53. log.Error("Can not query creatorCount.", err)
  54. return
  55. }
  56. todayStatusResult := make(map[string]int)
  57. cloudBrainNum := make(map[int]int)
  58. cloudBrainOneDuration := int64(0)
  59. cloudBrainTwoDuration := int64(0)
  60. intelligentNetDuration := int64(0)
  61. todayNewJobCount := 0
  62. page := 1
  63. pagesize := 1000
  64. count := pagesize
  65. for count == pagesize && count != 0 {
  66. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  67. ListOptions: models.ListOptions{
  68. Page: page,
  69. PageSize: pagesize,
  70. },
  71. Type: models.TypeCloudBrainAll,
  72. BeginTimeUnix: int64(recordBeginTime),
  73. EndTimeUnix: endTime.Unix(),
  74. })
  75. if err != nil {
  76. ctx.ServerError("Get cloudbrains failed:", err)
  77. return
  78. }
  79. for _, cloudbrain := range cloudbrains {
  80. if int64(cloudbrain.Cloudbrain.CreatedUnix) >= beginTime.Unix() && int64(cloudbrain.Cloudbrain.CreatedUnix) < endTime.Unix() {
  81. todayNewJobCount += 1
  82. if _, ok := todayStatusResult[cloudbrain.Status]; !ok {
  83. todayStatusResult[cloudbrain.Status] = 1
  84. } else {
  85. todayStatusResult[cloudbrain.Status] += 1
  86. }
  87. }
  88. if _, ok := cloudBrainNum[cloudbrain.Cloudbrain.Type]; !ok {
  89. cloudBrainNum[cloudbrain.Cloudbrain.Type] = 1
  90. } else {
  91. cloudBrainNum[cloudbrain.Cloudbrain.Type] += 1
  92. }
  93. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne {
  94. cloudBrainOneDuration = cloudBrainOneDuration + cloudbrain.Cloudbrain.Duration
  95. }
  96. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo {
  97. cloudBrainTwoDuration = cloudBrainTwoDuration + cloudbrain.Cloudbrain.Duration
  98. }
  99. if cloudbrain.Cloudbrain.Type == models.TypeC2Net {
  100. intelligentNetDuration = intelligentNetDuration + cloudbrain.Cloudbrain.Duration
  101. }
  102. }
  103. count = len(cloudbrains)
  104. page += 1
  105. }
  106. statusNameList := []string{string(models.ModelArtsTrainJobCompleted), string(models.JobFailed), string(models.ModelArtsTrainJobInit),
  107. string(models.JobRunning), string(models.ModelArtsStartFailed), string(models.JobStopped), string(models.JobSucceeded),
  108. string(models.JobWaiting), string(models.ModelArtsTrainJobKilled)}
  109. for _, v := range statusNameList {
  110. if _, ok := todayStatusResult[v]; !ok {
  111. todayStatusResult[v] = 0
  112. }
  113. }
  114. cloudBrainTypeList := []int{0, 1, 2}
  115. for _, v := range cloudBrainTypeList {
  116. if _, ok := cloudBrainNum[v]; !ok {
  117. cloudBrainNum[v] = 0
  118. }
  119. }
  120. todayRunningCount := todayStatusResult[string(models.JobRunning)]
  121. todayCompletedCount := todayStatusResult[string(models.ModelArtsTrainJobCompleted)] + todayStatusResult[string(models.JobFailed)] +
  122. todayStatusResult[string(models.ModelArtsStartFailed)] + todayStatusResult[string(models.JobStopped)] + todayStatusResult[string(models.JobSucceeded)] + todayStatusResult[string(models.ModelArtsTrainJobKilled)]
  123. todayWaitingCount := todayStatusResult[string(models.ModelArtsTrainJobInit)] + todayStatusResult[string(models.JobWaiting)]
  124. ctx.JSON(http.StatusOK, map[string]interface{}{
  125. "recordBeginTime": recordBeginTime,
  126. "updateTime": now.Unix(),
  127. "cloudBrainNum": cloudBrainNum,
  128. "cloudBrainOneDuration": cloudBrainOneDuration,
  129. "cloudBrainTwoDuration": cloudBrainTwoDuration,
  130. "intelligentNetDuration": intelligentNetDuration,
  131. "todayCreatorCount": todayCreatorCount,
  132. "creatorCount": creatorCount,
  133. "todayRunningCount": todayRunningCount,
  134. "todayCompletedCount": todayCompletedCount,
  135. "todayWaitingCount": todayWaitingCount,
  136. "todayNewJobCount": todayNewJobCount,
  137. })
  138. }
  139. func GetAllCloudbrainsTrend(ctx *context.Context) {
  140. queryType := ctx.QueryTrim("type")
  141. now := time.Now()
  142. beginTimeStr := ctx.QueryTrim("beginTime")
  143. endTimeStr := ctx.QueryTrim("endTime")
  144. var beginTime time.Time
  145. var endTime time.Time
  146. dateCloudbrainNum := make([]DateCloudbrainNum, 0)
  147. var err error
  148. if queryType != "" {
  149. if queryType == "all" {
  150. recordCloudbrain, err := models.GetRecordBeginTime()
  151. if err != nil {
  152. log.Error("Can not get recordCloudbrain", err)
  153. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  154. return
  155. }
  156. brainRecordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix.AsTime()
  157. beginTime = brainRecordBeginTime
  158. endTime = now
  159. dateCloudbrainNum, err = getMonthCloudbrainNum(beginTime, endTime)
  160. if err != nil {
  161. log.Error("Can not query getMonthCloudbrainNum.", err)
  162. ctx.Error(http.StatusBadRequest, ctx.Tr("getMonthCloudbrainNum_get_error"))
  163. return
  164. }
  165. } else if queryType == "today" {
  166. beginTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  167. // endTimeTemp = now
  168. endTime = beginTime.AddDate(0, 0, 1)
  169. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  170. if err != nil {
  171. log.Error("Can not query getDayCloudbrainNum.", err)
  172. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  173. return
  174. }
  175. } else if queryType == "yesterday" {
  176. beginTime = now.AddDate(0, 0, -1)
  177. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  178. endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  179. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  180. if err != nil {
  181. log.Error("Can not query getDayCloudbrainNum.", err)
  182. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  183. return
  184. }
  185. } else if queryType == "last_7day" {
  186. beginTime = now.AddDate(0, 0, -6)
  187. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  188. endTime = now
  189. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  190. if err != nil {
  191. log.Error("Can not query getDayCloudbrainNum.", err)
  192. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  193. return
  194. }
  195. } else if queryType == "last_30day" {
  196. beginTime = now.AddDate(0, 0, -29)
  197. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  198. endTime = now
  199. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  200. if err != nil {
  201. log.Error("Can not query getDayCloudbrainNum.", err)
  202. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  203. return
  204. }
  205. } else if queryType == "current_month" {
  206. endTime = now
  207. beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location())
  208. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  209. if err != nil {
  210. log.Error("Can not query getDayCloudbrainNum.", err)
  211. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  212. return
  213. }
  214. } else if queryType == "current_year" {
  215. endTime = now
  216. beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  217. // endTimeTemp = beginTime.AddDate(0, 1, 0)
  218. dateCloudbrainNum, err = getMonthCloudbrainNum(beginTime, endTime)
  219. if err != nil {
  220. log.Error("Can not query getMonthCloudbrainNum.", err)
  221. ctx.Error(http.StatusBadRequest, ctx.Tr("getMonthCloudbrainNum_get_error"))
  222. return
  223. }
  224. } else if queryType == "last_month" {
  225. lastMonthTime := now.AddDate(0, -1, 0)
  226. beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location())
  227. endTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  228. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  229. if err != nil {
  230. log.Error("Can not query getDayCloudbrainNum.", err)
  231. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  232. return
  233. }
  234. }
  235. } else {
  236. if beginTimeStr == "" || endTimeStr == "" {
  237. //如果查询类型和开始时间结束时间都未设置,按queryType=all处理
  238. recordCloudbrain, err := models.GetRecordBeginTime()
  239. if err != nil {
  240. log.Error("Can not get recordCloudbrain", err)
  241. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  242. return
  243. }
  244. brainRecordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix.AsTime()
  245. beginTime = brainRecordBeginTime
  246. endTime = now
  247. dateCloudbrainNum, err = getMonthCloudbrainNum(beginTime, endTime)
  248. if err != nil {
  249. log.Error("Can not query getMonthCloudbrainNum.", err)
  250. ctx.Error(http.StatusBadRequest, ctx.Tr("getMonthCloudbrainNum_get_error"))
  251. return
  252. }
  253. } else {
  254. beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
  255. if err != nil {
  256. log.Error("Can not ParseInLocation.", err)
  257. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  258. return
  259. }
  260. endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
  261. if err != nil {
  262. log.Error("Can not ParseInLocation.", err)
  263. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  264. return
  265. }
  266. if endTime.After(time.Now()) {
  267. endTime = time.Now()
  268. }
  269. dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTime)
  270. if err != nil {
  271. log.Error("Can not query getDayCloudbrainNum.", err)
  272. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error"))
  273. return
  274. }
  275. }
  276. }
  277. ctx.JSON(http.StatusOK, map[string]interface{}{
  278. "timeCloudbrainNum": dateCloudbrainNum,
  279. })
  280. }
  281. func GetAllCloudbrainsTrendDetail(ctx *context.Context) {
  282. queryType := ctx.QueryTrim("type")
  283. now := time.Now()
  284. beginTimeStr := ctx.QueryTrim("beginTime")
  285. endTimeStr := ctx.QueryTrim("endTime")
  286. var beginTime time.Time
  287. var endTime time.Time
  288. var endTimeTemp time.Time
  289. dayCloudbrainInfo := make([]DateCloudbrainInfo, 0)
  290. var err error
  291. var count int
  292. if queryType != "" {
  293. if queryType == "all" {
  294. recordCloudbrain, err := models.GetRecordBeginTime()
  295. if err != nil {
  296. log.Error("Can not get recordCloudbrain", err)
  297. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  298. return
  299. }
  300. brainRecordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix.AsTime()
  301. beginTime = brainRecordBeginTime
  302. endTime = now
  303. dayCloudbrainInfo, count, err = getMonthCloudbrainInfo(beginTime, endTime)
  304. if err != nil {
  305. log.Error("Can not query getDayCloudbrainInfo.", err)
  306. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  307. return
  308. }
  309. } else if queryType == "today" {
  310. beginTime = now.AddDate(0, 0, 0)
  311. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  312. endTime = now
  313. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  314. if err != nil {
  315. log.Error("Can not query getDayCloudbrainInfo.", err)
  316. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  317. return
  318. }
  319. } else if queryType == "yesterday" {
  320. beginTime = now.AddDate(0, 0, -1)
  321. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  322. endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  323. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  324. if err != nil {
  325. log.Error("Can not query getDayCloudbrainInfo.", err)
  326. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  327. return
  328. }
  329. } else if queryType == "last_7day" {
  330. beginTime = now.AddDate(0, 0, -6)
  331. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  332. endTime = now
  333. endTimeTemp = time.Date(endTimeTemp.Year(), endTimeTemp.Month(), endTimeTemp.Day(), 0, 0, 0, 0, now.Location())
  334. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  335. if err != nil {
  336. log.Error("Can not query getDayCloudbrainInfo.", err)
  337. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  338. return
  339. }
  340. } else if queryType == "last_30day" {
  341. beginTime = now.AddDate(0, 0, -29)
  342. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  343. endTime = now
  344. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  345. if err != nil {
  346. log.Error("Can not query getDayCloudbrainInfo.", err)
  347. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  348. return
  349. }
  350. } else if queryType == "current_month" {
  351. endTime = now
  352. beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location())
  353. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  354. if err != nil {
  355. log.Error("Can not query getDayCloudbrainInfo.", err)
  356. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  357. return
  358. }
  359. } else if queryType == "current_year" {
  360. endTime = now
  361. beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  362. dayCloudbrainInfo, count, err = getMonthCloudbrainInfo(beginTime, endTime)
  363. if err != nil {
  364. log.Error("Can not query getDayCloudbrainInfo.", err)
  365. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  366. return
  367. }
  368. } else if queryType == "last_month" {
  369. lastMonthTime := now.AddDate(0, -1, 0)
  370. beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location())
  371. endTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  372. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  373. if err != nil {
  374. log.Error("Can not query getDayCloudbrainInfo.", err)
  375. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  376. return
  377. }
  378. }
  379. } else {
  380. if beginTimeStr == "" || endTimeStr == "" {
  381. //如果查询类型和开始时间结束时间都未设置,按queryType=all处理
  382. recordCloudbrain, err := models.GetRecordBeginTime()
  383. if err != nil {
  384. log.Error("Can not get recordCloudbrain", err)
  385. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  386. return
  387. }
  388. brainRecordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix.AsTime()
  389. beginTime = brainRecordBeginTime
  390. endTime = now
  391. dayCloudbrainInfo, count, err = getMonthCloudbrainInfo(beginTime, endTime)
  392. if err != nil {
  393. log.Error("Can not query getDayCloudbrainInfo.", err)
  394. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  395. return
  396. }
  397. } else {
  398. beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
  399. if err != nil {
  400. log.Error("Can not ParseInLocation.", err)
  401. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  402. return
  403. }
  404. endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
  405. if err != nil {
  406. log.Error("Can not ParseInLocation.", err)
  407. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  408. return
  409. }
  410. if endTime.After(time.Now()) {
  411. endTime = time.Now()
  412. }
  413. endTimeTemp = beginTime.AddDate(0, 0, 1)
  414. dayCloudbrainInfo, count, err = getDayCloudbrainInfo(beginTime, endTime)
  415. if err != nil {
  416. log.Error("Can not query getDayCloudbrainInfo.", err)
  417. ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
  418. return
  419. }
  420. }
  421. }
  422. page := ctx.QueryInt("page")
  423. if page <= 0 {
  424. page = 1
  425. }
  426. pagesize := ctx.QueryInt("pagesize")
  427. if pagesize <= 0 {
  428. pagesize = 5
  429. }
  430. pageDateCloudbrainInfo := getPageDateCloudbrainInfo(dayCloudbrainInfo, page, pagesize)
  431. ctx.JSON(http.StatusOK, map[string]interface{}{
  432. "totalCount": count,
  433. "timeCloudbrainInfo": pageDateCloudbrainInfo,
  434. })
  435. }
  436. func getPageDateCloudbrainInfo(dateCloudbrainInfo []DateCloudbrainInfo, page int, pagesize int) []DateCloudbrainInfo {
  437. begin := (page - 1) * pagesize
  438. end := (page) * pagesize
  439. if begin > len(dateCloudbrainInfo)-1 {
  440. return nil
  441. }
  442. if end > len(dateCloudbrainInfo)-1 {
  443. return dateCloudbrainInfo[begin:]
  444. } else {
  445. return dateCloudbrainInfo[begin:end]
  446. }
  447. }
  448. func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
  449. queryType := ctx.QueryTrim("type")
  450. beginTimeStr := ctx.QueryTrim("beginTime")
  451. endTimeStr := ctx.QueryTrim("endTime")
  452. recordCloudbrain, err := models.GetRecordBeginTime()
  453. if err != nil {
  454. log.Error("Can not get record begin time", err)
  455. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  456. return
  457. }
  458. recordBeginTime := time.Unix(int64(recordCloudbrain[0].Cloudbrain.CreatedUnix), 0)
  459. beginTime, endTime, err := getCloudbrainTimePeroid(ctx, recordBeginTime)
  460. if err != nil {
  461. log.Error("Parameter is wrong", err)
  462. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong"))
  463. return
  464. }
  465. cloudOneJobTypeRes := make(map[string]int)
  466. cloudTwoJobTypeRes := make(map[string]int)
  467. intelligentNetJobTypeRes := make(map[string]int)
  468. cloudBrainPeriodNum := make(map[int]int)
  469. cloudBrainComputeResource := make(map[string]int)
  470. beginTimeTemp := beginTime.Unix()
  471. if queryType == "all" || (queryType == "" && (beginTimeStr == "" || endTimeStr == "")) {
  472. beginTimeTemp = int64(recordCloudbrain[0].Cloudbrain.CreatedUnix)
  473. }
  474. page := 1
  475. pagesize := 1000
  476. count := pagesize
  477. //Each time a maximum of 1000 pieces of data are detected to the memory, batch processing
  478. for count == pagesize && count != 0 {
  479. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  480. ListOptions: models.ListOptions{
  481. Page: page,
  482. PageSize: pagesize,
  483. },
  484. Type: models.TypeCloudBrainAll,
  485. BeginTimeUnix: beginTimeTemp,
  486. EndTimeUnix: endTime.Unix(),
  487. })
  488. if err != nil {
  489. ctx.ServerError("Get cloudbrains failed:", err)
  490. return
  491. }
  492. for _, cloudbrain := range cloudbrains {
  493. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne {
  494. if _, ok := cloudOneJobTypeRes[cloudbrain.JobType]; !ok {
  495. cloudOneJobTypeRes[cloudbrain.JobType] = 1
  496. } else {
  497. cloudOneJobTypeRes[cloudbrain.JobType] += 1
  498. }
  499. }
  500. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo {
  501. if _, ok := cloudTwoJobTypeRes[cloudbrain.JobType]; !ok {
  502. cloudTwoJobTypeRes[cloudbrain.JobType] = 1
  503. } else {
  504. cloudTwoJobTypeRes[cloudbrain.JobType] += 1
  505. }
  506. }
  507. if cloudbrain.Cloudbrain.Type == models.TypeC2Net {
  508. if _, ok := intelligentNetJobTypeRes[cloudbrain.JobType]; !ok {
  509. intelligentNetJobTypeRes[cloudbrain.JobType] = 1
  510. } else {
  511. intelligentNetJobTypeRes[cloudbrain.JobType] += 1
  512. }
  513. }
  514. if _, ok := cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type]; !ok {
  515. cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] = 1
  516. } else {
  517. cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] += 1
  518. }
  519. if _, ok := cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource]; !ok {
  520. cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource] = 1
  521. } else {
  522. cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource] += 1
  523. }
  524. }
  525. count = len(cloudbrains)
  526. page += 1
  527. }
  528. jobTypeList := []string{string(models.JobTypeDebug), string(models.JobTypeTrain), string(models.JobTypeInference), string(models.JobTypeBenchmark),
  529. string(models.JobTypeBrainScore), string(models.JobTypeSnn4imagenet)}
  530. for _, v := range jobTypeList {
  531. if _, ok := cloudOneJobTypeRes[v]; !ok {
  532. cloudOneJobTypeRes[v] = 0
  533. }
  534. if _, ok := cloudTwoJobTypeRes[v]; !ok {
  535. cloudTwoJobTypeRes[v] = 0
  536. }
  537. if _, ok := intelligentNetJobTypeRes[v]; !ok {
  538. intelligentNetJobTypeRes[v] = 0
  539. }
  540. }
  541. cloudBrainTypeList := []int{0, 1, 2}
  542. for _, v := range cloudBrainTypeList {
  543. if _, ok := cloudBrainPeriodNum[v]; !ok {
  544. cloudBrainPeriodNum[v] = 0
  545. }
  546. }
  547. ComputeResourceList := []string{"CPU/GPU", "NPU"}
  548. for _, v := range ComputeResourceList {
  549. if _, ok := cloudBrainComputeResource[v]; !ok {
  550. cloudBrainComputeResource[v] = 0
  551. }
  552. }
  553. cloudOneJobTypeRes["EVALUATION"] = cloudOneJobTypeRes[string(models.JobTypeBenchmark)] + cloudOneJobTypeRes[string(models.JobTypeSnn4imagenet)] + cloudOneJobTypeRes[string(models.JobTypeBrainScore)]
  554. cloudTwoJobTypeRes["EVALUATION"] = cloudTwoJobTypeRes[string(models.JobTypeBenchmark)] + cloudTwoJobTypeRes[string(models.JobTypeSnn4imagenet)] + cloudTwoJobTypeRes[string(models.JobTypeBrainScore)]
  555. intelligentNetJobTypeRes["EVALUATION"] = intelligentNetJobTypeRes[string(models.JobTypeBenchmark)] + intelligentNetJobTypeRes[string(models.JobTypeSnn4imagenet)] + intelligentNetJobTypeRes[string(models.JobTypeBrainScore)]
  556. ctx.JSON(http.StatusOK, map[string]interface{}{
  557. "cloudOneJobTypeRes": cloudOneJobTypeRes,
  558. "cloudTwoJobTypeRes": cloudTwoJobTypeRes,
  559. "intelligentNetJobTypeRes": intelligentNetJobTypeRes,
  560. "cloudBrainPeriodNum": cloudBrainPeriodNum,
  561. "cloudBrainComputeResource": cloudBrainComputeResource,
  562. })
  563. }
  564. func GetCloudbrainsStatusAnalysis(ctx *context.Context) {
  565. recordCloudbrain, err := models.GetRecordBeginTime()
  566. if err != nil {
  567. log.Error("Can not get recordCloudbrain", err)
  568. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  569. return
  570. }
  571. recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix
  572. endTime := time.Now()
  573. cloudBrainStatusResult := make(map[string]int)
  574. cloudBrainStatusAnalysis := make(map[string]int)
  575. totalCount := 0
  576. page := 1
  577. pagesize := 1000
  578. count := pagesize
  579. for count == pagesize && count != 0 {
  580. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  581. ListOptions: models.ListOptions{
  582. Page: page,
  583. PageSize: pagesize,
  584. },
  585. Type: models.TypeCloudBrainAll,
  586. BeginTimeUnix: int64(recordBeginTime),
  587. EndTimeUnix: endTime.Unix(),
  588. })
  589. if err != nil {
  590. ctx.ServerError("Get cloudbrains failed:", err)
  591. return
  592. }
  593. for _, cloudbrain := range cloudbrains {
  594. if _, ok := cloudBrainStatusResult[cloudbrain.Status]; !ok {
  595. cloudBrainStatusResult[cloudbrain.Status] = 1
  596. } else {
  597. cloudBrainStatusResult[cloudbrain.Status] += 1
  598. }
  599. }
  600. count = len(cloudbrains)
  601. totalCount = totalCount + count
  602. page += 1
  603. }
  604. var jobStatuses []string
  605. jobStatuses = append(jobStatuses, string(models.ModelArtsTrainJobWaiting), string(models.ModelArtsTrainJobFailed), string(models.ModelArtsRunning), string(models.ModelArtsTrainJobCompleted),
  606. string(models.ModelArtsStarting), string(models.ModelArtsRestarting), string(models.ModelArtsStartFailed),
  607. string(models.ModelArtsStopping), string(models.ModelArtsStopped), string(models.JobSucceeded))
  608. jobStatusesCount := 0
  609. for _, v := range jobStatuses {
  610. if _, ok := cloudBrainStatusResult[v]; !ok {
  611. cloudBrainStatusAnalysis[v] = 0
  612. } else {
  613. cloudBrainStatusAnalysis[v] = cloudBrainStatusResult[v]
  614. }
  615. jobStatusesCount = jobStatusesCount + cloudBrainStatusResult[v]
  616. }
  617. cloudBrainStatusAnalysis["OTHER"] = totalCount - jobStatusesCount
  618. ctx.JSON(http.StatusOK, map[string]interface{}{
  619. "cloudBrainStatusResult": cloudBrainStatusAnalysis,
  620. })
  621. }
  622. func GetCloudbrainsDetailData(ctx *context.Context) {
  623. recordCloudbrain, err := models.GetRecordBeginTime()
  624. if err != nil {
  625. log.Error("Can not get recordCloudbrain", err)
  626. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  627. return
  628. }
  629. recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix
  630. endTime := time.Now()
  631. listType := ctx.Query("listType")
  632. jobType := ctx.Query("jobType")
  633. jobStatus := ctx.Query("jobStatus")
  634. cloudBrainType := ctx.QueryInt("Type")
  635. page := ctx.QueryInt("page")
  636. pageSize := ctx.QueryInt("pagesize")
  637. if page <= 0 {
  638. page = 1
  639. }
  640. if pageSize <= 0 {
  641. pageSize = 10
  642. }
  643. var jobTypes []string
  644. jobTypeNot := false
  645. if jobType == string(models.JobTypeBenchmark) {
  646. jobTypes = append(jobTypes, string(models.JobTypeBenchmark), string(models.JobTypeBrainScore), string(models.JobTypeSnn4imagenet))
  647. } else if jobType != "all" && jobType != "" {
  648. jobTypes = append(jobTypes, jobType)
  649. }
  650. var jobStatuses []string
  651. jobStatusNot := false
  652. if jobStatus == "other" {
  653. jobStatusNot = true
  654. jobStatuses = append(jobStatuses, string(models.ModelArtsTrainJobWaiting), string(models.ModelArtsTrainJobFailed), string(models.ModelArtsRunning), string(models.ModelArtsTrainJobCompleted),
  655. string(models.ModelArtsStarting), string(models.ModelArtsRestarting), string(models.ModelArtsStartFailed),
  656. string(models.ModelArtsStopping), string(models.ModelArtsStopped), string(models.JobSucceeded))
  657. } else if jobStatus != "all" && jobStatus != "" {
  658. jobStatuses = append(jobStatuses, jobStatus)
  659. }
  660. keyword := strings.Trim(ctx.Query("q"), " ")
  661. ciTasks, count, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  662. ListOptions: models.ListOptions{
  663. Page: page,
  664. PageSize: pageSize,
  665. },
  666. Keyword: keyword,
  667. Type: cloudBrainType,
  668. ComputeResource: listType,
  669. JobTypeNot: jobTypeNot,
  670. JobStatusNot: jobStatusNot,
  671. JobStatus: jobStatuses,
  672. JobTypes: jobTypes,
  673. NeedRepoInfo: true,
  674. BeginTimeUnix: int64(recordBeginTime),
  675. EndTimeUnix: endTime.Unix(),
  676. })
  677. if err != nil {
  678. ctx.ServerError("Get job failed:", err)
  679. return
  680. }
  681. nilTime := time.Time{}
  682. tasks := []models.TaskDetail{}
  683. for i, task := range ciTasks {
  684. ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource
  685. var taskDetail models.TaskDetail
  686. taskDetail.ID = ciTasks[i].Cloudbrain.ID
  687. taskDetail.JobName = ciTasks[i].JobName
  688. taskDetail.DisplayJobName = ciTasks[i].DisplayJobName
  689. taskDetail.Status = ciTasks[i].Status
  690. taskDetail.JobType = ciTasks[i].JobType
  691. taskDetail.CreatedUnix = ciTasks[i].Cloudbrain.CreatedUnix
  692. taskDetail.RunTime = ciTasks[i].Cloudbrain.TrainJobDuration
  693. taskDetail.StartTime = ciTasks[i].StartTime
  694. taskDetail.EndTime = ciTasks[i].EndTime
  695. taskDetail.ComputeResource = ciTasks[i].ComputeResource
  696. taskDetail.Type = ciTasks[i].Cloudbrain.Type
  697. taskDetail.UserName = ciTasks[i].User.Name
  698. taskDetail.RepoID = ciTasks[i].RepoID
  699. if ciTasks[i].Repo != nil {
  700. taskDetail.RepoName = ciTasks[i].Repo.OwnerName + "/" + ciTasks[i].Repo.Name
  701. taskDetail.RepoAlias = ciTasks[i].Repo.OwnerName + "/" + ciTasks[i].Repo.Alias
  702. }
  703. if ciTasks[i].Cloudbrain.Status == string(models.JobWaiting) {
  704. WaitTimeInt := time.Now().Unix() - ciTasks[i].Cloudbrain.CreatedUnix.AsTime().Unix()
  705. taskDetail.WaitTime = models.ConvertDurationToStr(WaitTimeInt)
  706. if WaitTimeInt < 0 {
  707. taskDetail.WaitTime = "00:00:00"
  708. }
  709. } else if ciTasks[i].Cloudbrain.Status == string(models.JobStopped) && ciTasks[i].Cloudbrain.StartTime.AsTime().Unix() == 0 {
  710. WaitTimeInt := ciTasks[i].Cloudbrain.EndTime.AsTime().Unix() - ciTasks[i].Cloudbrain.CreatedUnix.AsTime().Unix()
  711. taskDetail.WaitTime = models.ConvertDurationToStr(WaitTimeInt)
  712. if WaitTimeInt < 0 {
  713. taskDetail.WaitTime = "00:00:00"
  714. }
  715. } else {
  716. WaitTimeInt := ciTasks[i].Cloudbrain.StartTime.AsTime().Unix() - ciTasks[i].Cloudbrain.CreatedUnix.AsTime().Unix()
  717. taskDetail.WaitTime = models.ConvertDurationToStr(WaitTimeInt)
  718. if WaitTimeInt < 0 {
  719. taskDetail.WaitTime = "00:00:00"
  720. }
  721. }
  722. if ciTasks[i].Cloudbrain.Type == models.TypeCloudBrainTwo || (ciTasks[i].Cloudbrain.Type == models.TypeCloudBrainOne && ciTasks[i].Cloudbrain.JobType == "TRAIN") {
  723. taskDetail.JobID = ciTasks[i].Cloudbrain.JobID
  724. }
  725. if ciTasks[i].Cloudbrain.DeletedAt != nilTime {
  726. taskDetail.IsDelete = true
  727. } else {
  728. taskDetail.IsDelete = false
  729. }
  730. tasks = append(tasks, taskDetail)
  731. }
  732. pager := context.NewPagination(int(count), pageSize, page, getTotalPage(count, pageSize))
  733. pager.SetDefaultParams(ctx)
  734. pager.AddParam(ctx, "listType", "ListType")
  735. ctx.JSON(http.StatusOK, map[string]interface{}{
  736. "Title": ctx.Tr("kanban.cloudBrains"),
  737. "Tasks": tasks,
  738. "Keyword": keyword,
  739. "pager": pager,
  740. "count": count,
  741. })
  742. }
  743. func GetCloudbrainsCreateHoursData(ctx *context.Context) {
  744. recordCloudbrain, err := models.GetRecordBeginTime()
  745. if err != nil {
  746. log.Error("Can not get record begin time", err)
  747. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  748. return
  749. }
  750. recordBeginTime := time.Unix(int64(recordCloudbrain[0].Cloudbrain.CreatedUnix), 0)
  751. // recordBeginTime, _ := time.Parse("2006-01-02 15:04:05", recordTime)
  752. now := time.Now()
  753. queryType := ctx.QueryTrim("type")
  754. beginTimeStr := ctx.QueryTrim("beginTime")
  755. endTimeStr := ctx.QueryTrim("endTime")
  756. var beginTime time.Time
  757. var endTime time.Time
  758. createHourPeriodCount := make(map[string]interface{})
  759. if queryType != "" {
  760. if queryType == "all" {
  761. beginTime = recordBeginTime
  762. endTime = now.AddDate(0, 0, 1)
  763. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  764. } else if queryType == "today" {
  765. beginTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  766. endTime = now.AddDate(0, 0, 1)
  767. } else if queryType == "yesterday" {
  768. beginTime = now.AddDate(0, 0, -1)
  769. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  770. endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  771. } else if queryType == "current_week" {
  772. beginTime = now.AddDate(0, 0, -int(time.Now().Weekday())+1) //begin from monday
  773. endTime = now
  774. } else if queryType == "current_month" {
  775. beginTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  776. endTime = now.AddDate(0, 0, 1)
  777. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  778. } else if queryType == "monthly" {
  779. endTime = now
  780. beginTime = now.AddDate(0, -1, 0)
  781. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  782. } else if queryType == "current_year" {
  783. beginTime = time.Date(now.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  784. endTime = now.AddDate(0, 0, 1)
  785. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  786. } else if queryType == "last_month" {
  787. lastMonthTime := now.AddDate(0, -1, 0)
  788. beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location())
  789. endTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  790. } else if queryType == "last_7day" {
  791. beginTime = now.AddDate(0, 0, -6)
  792. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  793. endTime = now.AddDate(0, 0, 1)
  794. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  795. } else if queryType == "last_30day" {
  796. beginTime = now.AddDate(0, 0, -29)
  797. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  798. endTime = now.AddDate(0, 0, 1)
  799. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  800. }
  801. } else {
  802. if beginTimeStr == "" || endTimeStr == "" {
  803. //如果查询类型和开始时间结束时间都未设置,按queryType=all处理
  804. beginTime = recordBeginTime
  805. endTime = now.AddDate(0, 0, 1)
  806. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  807. } else {
  808. beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
  809. if err != nil {
  810. log.Error("Can not ParseInLocation.", err)
  811. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  812. return
  813. }
  814. endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
  815. if err != nil {
  816. log.Error("Can not ParseInLocation.", err)
  817. ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
  818. return
  819. }
  820. endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  821. }
  822. }
  823. dateBeginTime := beginTime.Format("2006-01-02")
  824. dateEndTime := endTime.Format("2006-01-02")
  825. createHourPeriodCount, err = models.GetCreateHourPeriodCount(dateBeginTime, dateEndTime)
  826. if err != nil {
  827. log.Error("Can not query hourPeriodCount.", err)
  828. ctx.Error(http.StatusBadRequest, ctx.Tr("hourPeriodCount_get_error"))
  829. return
  830. }
  831. runHourPeriodCount, err := models.GetRunHourPeriodCount(dateBeginTime, dateEndTime)
  832. if err != nil {
  833. log.Error("Can not query runHourPeriodCount.", err)
  834. ctx.Error(http.StatusBadRequest, ctx.Tr("runHourPeriodCount_get_error"))
  835. return
  836. }
  837. ctx.JSON(http.StatusOK, map[string]interface{}{
  838. "recordBeginTime": recordCloudbrain[0].Cloudbrain.CreatedUnix,
  839. "updateTime": now.Unix(),
  840. "createHourPeriodCount": createHourPeriodCount,
  841. "runHourPeriodCount": runHourPeriodCount,
  842. })
  843. }
  844. func GetWaittingTop(ctx *context.Context) {
  845. ciTasks, err := models.GetWaittingTop()
  846. if err != nil {
  847. log.Error("Can not get record begin time", err)
  848. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  849. return
  850. }
  851. tasks := []models.TaskDetail{}
  852. for i, task := range ciTasks {
  853. ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource
  854. var taskDetail models.TaskDetail
  855. taskDetail.DisplayJobName = ciTasks[i].DisplayJobName
  856. taskDetail.UserName = ciTasks[i].User.Name
  857. taskDetail.RepoID = ciTasks[i].RepoID
  858. if ciTasks[i].Repo != nil {
  859. taskDetail.RepoName = ciTasks[i].Repo.OwnerName + "/" + ciTasks[i].Repo.Name
  860. }
  861. WaitTimeInt := time.Now().Unix() - ciTasks[i].Cloudbrain.CreatedUnix.AsTime().Unix()
  862. taskDetail.WaitTime = models.ConvertDurationToStr(WaitTimeInt)
  863. if WaitTimeInt < 0 {
  864. taskDetail.WaitTime = "00:00:00"
  865. }
  866. tasks = append(tasks, taskDetail)
  867. }
  868. ctx.JSON(http.StatusOK, map[string]interface{}{
  869. "tasks": tasks,
  870. })
  871. }
  872. func GetRunningTop(ctx *context.Context) {
  873. ciTasks, err := models.GetRunningTop()
  874. if err != nil {
  875. log.Error("Can not get record begin time", err)
  876. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
  877. return
  878. }
  879. tasks := []models.TaskDetail{}
  880. for i, task := range ciTasks {
  881. ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource
  882. var taskDetail models.TaskDetail
  883. taskDetail.DisplayJobName = ciTasks[i].DisplayJobName
  884. taskDetail.RunTime = ciTasks[i].Cloudbrain.TrainJobDuration
  885. taskDetail.UserName = ciTasks[i].User.Name
  886. taskDetail.RepoID = ciTasks[i].RepoID
  887. if ciTasks[i].Repo != nil {
  888. taskDetail.RepoName = ciTasks[i].Repo.OwnerName + "/" + ciTasks[i].Repo.Name
  889. }
  890. tasks = append(tasks, taskDetail)
  891. }
  892. ctx.JSON(http.StatusOK, map[string]interface{}{
  893. "tasks": tasks,
  894. })
  895. }
  896. func getCloudbrainCount(beginTime time.Time, endTime time.Time, cloudbrains []*models.CloudbrainInfo) (map[string]int, map[string]int, map[string]int, map[int]int, map[string]int) {
  897. cloudOneJobTypeRes := make(map[string]int)
  898. cloudTwoJobTypeRes := make(map[string]int)
  899. intelligentNetJobTypeRes := make(map[string]int)
  900. cloudBrainPeriodNum := make(map[int]int)
  901. cloudBrainComputeResource := make(map[string]int)
  902. for _, cloudbrain := range cloudbrains {
  903. if int64(cloudbrain.Cloudbrain.CreatedUnix) >= beginTime.Unix() && int64(cloudbrain.Cloudbrain.CreatedUnix) < endTime.Unix() {
  904. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne {
  905. if _, ok := cloudOneJobTypeRes[cloudbrain.Cloudbrain.JobType]; !ok {
  906. cloudOneJobTypeRes[cloudbrain.Cloudbrain.JobType] = 1
  907. } else {
  908. cloudOneJobTypeRes[cloudbrain.Cloudbrain.JobType] += 1
  909. }
  910. }
  911. if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo {
  912. if _, ok := cloudTwoJobTypeRes[cloudbrain.JobType]; !ok {
  913. cloudTwoJobTypeRes[cloudbrain.Cloudbrain.JobType] = 1
  914. } else {
  915. cloudTwoJobTypeRes[cloudbrain.Cloudbrain.JobType] += 1
  916. }
  917. }
  918. if _, ok := cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type]; !ok {
  919. cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] = 1
  920. } else {
  921. cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] += 1
  922. }
  923. if _, ok := cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource]; !ok {
  924. cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource] = 1
  925. } else {
  926. cloudBrainComputeResource[cloudbrain.Cloudbrain.ComputeResource] += 1
  927. }
  928. }
  929. }
  930. ComputeResourceList := []string{"CPU/GPU", "NPU"}
  931. for _, v := range ComputeResourceList {
  932. if _, ok := cloudBrainComputeResource[v]; !ok {
  933. cloudBrainComputeResource[v] = 0
  934. }
  935. }
  936. jobTypeList := []string{"DEBUG", "BENCHMARK", "INFERENCE", "TRAIN", "SNN4IMAGENET", "BRAINSCORE"}
  937. cloudBrainTypeList := []int{0, 1, 2}
  938. for _, v := range jobTypeList {
  939. if _, ok := cloudOneJobTypeRes[v]; !ok {
  940. cloudOneJobTypeRes[v] = 0
  941. }
  942. if _, ok := cloudTwoJobTypeRes[v]; !ok {
  943. cloudTwoJobTypeRes[v] = 0
  944. }
  945. if _, ok := intelligentNetJobTypeRes[v]; !ok {
  946. intelligentNetJobTypeRes[v] = 0
  947. }
  948. }
  949. for _, v := range cloudBrainTypeList {
  950. if _, ok := cloudBrainPeriodNum[v]; !ok {
  951. cloudBrainPeriodNum[v] = 0
  952. }
  953. }
  954. cloudBrainPeriodNum[-1] = cloudBrainPeriodNum[0] + cloudBrainPeriodNum[1] + cloudBrainPeriodNum[2]
  955. return cloudOneJobTypeRes, cloudTwoJobTypeRes, intelligentNetJobTypeRes, cloudBrainPeriodNum, cloudBrainComputeResource
  956. }
  957. func getDayCloudbrainNum(beginTime time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
  958. var endTimeTemp time.Time
  959. endTimeTemp = beginTime.AddDate(0, 0, 1)
  960. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  961. Type: models.TypeCloudBrainAll,
  962. BeginTimeUnix: beginTime.Unix(),
  963. EndTimeUnix: endTime.Unix(),
  964. })
  965. if err != nil {
  966. log.Error("Get cloudbrains failed:", err)
  967. return nil, err
  968. }
  969. dayCloudbrainNum := make([]DateCloudbrainNum, 0)
  970. for endTimeTemp.Before(endTime) || endTimeTemp.Equal(endTime) {
  971. cloudOneJobTypeRes, cloudTwoJobTypeRes, intelligentNetJobTypeRes, cloudBrainPeriodNum, cloudBrainComputeResource := getCloudbrainCount(beginTime, endTimeTemp, cloudbrains)
  972. dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{
  973. Date: beginTime.Format("2006/01/02"),
  974. CloudOneJobTypeRes: cloudOneJobTypeRes,
  975. CloudTwoJobTypeRes: cloudTwoJobTypeRes,
  976. IntelligentNetJobTypeRes: intelligentNetJobTypeRes,
  977. CloudBrainPeriodNum: cloudBrainPeriodNum,
  978. CloudBrainComputeResource: cloudBrainComputeResource,
  979. })
  980. if endTime.Before(endTimeTemp.AddDate(0, 0, 1)) && endTimeTemp.Before(endTime) {
  981. beginTime = endTimeTemp
  982. endTimeTemp = endTime
  983. } else {
  984. beginTime = endTimeTemp
  985. endTimeTemp = beginTime.AddDate(0, 0, 1)
  986. }
  987. }
  988. return dayCloudbrainNum, nil
  989. }
  990. func getMonthCloudbrainNum(beginTime time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
  991. var endTimeTemp time.Time
  992. now := time.Now()
  993. endTimeTemp = beginTime.AddDate(0, 1, 0)
  994. endTimeTemp = time.Date(endTimeTemp.Year(), endTimeTemp.Month(), 1, 0, 0, 0, 0, now.Location())
  995. monthCloudbrainNum := make([]DateCloudbrainNum, 0)
  996. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  997. Type: models.TypeCloudBrainAll,
  998. BeginTimeUnix: beginTime.Unix(),
  999. EndTimeUnix: endTime.Unix(),
  1000. })
  1001. if err != nil {
  1002. log.Error("Getcloudbrains failed:%v", err)
  1003. return nil, err
  1004. }
  1005. for endTimeTemp.Before(endTime) || endTimeTemp.Equal(endTime) {
  1006. cloudOneJobTypeRes, cloudTwoJobTypeRes, intelligentNetJobTypeRes, cloudBrainPeriodNum, cloudBrainComputeResource := getCloudbrainCount(beginTime, endTimeTemp, cloudbrains)
  1007. monthCloudbrainNum = append(monthCloudbrainNum, DateCloudbrainNum{
  1008. Date: beginTime.Format("2006/01"),
  1009. CloudOneJobTypeRes: cloudOneJobTypeRes,
  1010. CloudTwoJobTypeRes: cloudTwoJobTypeRes,
  1011. IntelligentNetJobTypeRes: intelligentNetJobTypeRes,
  1012. CloudBrainPeriodNum: cloudBrainPeriodNum,
  1013. CloudBrainComputeResource: cloudBrainComputeResource,
  1014. })
  1015. if endTime.Before(endTimeTemp.AddDate(0, 1, 0)) && endTimeTemp.Before(endTime) {
  1016. beginTime = endTimeTemp
  1017. endTimeTemp = endTime
  1018. } else {
  1019. beginTime = endTimeTemp
  1020. endTimeTemp = beginTime.AddDate(0, 1, 0)
  1021. }
  1022. }
  1023. return monthCloudbrainNum, nil
  1024. }
  1025. func getDayCloudbrainInfo(beginTime time.Time, endTime time.Time) ([]DateCloudbrainInfo, int, error) {
  1026. now := time.Now()
  1027. endTimeTemp := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  1028. if endTimeTemp.Equal(endTime) {
  1029. endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
  1030. }
  1031. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  1032. Type: models.TypeCloudBrainAll,
  1033. BeginTimeUnix: beginTime.Unix(),
  1034. EndTimeUnix: endTime.Unix(),
  1035. })
  1036. if err != nil {
  1037. log.Error("Getcloudbrains failed:%v", err)
  1038. return nil, 0, err
  1039. }
  1040. dayCloudbrainInfo := make([]DateCloudbrainInfo, 0)
  1041. count := 0
  1042. for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) {
  1043. _, _, _, cloudBrainPeriodNum, cloudBrainComputeResource := getCloudbrainCount(endTimeTemp, endTime, cloudbrains)
  1044. dayCloudbrainInfo = append(dayCloudbrainInfo, DateCloudbrainInfo{
  1045. Date: endTimeTemp.Format("2006/01/02"),
  1046. CloudBrainPeriodNum: cloudBrainPeriodNum,
  1047. CloudBrainComputeResource: cloudBrainComputeResource,
  1048. })
  1049. endTime = endTimeTemp
  1050. endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
  1051. count += 1
  1052. }
  1053. return dayCloudbrainInfo, count, nil
  1054. }
  1055. func getMonthCloudbrainInfo(beginTime time.Time, endTime time.Time) ([]DateCloudbrainInfo, int, error) {
  1056. now := time.Now()
  1057. endTimeTemp := time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location())
  1058. if endTimeTemp.Equal(endTime) {
  1059. endTimeTemp = endTimeTemp.AddDate(0, -1, 0)
  1060. }
  1061. cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
  1062. Type: models.TypeCloudBrainAll,
  1063. BeginTimeUnix: beginTime.Unix(),
  1064. EndTimeUnix: endTime.Unix(),
  1065. })
  1066. if err != nil {
  1067. log.Error("Getcloudbrains failed:%v", err)
  1068. return nil, 0, err
  1069. }
  1070. dayCloudbrainInfo := make([]DateCloudbrainInfo, 0)
  1071. count := 0
  1072. for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) || (endTimeTemp.Before(beginTime) && beginTime.Before(endTime)) {
  1073. _, _, _, cloudBrainPeriodNum, cloudBrainComputeResource := getCloudbrainCount(endTimeTemp, endTime, cloudbrains)
  1074. dayCloudbrainInfo = append(dayCloudbrainInfo, DateCloudbrainInfo{
  1075. Date: endTimeTemp.Format("2006/01"),
  1076. CloudBrainPeriodNum: cloudBrainPeriodNum,
  1077. CloudBrainComputeResource: cloudBrainComputeResource,
  1078. })
  1079. endTime = endTimeTemp
  1080. endTimeTemp = endTimeTemp.AddDate(0, -1, 0)
  1081. count += 1
  1082. }
  1083. return dayCloudbrainInfo, count, nil
  1084. }
  1085. func DownloadCloudBrainBoard(ctx *context.Context) {
  1086. page := 1
  1087. pageSize := 300
  1088. var cloudBrain = ctx.Tr("repo.cloudbrain")
  1089. fileName := getCloudbrainFileName(cloudBrain)
  1090. _, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  1091. ListOptions: models.ListOptions{
  1092. Page: page,
  1093. PageSize: pageSize,
  1094. },
  1095. Type: models.TypeCloudBrainAll,
  1096. NeedRepoInfo: false,
  1097. })
  1098. if err != nil {
  1099. log.Warn("Can not get cloud brain info", err)
  1100. ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail"))
  1101. return
  1102. }
  1103. totalPage := getTotalPage(total, pageSize)
  1104. f := excelize.NewFile()
  1105. index := f.NewSheet(cloudBrain)
  1106. f.DeleteSheet("Sheet1")
  1107. for k, v := range allCloudbrainHeader(ctx) {
  1108. f.SetCellValue(cloudBrain, k, v)
  1109. }
  1110. var row = 2
  1111. for i := 0; i < totalPage; i++ {
  1112. pageRecords, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
  1113. ListOptions: models.ListOptions{
  1114. Page: page,
  1115. PageSize: pageSize,
  1116. },
  1117. Type: models.TypeCloudBrainAll,
  1118. NeedRepoInfo: true,
  1119. })
  1120. if err != nil {
  1121. log.Warn("Can not get cloud brain info", err)
  1122. continue
  1123. }
  1124. for _, record := range pageRecords {
  1125. for k, v := range allCloudbrainValues(row, record, ctx) {
  1126. f.SetCellValue(cloudBrain, k, v)
  1127. }
  1128. row++
  1129. }
  1130. page++
  1131. }
  1132. f.SetActiveSheet(index)
  1133. ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName))
  1134. ctx.Resp.Header().Set("Content-Type", "application/octet-stream")
  1135. f.WriteTo(ctx.Resp)
  1136. }
  1137. func getCloudbrainFileName(baseName string) string {
  1138. return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx"
  1139. }
  1140. func allCloudbrainHeader(ctx *context.Context) map[string]string {
  1141. return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.cloudbrain_type"), "C1": ctx.Tr("repo.modelarts.status"), "D1": ctx.Tr("repo.cloudbrain_task_type"),
  1142. "E1": ctx.Tr("repo.modelarts.createtime"), "F1": ctx.Tr("repo.modelarts.train_job.wait_time"), "G1": ctx.Tr("repo.modelarts.train_job.dura_time"),
  1143. "H1": ctx.Tr("repo.modelarts.train_job.start_time"),
  1144. "I1": ctx.Tr("repo.modelarts.train_job.end_time"), "J1": ctx.Tr("repo.modelarts.computing_resources"),
  1145. "K1": ctx.Tr("repo.cloudbrain_creator"), "L1": ctx.Tr("repo.repo_name"), "M1": ctx.Tr("repo.cloudbrain_task_name"), "N1": ctx.Tr("repo.modelarts.deletetime")}
  1146. }
  1147. func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string {
  1148. return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): getCloudbrainType(rs, ctx), getCellName("C", row): rs.Status, getCellName("D", row): rs.JobType,
  1149. getCellName("E", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("F", row): getBrainWaitTime(rs),
  1150. getCellName("G", row): rs.TrainJobDuration, getCellName("H", row): getBrainStartTime(rs),
  1151. getCellName("I", row): getBrainEndTime(rs),
  1152. getCellName("J", row): rs.ComputeResource, getCellName("K", row): rs.Name, getCellName("L", row): getBrainRepo(rs),
  1153. getCellName("M", row): rs.JobName, getCellName("N", row): getBrainDeleteTime(rs),
  1154. }
  1155. }
  1156. func getBrainRepo(rs *models.CloudbrainInfo) string {
  1157. if rs.Repo != nil {
  1158. return rs.Repo.OwnerName + "/" + rs.Repo.Alias
  1159. }
  1160. return ""
  1161. }
  1162. func getBrainStartTime(rs *models.CloudbrainInfo) string {
  1163. timeString := time.Unix(int64(rs.Cloudbrain.StartTime), 0).Format(CREATE_TIME_FORMAT)
  1164. if timeString != "1970/01/01 08:00:00" {
  1165. return timeString
  1166. } else {
  1167. return "0"
  1168. }
  1169. }
  1170. func getBrainEndTime(rs *models.CloudbrainInfo) string {
  1171. timeString := time.Unix(int64(rs.Cloudbrain.EndTime), 0).Format(CREATE_TIME_FORMAT)
  1172. if timeString != "1970/01/01 08:00:00" {
  1173. return timeString
  1174. } else {
  1175. return "0"
  1176. }
  1177. }
  1178. func getBrainWaitTime(rs *models.CloudbrainInfo) string {
  1179. var waitTime int64
  1180. if rs.Cloudbrain.Status == string(models.JobWaiting) {
  1181. waitTime = time.Now().Unix() - rs.Cloudbrain.CreatedUnix.AsTime().Unix()
  1182. } else {
  1183. waitTime = int64(rs.Cloudbrain.StartTime - rs.Cloudbrain.CreatedUnix)
  1184. }
  1185. if waitTime <= 0 {
  1186. return "00:00:00"
  1187. } else {
  1188. return models.ConvertDurationToStr(waitTime)
  1189. }
  1190. }
  1191. func getCloudbrainType(rs *models.CloudbrainInfo, ctx *context.Context) string {
  1192. if rs.Cloudbrain.Type == models.TypeCloudBrainOne {
  1193. return ctx.Tr("repo.cloudbrain1")
  1194. } else if rs.Cloudbrain.Type == models.TypeCloudBrainTwo {
  1195. return ctx.Tr("repo.cloudbrain2")
  1196. } else if rs.Cloudbrain.Type == models.TypeC2Net {
  1197. return ctx.Tr("repo.intelligent_net")
  1198. } else {
  1199. return ctx.Tr("repo.cloudbrain_untype")
  1200. }
  1201. }
  1202. func getBrainDeleteTime(rs *models.CloudbrainInfo) string {
  1203. nilTime := time.Time{}
  1204. if rs.Cloudbrain.DeletedAt != nilTime {
  1205. return rs.Cloudbrain.DeletedAt.Format("2006-01-02 15:04:05")
  1206. } else {
  1207. return ""
  1208. }
  1209. }
  1210. func getCloudbrainTimePeroid(ctx *context.Context, recordBeginTime time.Time) (time.Time, time.Time, error) {
  1211. queryType := ctx.QueryTrim("type")
  1212. beginTimeStr := ctx.QueryTrim("beginTime")
  1213. endTimeStr := ctx.QueryTrim("endTime")
  1214. now := time.Now()
  1215. var beginTime time.Time
  1216. var endTime time.Time
  1217. var err error
  1218. if queryType != "" {
  1219. if queryType == "all" {
  1220. beginTime = recordBeginTime
  1221. endTime = now
  1222. } else if queryType == "today" {
  1223. endTime = now
  1224. beginTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
  1225. } else if queryType == "yesterday" {
  1226. endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  1227. beginTime = endTime.AddDate(0, 0, -1)
  1228. } else if queryType == "last_7day" {
  1229. beginTime = now.AddDate(0, 0, -6)
  1230. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  1231. endTime = now
  1232. } else if queryType == "last_30day" {
  1233. beginTime = now.AddDate(0, 0, -29)
  1234. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  1235. endTime = now
  1236. } else if queryType == "current_month" {
  1237. endTime = now
  1238. beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location())
  1239. } else if queryType == "monthly" {
  1240. endTime = now
  1241. beginTime = now.AddDate(0, -1, 1)
  1242. beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
  1243. } else if queryType == "current_year" {
  1244. endTime = now
  1245. beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  1246. } else if queryType == "last_month" {
  1247. lastMonthTime := now.AddDate(0, -1, 0)
  1248. beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location())
  1249. endTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  1250. } else {
  1251. return now, now, fmt.Errorf("The value of type parameter is wrong.")
  1252. }
  1253. } else {
  1254. if beginTimeStr == "" || endTimeStr == "" {
  1255. //如果查询类型和开始时间结束时间都未设置,按queryType=all处理
  1256. beginTime = recordBeginTime
  1257. endTime = now
  1258. } else {
  1259. beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
  1260. if err != nil {
  1261. return now, now, err
  1262. }
  1263. endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
  1264. if err != nil {
  1265. return now, now, err
  1266. }
  1267. }
  1268. }
  1269. if beginTime.Before(recordBeginTime) {
  1270. beginTime = recordBeginTime
  1271. }
  1272. return beginTime, endTime, nil
  1273. }