Browse Source

update

tags/v1.22.11.1^2
liuzx 3 years ago
parent
commit
f1ad30cd11
3 changed files with 214 additions and 192 deletions
  1. +25
    -8
      models/cloudbrain_static.go
  2. +3
    -2
      routers/api/v1/api.go
  3. +186
    -182
      routers/api/v1/repo/cloudbrain_dashboard.go

+ 25
- 8
models/cloudbrain_static.go View File

@@ -38,6 +38,16 @@ type TaskDetail struct {
WorkServerNum int64 `json:"WorkServerNum"` WorkServerNum int64 `json:"WorkServerNum"`
Spec *Specification `json:"Spec"` Spec *Specification `json:"Spec"`
} }
type CardTypeAndNum struct {
CardType string `json:"CardType"`
Num int `json:"Num"`
ComputeResource string `json:"computeResource"`
}
type ResourceOverview struct {
Cluster string `json:"cluster"`
AiCenterCode string `json:"aiCenterCode"`
CardTypeAndNum []CardTypeAndNum `json:"cardTypeAndNum"`
}


type CloudbrainDurationStatistic struct { type CloudbrainDurationStatistic struct {
ID int64 `xorm:"pk autoincr"` ID int64 `xorm:"pk autoincr"`
@@ -69,17 +79,24 @@ type DurationRateStatistic struct {
AiCenterUsageDurationStat map[string]int `json:"aiCenterUsageDurationStat"` AiCenterUsageDurationStat map[string]int `json:"aiCenterUsageDurationStat"`
TotalUsageRate float64 `json:"totalUsageRate"` TotalUsageRate float64 `json:"totalUsageRate"`
} }
type DateCloudbrainStatistic struct {
Date string `json:"date"`
AiCenterUsageDuration map[string]int `json:"aiCenterUsageDuration"`
AiCenterTotalDuration map[string]int `json:"aiCenterTotalDuration"`
AiCenterUsageRate map[string]float64 `json:"aiCenterUsageRate"`

// type DateCloudbrainStatistic struct {
// Date string `json:"date"`
// AiCenterUsageDuration map[string]int `json:"aiCenterUsageDuration"`
// AiCenterTotalDuration map[string]int `json:"aiCenterTotalDuration"`
// AiCenterUsageRate map[string]float64 `json:"aiCenterUsageRate"`
// }
type DateUsageStatistic struct {
Date string `json:"date"`
UsageDuration int `json:"usageDuration"`
TotalDuration int `json:"totalDuration"`
UsageRate float64 `json:"usageRate"`
} }


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


func GetTodayCreatorCount(beginTime time.Time, endTime time.Time) (int64, error) { func GetTodayCreatorCount(beginTime time.Time, endTime time.Time) (int64, error) {


+ 3
- 2
routers/api/v1/api.go View File

@@ -601,8 +601,9 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("/running_top_data", repo.GetRunningTop) m.Get("/running_top_data", repo.GetRunningTop)


m.Get("/overview_resource", repo.GetCloudbrainResourceOverview) m.Get("/overview_resource", repo.GetCloudbrainResourceOverview)
m.Get("/resource_usage", repo.GetCloudbrainResourceUsage)
m.Get("/resource_usage_detail", repo.GetCloudbrainResourceUsageDetail)
m.Get("/resource_usage_statistic", repo.GetDurationRateStatistic)
m.Get("/resource_usage_rate", repo.GetCloudbrainResourceUsage)
m.Get("/resource_usage_rate_detail", repo.GetCloudbrainResourceUsageDetail)
}) })
}, operationReq) }, operationReq)




+ 186
- 182
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"net/url" "net/url"
"strconv"
"strings" "strings"
"time" "time"


@@ -532,17 +533,17 @@ func getPageDateCloudbrainInfo(dateCloudbrainInfo []DateCloudbrainInfo, page int


} }


