mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-14 20:41:15 +08:00
95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
package monitor
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func formatCount(count int64) string {
|
|
switch {
|
|
case count < 1000:
|
|
return strconv.FormatInt(count, 10)
|
|
case count < 1000000:
|
|
return fmt.Sprintf("%.1fK", float64(count)/1000)
|
|
case count < 1000000000:
|
|
return fmt.Sprintf("%.1fM", float64(count)/1000000)
|
|
case count < 1000000000000:
|
|
return fmt.Sprintf("%.1fB", float64(count)/1000000000)
|
|
default:
|
|
return fmt.Sprintf("%.1fT", float64(count)/1000000000000)
|
|
}
|
|
}
|
|
|
|
func formatByte(b int64) string {
|
|
const (
|
|
KB = 1000
|
|
MB = KB * 1000
|
|
GB = MB * 1000
|
|
TB = GB * 1000
|
|
PB = TB * 1000
|
|
)
|
|
|
|
switch {
|
|
case b < KB:
|
|
return fmt.Sprintf("%dB", b)
|
|
case b < MB:
|
|
return fmt.Sprintf("%.1fKB", float64(b)/KB)
|
|
case b < GB:
|
|
return fmt.Sprintf("%.1fMB", float64(b)/MB)
|
|
case b < TB:
|
|
return fmt.Sprintf("%.1fGB", float64(b)/GB)
|
|
case b < PB:
|
|
return fmt.Sprintf("%.1fTB", float64(b)/TB)
|
|
default:
|
|
return fmt.Sprintf("%.1fPB", float64(b)/PB)
|
|
}
|
|
}
|
|
|
|
const (
|
|
oneMinute = 60
|
|
oneHour = 3600
|
|
oneDay = 24 * oneHour
|
|
tenDay = 10 * oneDay
|
|
oneYear = 365 * oneDay
|
|
bucketMinuteRetention = (7 - 1) * oneDay
|
|
bucketHourRetention = (90 - 1) * oneDay
|
|
bucketDayRetention = (5*365 - 1) * oneDay
|
|
)
|
|
|
|
// getTimeIntervalAndBucket 根据start和end来获取窗口时间间隔,窗口偏移量offset,以及使用的bucket, 查询的startTime也会格式化
|
|
func getTimeInterval(startTime, endTime time.Time) int64 {
|
|
startToNow := time.Now().Unix() - startTime.Unix()
|
|
|
|
//结合可使用的最小桶,根据end-start时间间隔来得出合适的桶和趋势图时间间隔
|
|
diff := endTime.Unix() - startTime.Unix()
|
|
if diff <= oneHour {
|
|
return 5 * oneMinute
|
|
} else if diff <= oneDay {
|
|
|
|
switch {
|
|
case startToNow <= bucketHourRetention:
|
|
return oneHour
|
|
case startToNow <= bucketDayRetention:
|
|
return oneDay
|
|
default:
|
|
return 7 * oneDay
|
|
}
|
|
|
|
} else if diff <= tenDay {
|
|
|
|
switch {
|
|
case startToNow <= bucketHourRetention:
|
|
return oneHour
|
|
case startToNow <= bucketDayRetention:
|
|
return oneDay
|
|
default:
|
|
return 7 * oneDay
|
|
}
|
|
|
|
} else {
|
|
return 7 * oneDay
|
|
}
|
|
|
|
}
|