|
- package repo
-
- import (
- "strings"
- "time"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/timeutil"
- )
-
- func CloudbrainDurationStatisticHour() {
-
- dateTime := time.Now().Format("2006-01-02 15:04:05")
- dayTime := time.Now().Format("2006-01-02")
- now := time.Now()
-
- currentTime := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
-
- m, _ := time.ParseDuration("-1h")
- beginTime := currentTime.Add(m).Unix()
- endTime := currentTime.Unix()
- hourTime := currentTime.Add(m).Hour()
-
- ciTasks, err := models.GetCloudbrainByTime(beginTime, endTime)
- if err != nil {
- log.Info("GetCloudbrainByTime err: %v", err)
- return
- }
- specMap := make(map[string]*models.Specification)
- models.LoadSpecs4CloudbrainInfo(ciTasks)
- for _, cloudbrain := range ciTasks {
- if _, ok := specMap[cloudbrain.Cloudbrain.Spec.AiCenterCode+"/"+cloudbrain.Cloudbrain.Spec.AccCardType]; !ok {
- if cloudbrain.Cloudbrain.Spec != nil {
- specMap[cloudbrain.Cloudbrain.Spec.AiCenterCode+"/"+cloudbrain.Cloudbrain.Spec.AccCardType] = cloudbrain.Cloudbrain.Spec
- }
- }
- }
-
- cloudBrainCenterCodeAndCardTypeInfo := getcloudBrainCenterCodeAndCardTypeInfo(ciTasks, beginTime, endTime)
-
- resourceQueues, err := models.GetCanUseCardInfo()
- if err != nil {
- log.Info("GetCanUseCardInfo err: %v", err)
- return
- }
- cardsTotalDurationMap := make(map[string]int)
- for _, resourceQueue := range resourceQueues {
- cardsTotalDurationMap[resourceQueue.Cluster+"/"+resourceQueue.AiCenterName+"/"+resourceQueue.AiCenterCode+"/"+resourceQueue.AccCardType+"/"+resourceQueue.ComputeResource] = resourceQueue.CardsTotalNum * 1 * 60 * 60
- }
-
- for centerCode, CardTypeInfo := range cloudBrainCenterCodeAndCardTypeInfo {
- for cardType, cardDuration := range CardTypeInfo {
- spec := specMap[centerCode+"/"+cardType]
- if spec != nil {
- if err := models.DeleteCloudbrainDurationStatisticHour(dayTime, hourTime, centerCode, cardType); err != nil {
- log.Error("DeleteCloudbrainDurationStatisticHour failed: %v", err.Error())
- return
- }
- if _, ok := cardsTotalDurationMap[spec.Cluster+"/"+spec.AiCenterName+"/"+centerCode+"/"+cardType+"/"+spec.ComputeResource]; !ok {
- cardsTotalDurationMap[spec.Cluster+"/"+spec.AiCenterName+"/"+centerCode+"/"+cardType+"/"+spec.ComputeResource] = 0
- }
- cloudbrainDurationStat := models.CloudbrainDurationStatistic{
- DateTime: dateTime,
- DayTime: dayTime,
- HourTime: hourTime,
- Cluster: spec.Cluster,
- AiCenterName: spec.AiCenterName,
- AiCenterCode: centerCode,
- AccCardType: cardType,
- ComputeResource: spec.ComputeResource,
- CardsUseDuration: cardDuration,
- CardsTotalDuration: cardsTotalDurationMap[spec.Cluster+"/"+spec.AiCenterName+"/"+centerCode+"/"+cardType+"/"+spec.ComputeResource],
- CreatedUnix: timeutil.TimeStampNow(),
- }
- if _, err = models.InsertCloudbrainDurationStatistic(&cloudbrainDurationStat); err != nil {
- log.Error("Insert cloudbrainDurationStat failed: %v", err.Error())
- }
- delete(cardsTotalDurationMap, spec.Cluster+"/"+spec.AiCenterName+"/"+centerCode+"/"+cardType+"/"+spec.ComputeResource)
- }
- }
- }
-
- for key, cardsTotalDuration := range cardsTotalDurationMap {
- if err := models.DeleteCloudbrainDurationStatisticHour(dayTime, hourTime, strings.Split(key, "/")[2], strings.Split(key, "/")[3]); err != nil {
- log.Error("DeleteCloudbrainDurationStatisticHour failed: %v", err.Error())
- return
- }
- cloudbrainDurationStat := models.CloudbrainDurationStatistic{
- DateTime: dateTime,
- DayTime: dayTime,
- HourTime: hourTime,
- Cluster: strings.Split(key, "/")[0],
- AiCenterName: strings.Split(key, "/")[1],
- AiCenterCode: strings.Split(key, "/")[2],
- AccCardType: strings.Split(key, "/")[3],
- ComputeResource: strings.Split(key, "/")[4],
- CardsUseDuration: 0,
- CardsTotalDuration: cardsTotalDuration,
- CreatedUnix: timeutil.TimeStampNow(),
- }
- if _, err = models.InsertCloudbrainDurationStatistic(&cloudbrainDurationStat); err != nil {
- log.Error("Insert cloudbrainDurationStat failed: %v", err.Error())
- }
- }
-
- log.Info("finish summary cloudbrainDurationStat")
- }
-
- func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, beginTime int64, endTime int64) map[string]map[string]int {
- var WorkServerNumber int
- var AccCardsNum int
- cloudBrainCenterCodeAndCardType := make(map[string]map[string]int)
- for _, cloudbrain := range ciTasks {
-
- if cloudbrain.Cloudbrain.StartTime == 0 {
- cloudbrain.Cloudbrain.StartTime = cloudbrain.Cloudbrain.CreatedUnix
- }
- if cloudbrain.Cloudbrain.EndTime == 0 {
- cloudbrain.Cloudbrain.EndTime = cloudbrain.Cloudbrain.UpdatedUnix
- }
- if cloudbrain.Cloudbrain.WorkServerNumber >= 1 {
- WorkServerNumber = cloudbrain.Cloudbrain.WorkServerNumber
- } else {
- WorkServerNumber = 1
- }
- if cloudbrain.Cloudbrain.Spec == nil {
- AccCardsNum = 1
- } else {
- AccCardsNum = cloudbrain.Cloudbrain.Spec.AccCardsNum
- }
- if _, ok := cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode]; !ok {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode] = make(map[string]int)
- }
-
- if cloudbrain.Cloudbrain.Status == string(models.ModelArtsRunning) {
- if _, ok := cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType]; !ok {
- if int64(cloudbrain.Cloudbrain.StartTime) < beginTime {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(endTime) - int(beginTime))
- } else {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(endTime) - int(cloudbrain.Cloudbrain.StartTime))
- }
- } else {
- if int64(cloudbrain.Cloudbrain.StartTime) < beginTime {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] += AccCardsNum * WorkServerNumber * (int(endTime) - int(beginTime))
- } else {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] += AccCardsNum * WorkServerNumber * (int(endTime) - int(cloudbrain.Cloudbrain.StartTime))
- }
- }
- } else {
- if _, ok := cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType]; !ok {
- if int64(cloudbrain.Cloudbrain.StartTime) < beginTime {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(cloudbrain.Cloudbrain.EndTime) - int(beginTime))
- } else {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(cloudbrain.Cloudbrain.EndTime) - int(cloudbrain.Cloudbrain.StartTime))
- }
- } else {
- if int64(cloudbrain.Cloudbrain.StartTime) < beginTime {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] += AccCardsNum * WorkServerNumber * (int(cloudbrain.Cloudbrain.EndTime) - int(beginTime))
- } else {
- cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.Spec.AiCenterCode][cloudbrain.Cloudbrain.Spec.AccCardType] += AccCardsNum * WorkServerNumber * (int(cloudbrain.Cloudbrain.EndTime) - int(cloudbrain.Cloudbrain.StartTime))
- }
- }
-
- }
- }
-
- return cloudBrainCenterCodeAndCardType
- }
|