func getPageDateCloudbrainDuration(dateCloudbrainDuration []models.DateCloudbrainStatistic, page int, pagesize int) []models.DateCloudbrainStatistic {
func getPageDateCloudbrainDuration(dateUsageStatistic []models.DateUsageStatistic, page int, pagesize int) []models.DateUsageStatistic {
begin := (page - 1) * pagesize begin := (page - 1) * pagesize
end := (page) * pagesize end := (page) * pagesize


if begin > len(dateCloudbrainDuration)-1 {
if begin > len(dateUsageStatistic)-1 {
return nil return nil
} }
if end > len(dateCloudbrainDuration)-1 {
return dateCloudbrainDuration[begin:]
if end > len(dateUsageStatistic)-1 {
return dateUsageStatistic[begin:]
} else { } else {
return dateCloudbrainDuration[begin:end]
return dateUsageStatistic[begin:end]
} }


} }
@@ -1425,9 +1426,53 @@ func GetCloudbrainResourceOverview(ctx *context.Context) {
log.Info("GetCanUseCardInfo err: %v", err) log.Info("GetCanUseCardInfo err: %v", err)
return return
} }
// ResourceAiCenterRes, err := models.GetResourceAiCenters()
// if err != nil {
// log.Error("Can not get ResourceAiCenterRes.", err)
// return
// }
resourceOverviews := []models.ResourceOverview{}
resourceOpenIOne := models.ResourceOverview{}
resourceOpenITwo := models.ResourceOverview{}
// resourceChengdu := models.ResourceOverview{}

for _, resourceQueue := range resourceQueues {
if resourceQueue.Cluster == models.OpenICluster {
if resourceQueue.AiCenterCode == models.AICenterOfCloudBrainOne {
resourceOpenIOne.Cluster = models.OpenICluster
resourceOpenIOne.AiCenterCode = models.AICenterOfCloudBrainOne
cardTypeNum := models.CardTypeAndNum{}
cardTypeNum.CardType = resourceQueue.AccCardType
cardTypeNum.Num = resourceQueue.CardsTotalNum
cardTypeNum.ComputeResource = resourceQueue.ComputeResource
resourceOpenIOne.CardTypeAndNum = append(resourceOpenIOne.CardTypeAndNum, cardTypeNum)
}
if resourceQueue.AiCenterCode == models.AICenterOfCloudBrainTwo {
resourceOpenITwo.Cluster = models.OpenICluster
resourceOpenITwo.AiCenterCode = models.AICenterOfCloudBrainTwo
cardTypeNum := models.CardTypeAndNum{}
cardTypeNum.CardType = resourceQueue.AccCardType
cardTypeNum.Num = resourceQueue.CardsTotalNum
cardTypeNum.ComputeResource = resourceQueue.ComputeResource
resourceOpenITwo.CardTypeAndNum = append(resourceOpenITwo.CardTypeAndNum, cardTypeNum)
}
// if resourceQueue.AiCenterCode == models.AICenterOfChengdu {
// resourceChengdu.Cluster = models.OpenICluster
// resourceChengdu.AiCenterCode = models.AICenterOfChengdu
// cardTypeNum := models.CardTypeAndNum{}
// cardTypeNum.CardType = resourceQueue.AccCardType
// cardTypeNum.Num = resourceQueue.CardsTotalNum
// cardTypeNum.ComputeResource = resourceQueue.ComputeResource
// resourceChengdu.CardTypeAndNum = append(resourceChengdu.CardTypeAndNum, cardTypeNum)
// }
}
}
resourceOverviews = append(resourceOverviews, resourceOpenIOne)
resourceOverviews = append(resourceOverviews, resourceOpenITwo)
// resourceOverviews = append(resourceOverviews, resourceChengdu)


ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"resourceQueues": resourceQueues,
"resourceOverviews": resourceOverviews,
}) })


} }
@@ -1485,119 +1530,96 @@ func GetCloudbrainResourceUsage(ctx *context.Context) {
} }


