Browse Source

update

tags/v1.22.11.1^2
liuzx 3 years ago
parent
commit
9d1ceabf9c
3 changed files with 161 additions and 14 deletions
  1. +17
    -6
      models/cloudbrain_static.go
  2. +2
    -2
      modules/cron/tasks_basic.go
  3. +142
    -6
      routers/api/v1/repo/cloudbrain_dashboard.go

+ 17
- 6
models/cloudbrain_static.go View File

@@ -63,11 +63,23 @@ type DurationStatisticOptions struct {
EndTime time.Time EndTime time.Time
AiCenterCode string AiCenterCode string
} }

type DurationRateStatistic struct {
AiCenterTotalDurationStat map[string]int `json:"aiCenterTotalDurationStat"`
AiCenterUsageDurationStat map[string]int `json:"aiCenterUsageDurationStat"`
TotalUsageRate float64 `json:"totalUsageRate"`
}
type DateCloudbrainStatistic struct { type DateCloudbrainStatistic struct {
Date string `json:"date"`
AiCenterUsageDuration map[string]int `json:"aiCenterUsageDuration"`
AiCenterTotalDuration map[string]int `json:"aiCenterTotalDuration"`
AiCenterUsageRate map[string]int `json:"aiCenterUsageRate"`
Date string `json:"date"`
AiCenterUsageDuration map[string]int `json:"aiCenterUsageDuration"`
AiCenterTotalDuration map[string]int `json:"aiCenterTotalDuration"`
AiCenterUsageRate map[string]float64 `json:"aiCenterUsageRate"`
}

type HourTimeStatistic struct {
HourTimeUsageDuration map[int]int `json:"hourTimeUsageDuration"`
HourTimeTotalDuration map[int]int `json:"hourTimeTotalDuration"`
HourTimeUsageRate map[int]float64 `json:"hourTimeUsageRate"`
} }


