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