func GetCloudbrainResourceUsageDetail(ctx *context.Context) { func GetCloudbrainResourceUsageDetail(ctx *context.Context) {
aiCenterCode := ctx.QueryTrim("aiCenterCode")
log.Info("aiCenterCode: %v", aiCenterCode)
if aiCenterCode == "" {
aiCenterCode = "OpenIOne"
}
beginTime, endTime := getBeginAndEndTime(ctx)
dayCloudbrainDuration, count, err := getDayCloudbrainDuration(beginTime, endTime, aiCenterCode)
if err != nil {
log.Error("Can not query dayCloudbrainDuration.", err)
return
}
hourCloudbrainDuration, err := getHourCloudbrainDuration(beginTime, endTime, aiCenterCode)
if err != nil {
log.Error("Can not query hourCloudbrainDuration.", err)
return
}
page := ctx.QueryInt("page")
if page <= 0 {
page = 1
}
pagesize := ctx.QueryInt("pagesize")
if pagesize <= 0 {
pagesize = 36500
}
pageDateCloudbrainDuration := getPageDateCloudbrainDuration(dayCloudbrainDuration, page, pagesize)
ctx.JSON(http.StatusOK, map[string]interface{}{
"totalCount": count,
"pageDateCloudbrainDuration": pageDateCloudbrainDuration,
"hourCloudbrainDuration": hourCloudbrainDuration,
})
}

func GetDurationRateStatistic(ctx *context.Context) {
beginTime, endTime := getBeginAndEndTime(ctx)
durationRateStatistic := getDurationStatistic(beginTime, endTime)

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

}

func getBeginAndEndTime(ctx *context.Context) (time.Time, time.Time) {
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
dayCloudbrainDuration := make([]models.DateCloudbrainStatistic, 0)
hourCloudbrainDuration := models.HourTimeStatistic{}
var err error var err error
var count int
if queryType != "" { if queryType != "" {
if queryType == "all" { if queryType == "all" {
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)
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
return
return beginTime, endTime
} }
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)
if err != nil {
log.Error("Can not query dayCloudbrainDuration.", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainInfo_get_error"))
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())
endTime = now 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" { } else if queryType == "yesterday" {
beginTime = now.AddDate(0, 0, -1) beginTime = now.AddDate(0, 0, -1)
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())
endTime = time.Date(now.Year(), now.Month(), now.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" { } else if queryType == "last_7day" {
beginTime = now.AddDate(0, 0, -6) beginTime = now.AddDate(0, 0, -6)
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())
endTime = now 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" { } else if queryType == "last_30day" {
beginTime = now.AddDate(0, 0, -29) beginTime = now.AddDate(0, 0, -29)
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())
endTime = now 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" { } else if queryType == "current_month" {
endTime = now endTime = now
beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location()) 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" { } else if queryType == "current_year" {
endTime = now endTime = now
beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location()) 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" { } else if queryType == "last_month" {

lastMonthTime := now.AddDate(0, -1, 0) lastMonthTime := now.AddDate(0, -1, 0)
beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location()) 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()) 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 { } else {
@@ -1607,105 +1629,81 @@ func GetCloudbrainResourceUsageDetail(ctx *context.Context) {
if err != nil { if err != nil {
log.Error("Can not get recordCloudbrain", err) log.Error("Can not get recordCloudbrain", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
return
return beginTime, endTime
} }
brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime() brainRecordBeginTime := recordCloudbrainDuration[0].CreatedUnix.AsTime()
beginTime = brainRecordBeginTime beginTime = brainRecordBeginTime
endTime = now 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 { } else {
beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local)
if err != nil { if err != nil {
log.Error("Can not ParseInLocation.", err) log.Error("Can not ParseInLocation.", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
return
return beginTime, endTime
} }
endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local)
if err != nil { if err != nil {
log.Error("Can not ParseInLocation.", err) log.Error("Can not ParseInLocation.", err)
ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error"))
return
return beginTime, endTime
} }
if endTime.After(time.Now()) { if endTime.After(time.Now()) {
endTime = 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
}
} }


} }