func GetTodayCreatorCount(beginTime time.Time, endTime time.Time) (int64, error) { func GetTodayCreatorCount(beginTime time.Time, endTime time.Time) (int64, error) {
@@ -345,8 +357,7 @@ func GetDurationRecordBeginTime() ([]*CloudbrainDurationStatistic, error) {
defer sess.Close() defer sess.Close()
sess.OrderBy("cloudbrain_duration_statistic.id ASC limit 1") sess.OrderBy("cloudbrain_duration_statistic.id ASC limit 1")
CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0) CloudbrainDurationStatistics := make([]*CloudbrainDurationStatistic, 0)
if err := sess.Table(&CloudbrainDurationStatistic{}).Unscoped().
Find(&CloudbrainDurationStatistics); err != nil {
if err := sess.Table(&CloudbrainDurationStatistic{}).Find(&CloudbrainDurationStatistics); err != nil {
log.Info("find error.") log.Info("find error.")
} }
return CloudbrainDurationStatistics, nil return CloudbrainDurationStatistics, nil


+ 2
- 2
modules/cron/tasks_basic.go View File

@@ -259,7 +259,7 @@ func registerHandleCloudbrainDurationStatistic() {
RegisterTaskFatal("handle_cloudbrain_duration_statistic", &BaseConfig{ RegisterTaskFatal("handle_cloudbrain_duration_statistic", &BaseConfig{
Enabled: true, Enabled: true,
RunAtStart: false, RunAtStart: false,
Schedule: "@every 60m",
Schedule: "55 59 * * * ?",
}, func(ctx context.Context, _ *models.User, _ Config) error { }, func(ctx context.Context, _ *models.User, _ Config) error {
repo.CloudbrainDurationStatisticHour() repo.CloudbrainDurationStatisticHour()
return nil return nil
@@ -283,7 +283,6 @@ func initBasicTasks() {


registerHandleRepoAndUserStatistic() registerHandleRepoAndUserStatistic()
registerHandleSummaryStatistic() registerHandleSummaryStatistic()
registerHandleCloudbrainDurationStatistic()


registerSyncCloudbrainStatus() registerSyncCloudbrainStatus()
registerHandleOrgStatistic() registerHandleOrgStatistic()
@@ -292,4 +291,5 @@ func initBasicTasks() {


//registerRewardPeriodTask() //registerRewardPeriodTask()
registerCloudbrainPointDeductTask() registerCloudbrainPointDeductTask()
registerHandleCloudbrainDurationStatistic()
} }

+ 142
- 6
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -1487,13 +1487,15 @@ func GetCloudbrainResourceUsage(ctx *context.Context) {
func GetCloudbrainResourceUsageDetail(ctx *context.Context) { func GetCloudbrainResourceUsageDetail(ctx *context.Context) {
queryType := ctx.QueryTrim("type") queryType := ctx.QueryTrim("type")
now := time.Now() now := time.Now()

beginTimeStr := ctx.QueryTrim("beginTime") beginTimeStr := ctx.QueryTrim("beginTime")
endTimeStr := ctx.QueryTrim("endTime") endTimeStr := ctx.QueryTrim("endTime")
aiCenterCode := ctx.QueryTrim("aiCenterCode")

var beginTime time.Time var beginTime time.Time
var endTime time.Time var endTime time.Time
var endTimeTemp time.Time var endTimeTemp time.Time
dayCloudbrainDuration := make([]models.DateCloudbrainStatistic, 0) dayCloudbrainDuration := make([]models.DateCloudbrainStatistic, 0)
hourCloudbrainDuration := models.HourTimeStatistic{}
var err error var err error
var count int var count int
if queryType != "" { if queryType != "" {
@@ -1505,14 +1507,22 @@ func GetCloudbrainResourceUsageDetail(ctx *context.Context) {
return return
} }
brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime() brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime()
log.Info("recordCloudbrainDuration:", recordCloudbrainDuration)
log.Info("brainRecordBeginTime:", brainRecordBeginTime)
beginTime = brainRecordBeginTime beginTime = brainRecordBeginTime
endTime = now endTime = now
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime)
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime, aiCenterCode)
if err != nil { if err != nil {
log.Error("Can not query dayCloudbrainDuration.", err) log.Error("Can not query dayCloudbrainDuration.", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
return return
} }
hourCloudbrainDuration = getHourCloudbrainDuration(beginTime, endTime, aiCenterCode)
if err != nil {
log.Error("Can not query hourCloudbrainDuration.", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
return
}
} else if queryType == "today" { } else if queryType == "today" {
beginTime = now.AddDate(0, 0, 0) beginTime = now.AddDate(0, 0, 0)
beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location())
@@ -1644,19 +1654,21 @@ func GetCloudbrainResourceUsageDetail(ctx *context.Context) {
pagesize = 5 pagesize = 5
} }
pageDateCloudbrainDuration := getPageDateCloudbrainDuration(dayCloudbrainDuration, page, pagesize) pageDateCloudbrainDuration := getPageDateCloudbrainDuration(dayCloudbrainDuration, page, pagesize)
durationRateStatistic := getDurationStatistic(beginTime, endTime)


ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"totalCount": count, "totalCount": count,
"pageDateCloudbrainDuration": pageDateCloudbrainDuration, "pageDateCloudbrainDuration": pageDateCloudbrainDuration,
"durationRateStatistic": durationRateStatistic,
"hourCloudbrainDuration": hourCloudbrainDuration,
}) })


} }


func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrainStatistics []*models.CloudbrainDurationStatistic) (map[string]int, map[string]int, map[string]int) {

func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrainStatistics []*models.CloudbrainDurationStatistic) (map[string]int, map[string]int, map[string]float64) {
aiCenterTotalDuration := make(map[string]int) aiCenterTotalDuration := make(map[string]int)
aiCenterUsageDuration := make(map[string]int) aiCenterUsageDuration := make(map[string]int)
aiCenterUsageRate := make(map[string]int)
aiCenterUsageRate := make(map[string]float64)
for _, cloudbrainStatistic := range cloudbrainStatistics { for _, cloudbrainStatistic := range cloudbrainStatistics {
if int64(cloudbrainStatistic.CreatedUnix) >= beginTime.Unix() && int64(cloudbrainStatistic.CreatedUnix) < endTime.Unix() { if int64(cloudbrainStatistic.CreatedUnix) >= beginTime.Unix() && int64(cloudbrainStatistic.CreatedUnix) < endTime.Unix() {
if cloudbrainStatistic.TotalCanUse { if cloudbrainStatistic.TotalCanUse {
@@ -1674,10 +1686,21 @@ func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrain
} }
} }
} }
ResourceAiCenterRes, err := models.GetResourceAiCenters()
if err != nil {
log.Error("Can not get ResourceAiCenterRes.", err)
return nil, nil, nil
}
for _, v := range ResourceAiCenterRes {
if _, ok := aiCenterUsageDuration[v.AiCenterCode]; !ok {
aiCenterUsageDuration[v.AiCenterCode] = 0
}
}

for k, v := range aiCenterTotalDuration { for k, v := range aiCenterTotalDuration {
for i, j := range aiCenterUsageDuration { for i, j := range aiCenterUsageDuration {
if k == i { if k == i {
aiCenterUsageRate[k] = j / v
aiCenterUsageRate[k] = float64(j) / float64(v)
} }
} }
} }
@@ -1685,6 +1708,61 @@ func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrain
return aiCenterUsageDuration, aiCenterTotalDuration, aiCenterUsageRate return aiCenterUsageDuration, aiCenterTotalDuration, aiCenterUsageRate
} }


func getDurationStatistic(beginTime time.Time, endTime time.Time) models.DurationRateStatistic {
aiCenterTotalDurationStat := make(map[string]int)
aiCenterUsageDurationStat := make(map[string]int)
durationRateStatistic := models.DurationRateStatistic{}
cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{
BeginTime: beginTime,
EndTime: endTime,
})
if err != nil {
log.Error("GetCardDurationStatistics error:", err)
return durationRateStatistic
}
for _, cloudbrainStatistic := range cardDurationStatistics {
if cloudbrainStatistic.TotalCanUse {
if _, ok := aiCenterTotalDurationStat[cloudbrainStatistic.AiCenterCode]; !ok {
aiCenterTotalDurationStat[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration
} else {
aiCenterTotalDurationStat[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration
}
} else {
if _, ok := aiCenterUsageDurationStat[cloudbrainStatistic.AiCenterCode]; !ok {
aiCenterUsageDurationStat[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration
} else {
aiCenterUsageDurationStat[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration
}
}
}
ResourceAiCenterRes, err := models.GetResourceAiCenters()
if err != nil {
log.Error("Can not get ResourceAiCenterRes.", err)
return durationRateStatistic
}
for _, v := range ResourceAiCenterRes {
if _, ok := aiCenterUsageDurationStat[v.AiCenterCode]; !ok {
aiCenterUsageDurationStat[v.AiCenterCode] = 0
}
}
totalCanUse := float64(0)
totalUse := float64(0)
for k, v := range aiCenterTotalDurationStat {
for i, j := range aiCenterUsageDurationStat {
if k == i {
totalUse += float64(j)
totalCanUse += float64(v)
}
}
}
totalUsageRate := totalUse / totalCanUse

durationRateStatistic.AiCenterTotalDurationStat = aiCenterTotalDurationStat
durationRateStatistic.AiCenterUsageDurationStat = aiCenterUsageDurationStat
durationRateStatistic.TotalUsageRate = totalUsageRate
return durationRateStatistic
}

func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.DateCloudbrainStatistic, int, error) { func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.DateCloudbrainStatistic, int, error) {
now := time.Now() now := time.Now()
endTimeTemp := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location()) endTimeTemp := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location())
@@ -1699,6 +1777,7 @@ func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.
log.Error("GetCardDurationStatistics error:", err) log.Error("GetCardDurationStatistics error:", err)
return nil, 0, err return nil, 0, err
} }

