Browse Source

Merge branch 'fix-2775-v1' of openi.pcl.ac.cn:OpenI/aiforge into fix-2775-v1

tags/v1.22.11.3^2
zhoupzh 3 years ago
parent
commit
de94d679d7
7 changed files with 207 additions and 136 deletions
  1. +55
    -0
      models/cloudbrain.go
  2. +34
    -16
      models/cloudbrain_static.go
  3. +5
    -0
      modules/setting/setting.go
  4. +60
    -68
      routers/api/v1/repo/cloudbrain_dashboard.go
  5. +51
    -50
      routers/repo/cloudbrain_statistic.go
  6. +1
    -1
      routers/user/auth.go
  7. +1
    -1
      templates/user/auth/activate.tmpl

+ 55
- 0
models/cloudbrain.go View File

@@ -2344,6 +2344,61 @@ func CloudbrainAllStatic(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, er
return cloudbrains, count, nil return cloudbrains, count, nil
} }


func CloudbrainAllKanBan(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) {
sess := x.NewSession()
defer sess.Close()

var cond = builder.NewCond()

if (opts.Type) >= 0 {
cond = cond.And(
builder.Eq{"cloudbrain.type": opts.Type},
)
}
if opts.BeginTimeUnix > 0 && opts.EndTimeUnix > 0 {
cond = cond.And(
builder.And(builder.Gte{"cloudbrain.created_unix": opts.BeginTimeUnix}, builder.Lte{"cloudbrain.created_unix": opts.EndTimeUnix}),
)
}
var count int64
var err error
count, err = sess.Unscoped().Where(cond).Count(new(Cloudbrain))

if err != nil {
return nil, 0, fmt.Errorf("Count: %v", err)
}

if opts.Page >= 0 && opts.PageSize > 0 {
var start int
if opts.Page == 0 {
start = 0
} else {
start = (opts.Page - 1) * opts.PageSize
}
sess.Limit(opts.PageSize, start)
}
// sess.OrderBy("cloudbrain.created_unix DESC")
cloudbrains := make([]*CloudbrainInfo, 0, setting.UI.IssuePagingNum)
if err := sess.Cols("id", "type", "work_server_number", "duration", "train_job_duration", "ai_center", "cluster").Table(&Cloudbrain{}).Unscoped().Where(cond).
Find(&cloudbrains); err != nil {
return nil, 0, fmt.Errorf("Find: %v", err)
}
if opts.NeedRepoInfo {
var ids []int64
for _, task := range cloudbrains {
ids = append(ids, task.RepoID)
}
repositoryMap, err := GetRepositoriesMapByIDs(ids)
if err == nil {
for _, task := range cloudbrains {
task.Repo = repositoryMap[task.RepoID]
}
}

}
return cloudbrains, count, nil
}