page := ctx.QueryInt("page")
if page <= 0 {
page = 1
}
pagesize := ctx.QueryInt("pagesize")
if pagesize <= 0 {
pagesize = 5
}
pageDateCloudbrainDuration := getPageDateCloudbrainDuration(dayCloudbrainDuration, page, pagesize)
durationRateStatistic := getDurationStatistic(beginTime, endTime)

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

return beginTime, endTime
} }


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)
aiCenterUsageDuration := make(map[string]int)
aiCenterUsageRate := make(map[string]float64)
func getAiCenterUsageDuration(beginTime time.Time, endTime time.Time, cloudbrainStatistics []*models.CloudbrainDurationStatistic) (int, int, float64) {
totalDuration := int(0)
usageDuration := int(0)
usageRate := float64(0)

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 {
if _, ok := aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode]; !ok {
aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration
} else {
aiCenterTotalDuration[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration
}
totalDuration += cloudbrainStatistic.CardsTotalDuration
} else { } else {
if _, ok := aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode]; !ok {
aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode] = cloudbrainStatistic.CardsTotalDuration
} else {
aiCenterUsageDuration[cloudbrainStatistic.AiCenterCode] += cloudbrainStatistic.CardsTotalDuration
}
}
}
}
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
usageDuration += cloudbrainStatistic.CardsTotalDuration
}
// if cloudbrainStatistic.TotalCanUse {
// if _, ok := aiCenterTotalDuration[Date]; !ok {
// aiCenterTotalDuration[Date] = cloudbrainStatistic.CardsTotalDuration
// } else {
// aiCenterTotalDuration[Date] += cloudbrainStatistic.CardsTotalDuration
// }
// } else {
// if _, ok := aiCenterUsageDuration[Date]; !ok {
// aiCenterUsageDuration[Date] = cloudbrainStatistic.CardsTotalDuration
// } else {
// aiCenterUsageDuration[Date] += cloudbrainStatistic.CardsTotalDuration
// }
// }
} }
} }

for k, v := range aiCenterTotalDuration {
for i, j := range aiCenterUsageDuration {
if k == i {
aiCenterUsageRate[k] = float64(j) / float64(v)
}
}
}

return aiCenterUsageDuration, aiCenterTotalDuration, aiCenterUsageRate
// 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 i, j := range aiCenterUsageDuration {
// if k == i {
// aiCenterUsageRate[k] = float64(j) / float64(v)
// }
// }
// }
// usageRate = float64(usageDuration) / float64(totalDuration)

return totalDuration, usageDuration, usageRate
} }


func getDurationStatistic(beginTime time.Time, endTime time.Time) models.DurationRateStatistic { func getDurationStatistic(beginTime time.Time, endTime time.Time) models.DurationRateStatistic {
@@ -1763,30 +1761,31 @@ func getDurationStatistic(beginTime time.Time, endTime time.Time) models.Duratio
return durationRateStatistic return durationRateStatistic
} }


