|
|
|
@@ -532,6 +532,21 @@ func getPageDateCloudbrainInfo(dateCloudbrainInfo []DateCloudbrainInfo, page int |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func getPageDateCloudbrainDuration(dateCloudbrainDuration []models.DateCloudbrainStatistic, page int, pagesize int) []models.DateCloudbrainStatistic { |
|
|
|
begin := (page - 1) * pagesize |
|
|
|
end := (page) * pagesize |
|
|
|
|
|
|
|
if begin > len(dateCloudbrainDuration)-1 { |
|
|
|
return nil |
|
|
|
} |
|
|
|
if end > len(dateCloudbrainDuration)-1 { |
|
|
|
return dateCloudbrainDuration[begin:] |
|
|
|
} else { |
|
|
|
return dateCloudbrainDuration[begin:end] |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) { |
|
|
|
queryType := ctx.QueryTrim("type") |
|
|
|
beginTimeStr := ctx.QueryTrim("beginTime") |
|
|
|
@@ -1426,59 +1441,277 @@ func GetCloudbrainResourceUsage(ctx *context.Context) { |
|
|
|
} |
|
|
|
cardUsageRes := make(map[string]int) |
|
|
|
cardCanUsageRes := make(map[string]int) |
|
|
|
cardUseInfo, err := models.GetCardDurationStatistics(beginTime, endTime, true, false) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetCardDurationStatistics error:", err) |
|
|
|
return |
|
|
|
} |
|
|
|
cardCanUseInfo, err := models.GetCardDurationStatistics(beginTime, endTime, false, true) |
|
|
|
cardUtilizationRate := make(map[string]int) |
|
|
|
// cardDurationStatistics, err := models.GetCardDurationStatistics(beginTime, endTime) |
|
|
|
cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{ |
|
|
|
BeginTime: beginTime, |
|
|
|
EndTime: endTime, |
|
|
|
}) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetCardDurationStatistics error:", err) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
for _, cloudbrainStat := range cardUseInfo { |
|
|
|
if _, ok := cardUsageRes[cloudbrainStat.AiCenterCode]; !ok { |
|
|
|
cardUsageRes[cloudbrainStat.AiCenterCode] = cloudbrainStat.CardsTotalDuration |
|
|
|
for _, cloudbrainStat := range cardDurationStatistics { |
|
|
|
if cloudbrainStat.TotalCanUse { |
|
|
|
if _, ok := cardCanUsageRes[cloudbrainStat.AiCenterCode]; !ok { |
|
|
|
cardCanUsageRes[cloudbrainStat.AiCenterCode] = cloudbrainStat.CardsTotalDuration |
|
|
|
} else { |
|
|
|
cardCanUsageRes[cloudbrainStat.AiCenterCode] += cloudbrainStat.CardsTotalDuration |
|
|
|
} |
|
|
|
} else { |
|
|
|
cardUsageRes[cloudbrainStat.AiCenterCode] += cloudbrainStat.CardsTotalDuration |
|
|
|
if _, ok := cardUsageRes[cloudbrainStat.AiCenterCode]; !ok { |
|
|
|
cardUsageRes[cloudbrainStat.AiCenterCode] = cloudbrainStat.CardsTotalDuration |
|
|
|
} else { |
|
|
|
cardUsageRes[cloudbrainStat.AiCenterCode] += cloudbrainStat.CardsTotalDuration |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for _, cloudbrainStat := range cardCanUseInfo { |
|
|
|
if _, ok := cardCanUsageRes[cloudbrainStat.AiCenterCode]; !ok { |
|
|
|
cardCanUsageRes[cloudbrainStat.AiCenterCode] = cloudbrainStat.CardsTotalDuration |
|
|
|
} else { |
|
|
|
cardCanUsageRes[cloudbrainStat.AiCenterCode] += cloudbrainStat.CardsTotalDuration |
|
|
|
for k, v := range cardCanUsageRes { |
|
|
|
for j, i := range cardUsageRes { |
|
|
|
if k == j { |
|
|
|
cardUtilizationRate[k] = i / v |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ctx.JSON(http.StatusOK, map[string]interface{}{ |
|
|
|
"cardUseInfo": cardUseInfo, |
|
|
|
"cardCanUseInfo": cardCanUseInfo, |
|
|
|
"cardUsageRes": cardUsageRes, |
|
|
|
"cardCanUsageRes": cardCanUsageRes, |
|
|
|
"cardDurationStatistics": cardDurationStatistics, |
|
|
|
"cardUsageRes": cardUsageRes, |
|
|
|
"cardCanUsageRes": cardCanUsageRes, |
|
|
|
"cardUtilizationRate": cardUtilizationRate, |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func GetCloudbrainResourceUsageDetail(ctx *context.Context) { |
|
|
|
recordBeginTime := time.Now().AddDate(0, 0, -6) |
|
|
|
beginTime, endTime, err := getCloudbrainTimePeroid(ctx, recordBeginTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("getCloudbrainTimePeroid error:", err) |
|
|
|
return |
|
|
|
queryType := ctx.QueryTrim("type") |
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
beginTimeStr := ctx.QueryTrim("beginTime") |
|
|
|
endTimeStr := ctx.QueryTrim("endTime") |
|
|
|
var beginTime time.Time |
|
|
|
var endTime time.Time |
|
|
|
var endTimeTemp time.Time |
|
|
|
dayCloudbrainDuration := make([]models.DateCloudbrainStatistic, 0) |
|
|
|
var err error |
|
|
|
var count int |
|
|
|
if queryType != "" { |
|
|
|
if queryType == "all" { |
|
|
|
recordCloudbrainDuration, err := models.GetDurationRecordBeginTime() |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not get GetDurationRecordBeginTime", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) |
|
|
|
return |
|
|
|
} |
|
|
|
brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime() |
|
|
|
beginTime = brainRecordBeginTime |
|
|
|
endTime = now |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
} else if queryType == "today" { |
|
|
|
beginTime = now.AddDate(0, 0, 0) |
|
|
|
beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
endTime = now |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} else if queryType == "yesterday" { |
|
|
|
beginTime = now.AddDate(0, 0, -1) |
|
|
|
beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} else if queryType == "last_7day" { |
|
|
|
beginTime = now.AddDate(0, 0, -6) |
|
|
|
beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
endTime = now |
|
|
|
endTimeTemp = time.Date(endTimeTemp.Year(), endTimeTemp.Month(), endTimeTemp.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
} else if queryType == "last_30day" { |
|
|
|
beginTime = now.AddDate(0, 0, -29) |
|
|
|
beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
endTime = now |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
} else if queryType == "current_month" { |
|
|
|
endTime = now |
|
|
|
beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location()) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} else if queryType == "current_year" { |
|
|
|
endTime = now |
|
|
|
beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location()) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} else if queryType == "last_month" { |
|
|
|
|
|
|
|
lastMonthTime := now.AddDate(0, -1, 0) |
|
|
|
beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location()) |
|
|
|
endTime = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
if beginTimeStr == "" || endTimeStr == "" { |
|
|
|
//如果查询类型和开始时间结束时间都未设置,按queryType=all处理 |
|
|
|
recordCloudbrainDuration, err := models.GetDurationRecordBeginTime() |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not get recordCloudbrain", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) |
|
|
|
return |
|
|
|
} |
|
|
|
brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime() |
|
|
|
beginTime = brainRecordBeginTime |
|
|
|
endTime = now |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
} else { |
|
|
|
beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not ParseInLocation.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not ParseInLocation.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
if endTime.After(time.Now()) { |
|
|
|
endTime = time.Now() |
|
|
|
} |
|
|
|
endTimeTemp = beginTime.AddDate(0, 0, 1) |
|
|
|
dayCloudbrainDuration, count, err = getDayCloudbrainDuration(beginTime, endTime) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query dayCloudbrainDuration.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
totalUse := true |
|
|
|
totalCanUse := false |
|
|
|
cardDurationStatisticsInfo, err := models.GetCardDurationStatistics(beginTime, endTime, totalUse, totalCanUse) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetCardDurationStatistics error:", err) |
|
|
|
return |
|
|
|
|
|
|
|
page := ctx.QueryInt("page") |
|
|
|
if page <= 0 { |
|
|
|
page = 1 |
|
|
|
} |
|
|
|
pagesize := ctx.QueryInt("pagesize") |
|
|
|
if pagesize <= 0 { |
|
|
|
pagesize = 5 |
|
|
|
} |
|
|
|
pageDateCloudbrainDuration := getPageDateCloudbrainDuration(dayCloudbrainDuration, page, pagesize) |
|
|
|
|
|
|
|
ctx.JSON(http.StatusOK, map[string]interface{}{ |
|
|
|
"cardDurationStatisticsInfo": cardDurationStatisticsInfo, |
|
|
|
"beginTime": beginTime, |
|
|
|
"endTime": endTime, |
|
|
|
"totalCount": count, |
|
|
|
"pageDateCloudbrainDuration": pageDateCloudbrainDuration, |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrainStatistics []*models.CloudbrainDurationStatistic) (map[string]int, map[string]int, map[string]int) { |
|
|
|
|
|
|
|
aiCenterTotalDuration := make(map[string]int) |
|
|
|
aiCenterUsageDuration := make(map[string]int) |
|
|
|
aiCenterUsageRate := make(map[string]int) |
|
|
|
for _, cloudbrainStatistic := range cloudbrainStatistics { |
|
|
|
if int64(cloudbrainStatistic.CreatedUnix) >= beginTime.Unix() && int64(cloudbrainStatistic.CreatedUnix) < endTime.Unix() { |
|
|
|
if cloudbrainStatistic.TotalCanUse { |
|
|
|
if _, ok := aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode]; !ok { |
|
|
|
aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration |
|
|
|
} else { |
|
|
|
aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration |
|
|
|
} |
|
|
|
} else { |
|
|
|
if _, ok := aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode]; !ok { |
|
|
|
aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration |
|
|
|
} else { |
|
|
|
aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
for k, v := range aiCenterTotalDuration { |
|
|
|
for i, j := range aiCenterUsageDuration { |
|
|
|
if k == i { |
|
|
|
aiCenterUsageRate[k] = j / v |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return aiCenterUsageDuration, aiCenterTotalDuration, aiCenterUsageRate |
|
|
|
} |
|
|
|
|
|
|
|
func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.DateCloudbrainStatistic, int, error) { |
|
|
|
now := time.Now() |
|
|
|
endTimeTemp := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location()) |
|
|
|
if endTimeTemp.Equal(endTime) { |
|
|
|
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) |
|
|
|
} |
|
|
|
cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{ |
|
|
|
BeginTime: beginTime, |
|
|
|
EndTime: endTime, |
|
|
|
}) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetCardDurationStatistics error:", err) |
|
|
|
return nil, 0, err |
|
|
|
} |
|
|
|
dayCloudbrainInfo := make([]models.DateCloudbrainStatistic, 0) |
|
|
|
count := 0 |
|
|
|
for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) { |
|
|
|
aiCenterUsageDuration, aiCenterTotalDuration, aiCenterUsageRate := getAiCenterUsageDuration(endTimeTemp, endTime, cardDurationStatistics) |
|
|
|
dayCloudbrainInfo = append(dayCloudbrainInfo, models.DateCloudbrainStatistic{ |
|
|
|
Date: endTimeTemp.Format("2006/01/02"), |
|
|
|
AiCenterUsageDuration: aiCenterUsageDuration, |
|
|
|
AiCenterTotalDuration: aiCenterTotalDuration, |
|
|
|
AiCenterUsageRate: aiCenterUsageRate, |
|
|
|
}) |
|
|
|
endTime = endTimeTemp |
|
|
|
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) |
|
|
|
count += 1 |
|
|
|
} |
|
|
|
return dayCloudbrainInfo, count, nil |
|
|
|
} |