func GetStartedCloudbrainTaskByUpdatedUnix(startTime, endTime time.Time) ([]Cloudbrain, error) { func GetStartedCloudbrainTaskByUpdatedUnix(startTime, endTime time.Time) ([]Cloudbrain, error) {
r := make([]Cloudbrain, 0) r := make([]Cloudbrain, 0)
err := x.Where("updated_unix >= ? and updated_unix <= ? and start_time > 0", startTime.Unix(), endTime.Unix()).Unscoped().Find(&r) err := x.Where("updated_unix >= ? and updated_unix <= ? and start_time > 0", startTime.Unix(), endTime.Unix()).Unscoped().Find(&r)


+ 34
- 16
models/cloudbrain_static.go View File

@@ -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


+ 5
- 0
modules/setting/setting.go View File

@@ -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()


+ 60
- 68
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -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"
@@ -58,42 +59,30 @@ func GetAllCloudbrainsOverview(ctx *context.Context) {
return return
} }
cloudbrainTypeCount, err := models.GetCloudbrainTypeCount() cloudbrainTypeCount, err := models.GetCloudbrainTypeCount()
log.Info("cloudbrainTypeCount:", cloudbrainTypeCount)
if err != nil { if err != nil {
log.Error("Can not query cloudbrainTypeCount.", err) log.Error("Can not query cloudbrainTypeCount.", err)
return return
} }


cloudbrainTpyeDurationSum, err := models.GetCloudbrainTpyeDurationSum()
log.Info("cloudbrainTpyeDurationSum:", cloudbrainTpyeDurationSum)
if err != nil {
log.Error("Can not query cloudbrainTpyeDurationSum.", err)
return
}

todayCloudbrainCount, err := models.GetTodayCloudbrainCount(beginTime, endTime) todayCloudbrainCount, err := models.GetTodayCloudbrainCount(beginTime, endTime)
log.Info("todayCloudbrainCount:", todayCloudbrainCount)
if err != nil { if err != nil {
log.Error("Can not query todayCloudbrainCount.", err) log.Error("Can not query todayCloudbrainCount.", err)
return return
} }


todayRunningCount, err := models.GetTodayRunningCount(beginTime, endTime) todayRunningCount, err := models.GetTodayRunningCount(beginTime, endTime)
log.Info("todayRunningCount:", todayRunningCount)
if err != nil { if err != nil {
log.Error("Can not query todayRunningCount.", err) log.Error("Can not query todayRunningCount.", err)
return return
} }


todayWaitingCount, err := models.GetTodayWaitingCount(beginTime, endTime) todayWaitingCount, err := models.GetTodayWaitingCount(beginTime, endTime)
log.Info("todayWaittingCount:", todayWaitingCount)
if err != nil { if err != nil {
log.Error("Can not query todayWaitingCount.", err) log.Error("Can not query todayWaitingCount.", err)
return return
} }


todayCompletedCount := todayCloudbrainCount - todayRunningCount - todayWaitingCount todayCompletedCount := todayCloudbrainCount - todayRunningCount - todayWaitingCount
log.Info("todayCompletedCount:", todayCompletedCount)


creatorCount, err := models.GetCreatorCount() creatorCount, err := models.GetCreatorCount()
if err != nil { if err != nil {
@@ -139,60 +128,48 @@ func GetOverviewDuration(ctx *context.Context) {
c2NetDuration := int64(0) c2NetDuration := int64(0)
cDCenterDuration := int64(0) cDCenterDuration := int64(0)


page := 1
pagesize := 10000
count := pagesize
// Each time a maximum of 10000 pieces of data are detected to the memory, batch processing
for count == pagesize && count != 0 {
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{
Page: page,
PageSize: pagesize,
},
Type: models.TypeCloudBrainAll,
BeginTimeUnix: int64(recordBeginTime),
EndTimeUnix: endTime.Unix(),
})
if err != nil {
ctx.ServerError("Get cloudbrains failed:", err)
return
}
models.LoadSpecs4CloudbrainInfo(cloudbrains)

for _, cloudbrain := range cloudbrains {
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain)
if cloudbrain.Cloudbrain.Spec != nil {
cardNum = int64(cloudbrain.Cloudbrain.Spec.AccCardsNum)
} else {
cardNum = 1
}
if cloudbrain.Cloudbrain.WorkServerNumber >= 1 {
workServerNumber = int64(cloudbrain.Cloudbrain.WorkServerNumber)
} else {
workServerNumber = 1
}
duration := models.ConvertStrToDuration(cloudbrain.TrainJobDuration)
CardDuration := workServerNumber * int64(cardNum) * duration

if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne {
cloudBrainOneDuration += duration
cloudBrainOneCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo {
cloudBrainTwoDuration += duration
cloudBrainTwoCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeC2Net {
c2NetDuration += duration
c2NetCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeCDCenter {
cDCenterDuration += duration
cDNetCardDuSum += CardDuration
}
cloudbrains, _, err := models.CloudbrainAllKanBan(&models.CloudbrainsOptions{
Type: models.TypeCloudBrainAll,
BeginTimeUnix: int64(recordBeginTime),
EndTimeUnix: endTime.Unix(),
})
if err != nil {
ctx.ServerError("Get cloudbrains failed:", err)
return
}
models.LoadSpecs4CloudbrainInfo(cloudbrains)


durationAllSum += duration
cardDuSum += CardDuration
for _, cloudbrain := range cloudbrains {
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain)
if cloudbrain.Cloudbrain.Spec != nil {
cardNum = int64(cloudbrain.Cloudbrain.Spec.AccCardsNum)
} else {
cardNum = 1
} }
count = len(cloudbrains)
page += 1
if cloudbrain.Cloudbrain.WorkServerNumber >= 1 {
workServerNumber = int64(cloudbrain.Cloudbrain.WorkServerNumber)
} else {
workServerNumber = 1
}
duration := models.ConvertStrToDuration(cloudbrain.TrainJobDuration)
CardDuration := workServerNumber * int64(cardNum) * duration

if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne {
cloudBrainOneDuration += duration
cloudBrainOneCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo {
cloudBrainTwoDuration += duration
cloudBrainTwoCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeC2Net {
c2NetDuration += duration
c2NetCardDuSum += CardDuration
} else if cloudbrain.Cloudbrain.Type == models.TypeCDCenter {
cDCenterDuration += duration
cDNetCardDuSum += CardDuration
}

durationAllSum += duration
cardDuSum += CardDuration
} }
ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"cloudBrainOneCardDuSum": cloudBrainOneCardDuSum, "cloudBrainOneCardDuSum": cloudBrainOneCardDuSum,
@@ -1488,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 {
@@ -1620,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
@@ -1632,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" {
@@ -1674,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 {
@@ -1705,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
} }


+ 51
- 50
routers/repo/cloudbrain_statistic.go View File

@@ -1,6 +1,7 @@
package repo package repo


import ( import (
"fmt"
"net/http" "net/http"
"strings" "strings"
"time" "time"
@@ -8,37 +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
}
deleteBeginTime := time.Unix(int64(recordDurationUpdateTime[0].DateTime), 0)
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(deleteBeginTime.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
@@ -55,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()
@@ -66,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 {
@@ -111,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,
@@ -133,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],
@@ -170,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
@@ -196,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))
@@ -240,7 +241,7 @@ func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, be
} }
} }


return cloudBrainCenterCodeAndCardType
return cloudBrainCenterCodeAndCardType, cloudbrainMap
} }