func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.DateCloudbrainStatistic, int, error) {
func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time, aiCenterCode string) ([]models.DateUsageStatistic, 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())
if endTimeTemp.Equal(endTime) { if endTimeTemp.Equal(endTime) {
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
} }
cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{ cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{
BeginTime: beginTime,
EndTime: endTime,
BeginTime: beginTime,
EndTime: endTime,
AiCenterCode: aiCenterCode,
}) })
if err != nil { if err != nil {
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.DateUsageStatistic, 0)
count := 0 count := 0
for beginTime.Before(endTimeTemp) || beginTime.Equal(endTimeTemp) { 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,
TotalDuration, UsageDuration, UsageRate := getAiCenterUsageDuration(endTimeTemp, endTime, cardDurationStatistics)
dayCloudbrainInfo = append(dayCloudbrainInfo, models.DateUsageStatistic{
Date: endTimeTemp.Format("2006/01/02"),
UsageDuration: UsageDuration,
TotalDuration: TotalDuration,
UsageRate: UsageRate,
}) })
endTime = endTimeTemp endTime = endTimeTemp
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
@@ -1798,10 +1797,10 @@ func getDayCloudbrainDuration(beginTime time.Time, endTime time.Time) ([]models.
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)
func getHourCloudbrainDuration(beginTime time.Time, endTime time.Time, aiCenterCode string) (models.HourTimeStatistic, error) {
hourTimeTotalDuration := make(map[string]int)
hourTimeUsageDuration := make(map[string]int)
hourTimeUsageRate := make(map[string]float64)
hourTimeStatistic := models.HourTimeStatistic{} hourTimeStatistic := models.HourTimeStatistic{}


cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{ cardDurationStatistics, err := models.GetCardDurationStatistics(&models.DurationStatisticOptions{
@@ -1810,44 +1809,49 @@ func getHourCloudbrainDuration(beginTime time.Time, endTime time.Time, aiCenterC
}) })
if err != nil { if err != nil {
log.Error("GetCardDurationStatistics error:", err) log.Error("GetCardDurationStatistics error:", err)
return hourTimeStatistic
return hourTimeStatistic, err
} }
for _, cloudbrainStatistic := range cardDurationStatistics { for _, cloudbrainStatistic := range cardDurationStatistics {
if cloudbrainStatistic.AiCenterCode == aiCenterCode { if cloudbrainStatistic.AiCenterCode == aiCenterCode {
if cloudbrainStatistic.TotalCanUse { if cloudbrainStatistic.TotalCanUse {
if _, ok := hourTimeTotalDuration[cloudbrainStatistic.HourTime]; !ok {
hourTimeTotalDuration[cloudbrainStatistic.HourTime] = cloudbrainStatistic.CardsTotalDuration
if _, ok := hourTimeTotalDuration[strconv.Itoa(cloudbrainStatistic.HourTime)]; !ok {
hourTimeTotalDuration[strconv.Itoa(cloudbrainStatistic.HourTime)] = cloudbrainStatistic.CardsTotalDuration
} else { } else {
hourTimeTotalDuration[cloudbrainStatistic.HourTime] += cloudbrainStatistic.CardsTotalDuration
hourTimeTotalDuration[strconv.Itoa(cloudbrainStatistic.HourTime)] += cloudbrainStatistic.CardsTotalDuration
} }
} else { } else {
if _, ok := hourTimeUsageDuration[cloudbrainStatistic.HourTime]; !ok {
hourTimeUsageDuration[cloudbrainStatistic.HourTime] = cloudbrainStatistic.CardsTotalDuration
if _, ok := hourTimeUsageDuration[strconv.Itoa(cloudbrainStatistic.HourTime)]; !ok {
hourTimeUsageDuration[strconv.Itoa(cloudbrainStatistic.HourTime)] = cloudbrainStatistic.CardsTotalDuration
} else { } 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)
}
hourTimeUsageDuration[strconv.Itoa(cloudbrainStatistic.HourTime)] += cloudbrainStatistic.CardsTotalDuration
} }
} }
} }
} }
hourTimeList := []string{"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
}
// if _, ok := hourTimeUsageRate[v]; !ok {
// hourTimeUsageRate[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.HourTimeTotalDuration = hourTimeTotalDuration
hourTimeStatistic.HourTimeUsageDuration = hourTimeUsageDuration hourTimeStatistic.HourTimeUsageDuration = hourTimeUsageDuration
hourTimeStatistic.HourTimeUsageRate = hourTimeUsageRate hourTimeStatistic.HourTimeUsageRate = hourTimeUsageRate
return hourTimeStatistic
return hourTimeStatistic, nil
} }

Loading…
Cancel
Save