dayCloudbrainInfo := make([]models.DateCloudbrainStatistic, 0) dayCloudbrainInfo := make([]models.DateCloudbrainStatistic, 0)
count := 0 count := 0
for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) { for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) {
@@ -1711,7 +1790,64 @@ func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.
}) })
endTime = endTimeTemp endTime = endTimeTemp
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
if endTimeTemp.Before(beginTime) && beginTime.Before(endTime) {
endTimeTemp = beginTime
}
count += 1 count += 1
} }
return dayCloudbrainInfo, count, nil return dayCloudbrainInfo, count, nil
} }

func getHourCloudbrainDuration(beginTime time.Time, endTime time.Time, aiCenterCode string) models.HourTimeStatistic {
hourTimeTotalDuration := make(map[int]int)
hourTimeUsageDuration := make(map[int]int)
hourTimeUsageRate := make(map[int]float64)
hourTimeStatistic := models.HourTimeStatistic{}

cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{
BeginTime: beginTime,
EndTime: endTime,
})
if err != nil {
log.Error("GetCardDurationStatistics error:", err)
return hourTimeStatistic
}
for _, cloudbrainStatistic := range cardDurationStatistics {
if cloudbrainStatistic.AiCenterCode == aiCenterCode {
if cloudbrainStatistic.TotalCanUse {
if _, ok := hourTimeTotalDuration[cloudbrainStatistic.HourTime]; !ok {
hourTimeTotalDuration[cloudbrainStatistic.HourTime] = cloudbrainStatistic.CardsTotalDuration
} else {
hourTimeTotalDuration[cloudbrainStatistic.HourTime] += cloudbrainStatistic.CardsTotalDuration
}
} else {
if _, ok := hourTimeUsageDuration[cloudbrainStatistic.HourTime]; !ok {
hourTimeUsageDuration[cloudbrainStatistic.HourTime] = cloudbrainStatistic.CardsTotalDuration
} else {
hourTimeUsageDuration[cloudbrainStatistic.HourTime] += cloudbrainStatistic.CardsTotalDuration
}
}
hourTimeList := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}
for _, v := range hourTimeList {
if _, ok := hourTimeUsageDuration[v]; !ok {
hourTimeUsageDuration[v] = 0
}
if _, ok := hourTimeTotalDuration[v]; !ok {
hourTimeTotalDuration[v] = 0
}
}

for k, v := range hourTimeTotalDuration {
for i, j := range hourTimeUsageDuration {
if k == i {
hourTimeUsageRate[k] = float64(j) / float64(v)
}
}
}
}
}
hourTimeStatistic.HourTimeTotalDuration = hourTimeTotalDuration
hourTimeStatistic.HourTimeUsageDuration = hourTimeUsageDuration
hourTimeStatistic.HourTimeUsageRate = hourTimeUsageRate
return hourTimeStatistic
}

Loading…
Cancel
Save