func CloudbrainUpdateHistoryData(ctx *context.Context) { func CloudbrainUpdateHistoryData(ctx *context.Context) {
@@ -258,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,


+ 1
- 1
routers/user/auth.go View File

@@ -1435,7 +1435,7 @@ func UpdateEmailPost(ctx *context.Context, form auth.UpdateEmailForm) {
ctx.ServerError("UpdateEmailAddress failed", err) ctx.ServerError("UpdateEmailAddress failed", err)
return return
} }
ctx.Data["Email"] = newEmailAddress
ctx.Data["SignedUser.Email"] = newEmailAddress
ctx.User.Email = newEmailAddress ctx.User.Email = newEmailAddress
Activate(ctx) Activate(ctx)




+ 1
- 1
templates/user/auth/activate.tmpl View File

@@ -15,7 +15,7 @@
{{else if .ResendLimited}} {{else if .ResendLimited}}
<p class="center">{{.i18n.Tr "auth.resent_limit_prompt"}}</p> <p class="center">{{.i18n.Tr "auth.resent_limit_prompt"}}</p>
{{else}} {{else}}
<p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .Email .ActiveCodeLives | Str2html}}</p>
<p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .SignedUser.Email .ActiveCodeLives | Str2html}}</p>
{{end}} {{end}}
{{else}} {{else}}
{{if .IsSendRegisterMail}} {{if .IsSendRegisterMail}}


Loading…
Cancel
Save