@@ -46,7 +46,8 @@ type CloudbrainDurationStatistic struct { | |||||
ComputeResource string | ComputeResource string | ||||
AccCardType string `xorm:"INDEX"` | AccCardType string `xorm:"INDEX"` | ||||
DateTime timeutil.TimeStamp `xorm:"INDEX"` | |||||
DateTime timeutil.TimeStamp `xorm:"INDEX DEFAULT 0"` | |||||
DateTimeUnix timeutil.TimeStamp `xorm:"INDEX DEFAULT 0"` | |||||
DayTime string `xorm:"INDEX"` | DayTime string `xorm:"INDEX"` | ||||
HourTime int `xorm:"INDEX"` | HourTime int `xorm:"INDEX"` | ||||
CardsUseDuration int | CardsUseDuration int | ||||
@@ -274,7 +275,6 @@ func GetCloudbrainByTime(beginTime int64, endTime int64) ([]*CloudbrainInfo, err | |||||
sess := x.NewSession() | sess := x.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
var cond = builder.NewCond() | var cond = builder.NewCond() | ||||
sess.Exec("if ") | |||||
cond = cond.Or( | cond = cond.Or( | ||||
builder.And(builder.Gte{"cloudbrain.end_time": beginTime}, builder.Lte{"cloudbrain.start_time": beginTime}, builder.Gt{"cloudbrain.start_time": 0}), | builder.And(builder.Gte{"cloudbrain.end_time": beginTime}, builder.Lte{"cloudbrain.start_time": beginTime}, builder.Gt{"cloudbrain.start_time": 0}), | ||||
) | ) | ||||
@@ -284,11 +284,12 @@ func GetCloudbrainByTime(beginTime int64, endTime int64) ([]*CloudbrainInfo, err | |||||
cond = cond.Or( | cond = cond.Or( | ||||
builder.And(builder.Eq{"cloudbrain.status": string(JobRunning)}), | builder.And(builder.Eq{"cloudbrain.status": string(JobRunning)}), | ||||
) | ) | ||||
sess.OrderBy("cloudbrain.created_unix ASC") | |||||
sess.OrderBy("cloudbrain.id ASC") | |||||
cloudbrains := make([]*CloudbrainInfo, 0, 10) | cloudbrains := make([]*CloudbrainInfo, 0, 10) | ||||
if err := sess.Table(&Cloudbrain{}).Unscoped().Where(cond). | if err := sess.Table(&Cloudbrain{}).Unscoped().Where(cond). | ||||
Find(&cloudbrains); err != nil { | Find(&cloudbrains); err != nil { | ||||
log.Info("find error.") | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return cloudbrains, nil | return cloudbrains, nil | ||||
} | } | ||||
@@ -303,7 +304,8 @@ func GetSpecByAiCenterCodeAndType(aiCenterCode string, accCardType string) ([]*C | |||||
cloudbrainSpecs := make([]*CloudbrainSpec, 0, 10) | cloudbrainSpecs := make([]*CloudbrainSpec, 0, 10) | ||||
if err := sess.Table(&CloudbrainSpec{}).Where(cond). | if err := sess.Table(&CloudbrainSpec{}).Where(cond). | ||||
Find(&cloudbrainSpecs); err != nil { | Find(&cloudbrainSpecs); err != nil { | ||||
log.Info("find error.") | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return cloudbrainSpecs, nil | return cloudbrainSpecs, nil | ||||
} | } | ||||
@@ -328,7 +330,8 @@ func GetCanUseCardInfo() ([]*ResourceQueue, error) { | |||||
sess.OrderBy("resource_queue.cluster DESC, resource_queue.ai_center_code ASC") | sess.OrderBy("resource_queue.cluster DESC, resource_queue.ai_center_code ASC") | ||||
ResourceQueues := make([]*ResourceQueue, 0, 10) | ResourceQueues := make([]*ResourceQueue, 0, 10) | ||||
if err := sess.Table(&ResourceQueue{}).Find(&ResourceQueues); err != nil { | if err := sess.Table(&ResourceQueue{}).Find(&ResourceQueues); err != nil { | ||||
log.Info("find error.") | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return ResourceQueues, nil | return ResourceQueues, nil | ||||
} | } | ||||
@@ -339,7 +342,7 @@ func GetCardDurationStatistics(opts *DurationStatisticOptions) ([]*CloudbrainDur | |||||
var cond = builder.NewCond() | var cond = builder.NewCond() | ||||
if opts.BeginTime.Unix() > 0 && opts.EndTime.Unix() > 0 { | if opts.BeginTime.Unix() > 0 && opts.EndTime.Unix() > 0 { | ||||
cond = cond.And( | cond = cond.And( | ||||
builder.And(builder.Gte{"cloudbrain_duration_statistic.date_time": opts.BeginTime.Unix()}, builder.Lt{"cloudbrain_duration_statistic.date_time": opts.EndTime.Unix()}), | |||||
builder.And(builder.Gte{"cloudbrain_duration_statistic.date_time_unix": opts.BeginTime.Unix()}, builder.Lt{"cloudbrain_duration_statistic.date_time_unix": opts.EndTime.Unix()}), | |||||
) | ) | ||||
} | } | ||||
if opts.AiCenterCode != "" { | if opts.AiCenterCode != "" { | ||||
@@ -350,7 +353,8 @@ func GetCardDurationStatistics(opts *DurationStatisticOptions) ([]*CloudbrainDur | |||||
CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0, 10) | CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0, 10) | ||||
if err := sess.Table(&CloudbrainDurationStatistic{}).Where(cond). | if err := sess.Table(&CloudbrainDurationStatistic{}).Where(cond). | ||||
Find(&CloudbrainDurationStatistics); err != nil { | Find(&CloudbrainDurationStatistics); err != nil { | ||||
log.Info("find error.") | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return CloudbrainDurationStatistics, nil | return CloudbrainDurationStatistics, nil | ||||
} | } | ||||
@@ -358,10 +362,18 @@ func GetCardDurationStatistics(opts *DurationStatisticOptions) ([]*CloudbrainDur | |||||
func GetDurationRecordBeginTime() ([]*CloudbrainDurationStatistic, error) { | func GetDurationRecordBeginTime() ([]*CloudbrainDurationStatistic, error) { | ||||
sess := xStatistic.NewSession() | sess := xStatistic.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
sess.OrderBy("cloudbrain_duration_statistic.date_time ASC limit 1") | |||||
var cond = builder.NewCond() | |||||
cond = cond.And( | |||||
builder.Gt{"cloudbrain_duration_statistic.date_time_unix": 0}, | |||||
) | |||||
sess.OrderBy("cloudbrain_duration_statistic.date_time_unix ASC limit 1") | |||||
CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0) | CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0) | ||||
if err := sess.Table(&CloudbrainDurationStatistic{}).Find(&CloudbrainDurationStatistics); err != nil { | |||||
log.Info("find error.") | |||||
if err := sess.Table(&CloudbrainDurationStatistic{}).Where(cond).Find(&CloudbrainDurationStatistics); err != nil { | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return CloudbrainDurationStatistics, nil | return CloudbrainDurationStatistics, nil | ||||
} | } | ||||
@@ -369,10 +381,16 @@ func GetDurationRecordBeginTime() ([]*CloudbrainDurationStatistic, error) { | |||||
func GetDurationRecordUpdateTime() ([]*CloudbrainDurationStatistic, error) { | func GetDurationRecordUpdateTime() ([]*CloudbrainDurationStatistic, error) { | ||||
sess := xStatistic.NewSession() | sess := xStatistic.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
sess.OrderBy("cloudbrain_duration_statistic.date_time DESC limit 1") | |||||
var cond = builder.NewCond() | |||||
cond = cond.And( | |||||
builder.Gt{"cloudbrain_duration_statistic.date_time_unix": 1577808000}, | |||||
) | |||||
sess.OrderBy("cloudbrain_duration_statistic.date_time_unix DESC limit 1") | |||||
CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0) | CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0) | ||||
if err := sess.Table(&CloudbrainDurationStatistic{}).Find(&CloudbrainDurationStatistics); err != nil { | |||||
log.Info("find error.") | |||||
if err := sess.Table(&CloudbrainDurationStatistic{}).Where(cond).Find(&CloudbrainDurationStatistics); err != nil { | |||||
log.Error("find error.") | |||||
return nil, err | |||||
} | } | ||||
return CloudbrainDurationStatistics, nil | return CloudbrainDurationStatistics, nil | ||||
} | } | ||||
@@ -380,8 +398,8 @@ func GetDurationRecordUpdateTime() ([]*CloudbrainDurationStatistic, error) { | |||||
func DeleteCloudbrainDurationStatistic(beginTime timeutil.TimeStamp, endTime timeutil.TimeStamp) error { | func DeleteCloudbrainDurationStatistic(beginTime timeutil.TimeStamp, endTime timeutil.TimeStamp) error { | ||||
sess := xStatistic.NewSession() | sess := xStatistic.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
if _, err := sess.Exec("DELETE FROM cloudbrain_duration_statistic WHERE cloudbrain_duration_statistic.date_time BETWEEN ? AND ?", beginTime, endTime); err != nil { | |||||
log.Info("DELETE cloudbrain_duration_statistic data error.") | |||||
if _, err := sess.Exec("DELETE FROM cloudbrain_duration_statistic WHERE cloudbrain_duration_statistic.date_time_unix BETWEEN ? AND ?", beginTime, endTime); err != nil { | |||||
log.Error("DELETE cloudbrain_duration_statistic data error.") | |||||
return err | return err | ||||
} | } | ||||
return nil | return nil | ||||
@@ -584,6 +584,8 @@ var ( | |||||
TrainJobFLAVORINFOS string | TrainJobFLAVORINFOS string | ||||
ModelArtsSpecialPools string | ModelArtsSpecialPools string | ||||
ModelArtsMultiNode string | ModelArtsMultiNode string | ||||
//kanban | |||||
IsCloudbrainTimingEnabled bool | |||||
// modelarts-cd config | // modelarts-cd config | ||||
ModelartsCD = struct { | ModelartsCD = struct { | ||||
@@ -1609,6 +1611,9 @@ func NewContext() { | |||||
FileNoteBook.ImageNPUDescription = sec.Key("image_npu_desc").MustString("") | FileNoteBook.ImageNPUDescription = sec.Key("image_npu_desc").MustString("") | ||||
FileNoteBook.ImageNPUCDDescription = sec.Key("image_npu_cd_desc").MustString("") | FileNoteBook.ImageNPUCDDescription = sec.Key("image_npu_cd_desc").MustString("") | ||||
sec = Cfg.Section("kanban") | |||||
IsCloudbrainTimingEnabled = sec.Key("ENABLED").MustBool(false) | |||||
getGrampusConfig() | getGrampusConfig() | ||||
getModelartsCDConfig() | getModelartsCDConfig() | ||||
getModelConvertConfig() | getModelConvertConfig() | ||||
@@ -11,6 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/timeutil" | |||||
"code.gitea.io/gitea/routers/repo" | "code.gitea.io/gitea/routers/repo" | ||||
cloudbrainService "code.gitea.io/gitea/services/cloudbrain" | cloudbrainService "code.gitea.io/gitea/services/cloudbrain" | ||||
"code.gitea.io/gitea/services/cloudbrain/resource" | "code.gitea.io/gitea/services/cloudbrain/resource" | ||||
@@ -1464,12 +1465,17 @@ func getCloudbrainTimePeroid(ctx *context.Context, recordBeginTime time.Time) (t | |||||
} | } | ||||
func GetCloudbrainResourceOverview(ctx *context.Context) { | func GetCloudbrainResourceOverview(ctx *context.Context) { | ||||
var recordBeginTime timeutil.TimeStamp | |||||
recordCloudbrainDuration, err := models.GetDurationRecordBeginTime() | recordCloudbrainDuration, err := models.GetDurationRecordBeginTime() | ||||
if err != nil { | if err != nil { | ||||
log.Error("Can not get GetDurationRecordBeginTime", err) | log.Error("Can not get GetDurationRecordBeginTime", err) | ||||
return | return | ||||
} | } | ||||
recordBeginTime := recordCloudbrainDuration[0].DateTime | |||||
if len(recordCloudbrainDuration) > 0 && err == nil { | |||||
recordBeginTime = recordCloudbrainDuration[0].DateTimeUnix | |||||
} else { | |||||
recordBeginTime = timeutil.TimeStamp(time.Now().Unix()) | |||||
} | |||||
recordUpdateTime := time.Now().Unix() | recordUpdateTime := time.Now().Unix() | ||||
resourceQueues, err := models.GetCanUseCardInfo() | resourceQueues, err := models.GetCanUseCardInfo() | ||||
if err != nil { | if err != nil { | ||||
@@ -1596,6 +1602,7 @@ func getBeginAndEndTime(ctx *context.Context) (time.Time, time.Time) { | |||||
now := time.Now() | now := time.Now() | ||||
beginTimeStr := ctx.QueryTrim("beginTime") | beginTimeStr := ctx.QueryTrim("beginTime") | ||||
endTimeStr := ctx.QueryTrim("endTime") | endTimeStr := ctx.QueryTrim("endTime") | ||||
var brainRecordBeginTime time.Time | |||||
var beginTime time.Time | var beginTime time.Time | ||||
var endTime time.Time | var endTime time.Time | ||||
@@ -1608,7 +1615,12 @@ func getBeginAndEndTime(ctx *context.Context) (time.Time, time.Time) { | |||||
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) | ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) | ||||
return beginTime, endTime | return beginTime, endTime | ||||
} | } | ||||
brainRecordBeginTime := recordCloudbrainDuration[0].DateTime.AsTime() | |||||
if len(recordCloudbrainDuration) > 0 && err == nil { | |||||
brainRecordBeginTime = recordCloudbrainDuration[0].DateTimeUnix.AsTime() | |||||
} else { | |||||
brainRecordBeginTime = now | |||||
} | |||||
beginTime = brainRecordBeginTime | beginTime = brainRecordBeginTime | ||||
endTime = now | endTime = now | ||||
} else if queryType == "today" { | } else if queryType == "today" { | ||||
@@ -1650,7 +1662,11 @@ func getBeginAndEndTime(ctx *context.Context) (time.Time, time.Time) { | |||||
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) | ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) | ||||
return beginTime, endTime | return beginTime, endTime | ||||
} | } | ||||
brainRecordBeginTime := recordCloudbrainDuration[0].DateTime.AsTime() | |||||
if len(recordCloudbrainDuration) > 0 && err == nil { | |||||
brainRecordBeginTime = recordCloudbrainDuration[0].DateTimeUnix.AsTime() | |||||
} else { | |||||
brainRecordBeginTime = now | |||||
} | |||||
beginTime = brainRecordBeginTime | beginTime = brainRecordBeginTime | ||||
endTime = now | endTime = now | ||||
} else { | } else { | ||||
@@ -1681,7 +1697,7 @@ func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrain | |||||
usageRate := float64(0) | usageRate := float64(0) | ||||
for _, cloudbrainStatistic := range cloudbrainStatistics { | for _, cloudbrainStatistic := range cloudbrainStatistics { | ||||
if int64(cloudbrainStatistic.DateTime) >= beginTime.Unix() && int64(cloudbrainStatistic.DateTime) < endTime.Unix() { | |||||
if int64(cloudbrainStatistic.DateTimeUnix) >= beginTime.Unix() && int64(cloudbrainStatistic.DateTimeUnix) < endTime.Unix() { | |||||
totalDuration += cloudbrainStatistic.CardsTotalDuration | totalDuration += cloudbrainStatistic.CardsTotalDuration | ||||
usageDuration += cloudbrainStatistic.CardsUseDuration | usageDuration += cloudbrainStatistic.CardsUseDuration | ||||
} | } | ||||
@@ -1,6 +1,7 @@ | |||||
package repo | package repo | ||||
import ( | import ( | ||||
"fmt" | |||||
"net/http" | "net/http" | ||||
"strings" | "strings" | ||||
"time" | "time" | ||||
@@ -8,36 +9,39 @@ import ( | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/setting" | |||||
"code.gitea.io/gitea/modules/timeutil" | "code.gitea.io/gitea/modules/timeutil" | ||||
cloudbrainService "code.gitea.io/gitea/services/cloudbrain" | cloudbrainService "code.gitea.io/gitea/services/cloudbrain" | ||||
) | ) | ||||
func CloudbrainDurationStatisticHour() { | func CloudbrainDurationStatisticHour() { | ||||
var statisticTime time.Time | |||||
var count int64 | |||||
recordDurationUpdateTime, err := models.GetDurationRecordUpdateTime() | |||||
if err != nil { | |||||
log.Error("Can not get GetDurationRecordBeginTime", err) | |||||
} | |||||
now := time.Now() | |||||
currentTime := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) | |||||
if err == nil && len(recordDurationUpdateTime) > 0 { | |||||
statisticTime = time.Unix(int64(recordDurationUpdateTime[0].DateTime), 0).Add(+1 * time.Hour) | |||||
} else { | |||||
statisticTime = currentTime | |||||
} | |||||
if setting.IsCloudbrainTimingEnabled { | |||||
var statisticTime time.Time | |||||
var count int64 | |||||
recordDurationUpdateTime, err := models.GetDurationRecordUpdateTime() | |||||
if err != nil { | |||||
log.Error("Can not get GetDurationRecordBeginTime", err) | |||||
} | |||||
now := time.Now() | |||||
currentTime := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) | |||||
if err == nil && len(recordDurationUpdateTime) > 0 { | |||||
statisticTime = time.Unix(int64(recordDurationUpdateTime[0].DateTimeUnix), 0).Add(+1 * time.Hour) | |||||
} else { | |||||
statisticTime = currentTime | |||||
} | |||||
err = models.DeleteCloudbrainDurationStatistic(timeutil.TimeStamp(statisticTime.Unix()), timeutil.TimeStamp(currentTime.Unix())) | |||||
if err != nil { | |||||
log.Error("DeleteCloudbrainDurationStatistic failed", err) | |||||
} | |||||
err = models.DeleteCloudbrainDurationStatistic(timeutil.TimeStamp(statisticTime.Unix()), timeutil.TimeStamp(currentTime.Unix())) | |||||
if err != nil { | |||||
log.Error("DeleteCloudbrainDurationStatistic failed", err) | |||||
} | |||||
for statisticTime.Before(currentTime) || statisticTime.Equal(currentTime) { | |||||
countEach := summaryDurationStat(statisticTime) | |||||
count += countEach | |||||
statisticTime = statisticTime.Add(+1 * time.Hour) | |||||
for statisticTime.Before(currentTime) || statisticTime.Equal(currentTime) { | |||||
countEach := summaryDurationStat(statisticTime) | |||||
count += countEach | |||||
statisticTime = statisticTime.Add(+1 * time.Hour) | |||||
} | |||||
log.Info("summaryDurationStat count: %v", count) | |||||
} | } | ||||
log.Info("summaryDurationStat count: %v", count) | |||||
} | } | ||||
func UpdateDurationStatisticHistoryData(beginTime time.Time, endTime time.Time) int64 { | func UpdateDurationStatisticHistoryData(beginTime time.Time, endTime time.Time) int64 { | ||||
var count int64 | var count int64 | ||||
@@ -54,7 +58,7 @@ func UpdateDurationStatisticHistoryData(beginTime time.Time, endTime time.Time) | |||||
//statisticTime是当前的时辰,比如当前是2019-01-01 12:01:01,那么statisticTime就是2019-01-01 12:00:00 | //statisticTime是当前的时辰,比如当前是2019-01-01 12:01:01,那么statisticTime就是2019-01-01 12:00:00 | ||||
func summaryDurationStat(statisticTime time.Time) int64 { | func summaryDurationStat(statisticTime time.Time) int64 { | ||||
var count int64 | var count int64 | ||||
dateTime := timeutil.TimeStamp(statisticTime.Add(-1 * time.Hour).Unix()) | |||||
dateTimeUnix := timeutil.TimeStamp(statisticTime.Add(-1 * time.Hour).Unix()) | |||||
beginTime := statisticTime.Add(-1 * time.Hour).Unix() | beginTime := statisticTime.Add(-1 * time.Hour).Unix() | ||||
dayTime := statisticTime.Add(-1 * time.Hour).Format("2006-01-02") | dayTime := statisticTime.Add(-1 * time.Hour).Format("2006-01-02") | ||||
hourTime := statisticTime.Add(-1 * time.Hour).Hour() | hourTime := statisticTime.Add(-1 * time.Hour).Hour() | ||||
@@ -65,27 +69,9 @@ func summaryDurationStat(statisticTime time.Time) int64 { | |||||
log.Info("GetCloudbrainByTime err: %v", err) | log.Info("GetCloudbrainByTime err: %v", err) | ||||
return 0 | return 0 | ||||
} | } | ||||
cloudbrainMap := make(map[string]*models.Cloudbrain) | |||||
fmt.Printf("ciTasks:", ciTasks[0].Cloudbrain.JobName) | |||||
models.LoadSpecs4CloudbrainInfo(ciTasks) | models.LoadSpecs4CloudbrainInfo(ciTasks) | ||||
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 | |||||
} | |||||
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | |||||
if cloudbrain.Cloudbrain.Spec != nil { | |||||
if _, ok := cloudbrainMap[cloudbrain.Cloudbrain.AiCenter+"/"+cloudbrain.Cloudbrain.Spec.AccCardType]; !ok { | |||||
if cloudbrain.Cloudbrain.Spec != nil { | |||||
cloudbrainMap[cloudbrain.Cloudbrain.AiCenter+"/"+cloudbrain.Cloudbrain.Spec.AccCardType] = &cloudbrain.Cloudbrain | |||||
} | |||||
} | |||||
} | |||||
} | |||||
cloudBrainCenterCodeAndCardTypeInfo := getcloudBrainCenterCodeAndCardTypeInfo(ciTasks, beginTime, endTime) | |||||
cloudBrainCenterCodeAndCardTypeInfo, cloudbrainMap := getcloudBrainCenterCodeAndCardTypeInfo(ciTasks, beginTime, endTime) | |||||
resourceQueues, err := models.GetCanUseCardInfo() | resourceQueues, err := models.GetCanUseCardInfo() | ||||
if err != nil { | if err != nil { | ||||
@@ -110,7 +96,7 @@ func summaryDurationStat(statisticTime time.Time) int64 { | |||||
cardsTotalDurationMap[cloudbrainTable.Cluster+"/"+centerCode+"/"+cardType] = 0 | cardsTotalDurationMap[cloudbrainTable.Cluster+"/"+centerCode+"/"+cardType] = 0 | ||||
} | } | ||||
cloudbrainDurationStat := models.CloudbrainDurationStatistic{ | cloudbrainDurationStat := models.CloudbrainDurationStatistic{ | ||||
DateTime: dateTime, | |||||
DateTimeUnix: dateTimeUnix, | |||||
DayTime: dayTime, | DayTime: dayTime, | ||||
HourTime: hourTime, | HourTime: hourTime, | ||||
Cluster: cloudbrainTable.Cluster, | Cluster: cloudbrainTable.Cluster, | ||||
@@ -132,7 +118,7 @@ func summaryDurationStat(statisticTime time.Time) int64 { | |||||
for key, cardsTotalDuration := range cardsTotalDurationMap { | for key, cardsTotalDuration := range cardsTotalDurationMap { | ||||
cloudbrainDurationStat := models.CloudbrainDurationStatistic{ | cloudbrainDurationStat := models.CloudbrainDurationStatistic{ | ||||
DateTime: dateTime, | |||||
DateTimeUnix: dateTimeUnix, | |||||
DayTime: dayTime, | DayTime: dayTime, | ||||
HourTime: hourTime, | HourTime: hourTime, | ||||
Cluster: strings.Split(key, "/")[0], | Cluster: strings.Split(key, "/")[0], | ||||
@@ -169,11 +155,27 @@ func GetAiCenterNameByCode(centerCode string, language string) string { | |||||
return aiCenterName | return aiCenterName | ||||
} | } | ||||
func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, beginTime int64, endTime int64) map[string]map[string]int { | |||||
func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, beginTime int64, endTime int64) (map[string]map[string]int, map[string]*models.Cloudbrain) { | |||||
var WorkServerNumber int | var WorkServerNumber int | ||||
var AccCardsNum int | var AccCardsNum int | ||||
cloudbrainMap := make(map[string]*models.Cloudbrain) | |||||
cloudBrainCenterCodeAndCardType := make(map[string]map[string]int) | cloudBrainCenterCodeAndCardType := make(map[string]map[string]int) | ||||
for _, cloudbrain := range ciTasks { | for _, cloudbrain := range ciTasks { | ||||
if cloudbrain.Cloudbrain.StartTime == 0 { | |||||
cloudbrain.Cloudbrain.StartTime = cloudbrain.Cloudbrain.CreatedUnix | |||||
} | |||||
if cloudbrain.Cloudbrain.EndTime == 0 { | |||||
cloudbrain.Cloudbrain.EndTime = timeutil.TimeStamp(time.Now().Unix()) | |||||
} | |||||
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | |||||
if cloudbrain.Cloudbrain.Spec != nil { | |||||
if _, ok := cloudbrainMap[cloudbrain.Cloudbrain.AiCenter+"/"+cloudbrain.Cloudbrain.Spec.AccCardType]; !ok { | |||||
if cloudbrain.Cloudbrain.Spec != nil { | |||||
cloudbrainMap[cloudbrain.Cloudbrain.AiCenter+"/"+cloudbrain.Cloudbrain.Spec.AccCardType] = &cloudbrain.Cloudbrain | |||||
} | |||||
} | |||||
} | |||||
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | ||||
if cloudbrain.Cloudbrain.StartTime == 0 { | if cloudbrain.Cloudbrain.StartTime == 0 { | ||||
cloudbrain.Cloudbrain.StartTime = cloudbrain.Cloudbrain.CreatedUnix | cloudbrain.Cloudbrain.StartTime = cloudbrain.Cloudbrain.CreatedUnix | ||||
@@ -195,7 +197,7 @@ func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, be | |||||
cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter] = make(map[string]int) | cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter] = make(map[string]int) | ||||
} | } | ||||
if cloudbrain.Cloudbrain.Spec != nil { | if cloudbrain.Cloudbrain.Spec != nil { | ||||
if cloudbrain.Cloudbrain.Status == string(models.ModelArtsRunning) { | |||||
if cloudbrain.Cloudbrain.Status == string(models.ModelArtsRunning) && cloudbrain.Cloudbrain.DeletedAt.IsZero() { | |||||
if _, ok := cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter][cloudbrain.Cloudbrain.Spec.AccCardType]; !ok { | if _, ok := cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter][cloudbrain.Cloudbrain.Spec.AccCardType]; !ok { | ||||
if int64(cloudbrain.Cloudbrain.StartTime) < beginTime { | if int64(cloudbrain.Cloudbrain.StartTime) < beginTime { | ||||
cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(endTime) - int(beginTime)) | cloudBrainCenterCodeAndCardType[cloudbrain.Cloudbrain.AiCenter][cloudbrain.Cloudbrain.Spec.AccCardType] = AccCardsNum * WorkServerNumber * (int(endTime) - int(beginTime)) | ||||
@@ -239,7 +241,7 @@ func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, be | |||||
} | } | ||||
} | } | ||||
return cloudBrainCenterCodeAndCardType | |||||
return cloudBrainCenterCodeAndCardType, cloudbrainMap | |||||
} | } | ||||
func CloudbrainUpdateHistoryData(ctx *context.Context) { | func CloudbrainUpdateHistoryData(ctx *context.Context) { | ||||
@@ -257,7 +259,7 @@ func CloudbrainUpdateHistoryData(ctx *context.Context) { | |||||
endTimeUnix := timeutil.TimeStamp(endTime.Unix()) | endTimeUnix := timeutil.TimeStamp(endTime.Unix()) | ||||
err = models.DeleteCloudbrainDurationStatistic(beginTimeUnix, endTimeUnix) | err = models.DeleteCloudbrainDurationStatistic(beginTimeUnix, endTimeUnix) | ||||
count = UpdateDurationStatisticHistoryData(beginTime.Add(+1*time.Hour), endTime) | |||||
count = UpdateDurationStatisticHistoryData(beginTime.Add(+1*time.Hour), endTime.Add(+1*time.Hour)) | |||||
} | } | ||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"message": 0, | "message": 0, | ||||
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》