mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-27 10:10:27 +08:00
增加服务带宽统计
This commit is contained in:
@@ -9,6 +9,19 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// 分钟时间点
|
||||
type timeMinute struct {
|
||||
Day string
|
||||
Minute string
|
||||
}
|
||||
|
||||
// 分钟时间范围
|
||||
type timeMinuteRange struct {
|
||||
Day string
|
||||
MinuteFrom string
|
||||
MinuteTo string
|
||||
}
|
||||
|
||||
// RangeDays 计算日期之间的所有日期,格式为YYYYMMDD
|
||||
func RangeDays(dayFrom string, dayTo string) ([]string, error) {
|
||||
ok, err := regexp.MatchString(`^\d{8}$`, dayFrom)
|
||||
@@ -79,15 +92,15 @@ func RangeMonths(dayFrom string, dayTo string) ([]string, error) {
|
||||
dayFrom, dayTo = dayTo, dayFrom
|
||||
}
|
||||
|
||||
result := []string{dayFrom[:6]}
|
||||
var result = []string{dayFrom[:6]}
|
||||
|
||||
year := types.Int(dayFrom[:4])
|
||||
month := types.Int(dayFrom[4:6])
|
||||
day := types.Int(dayFrom[6:])
|
||||
t := time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
|
||||
var year = types.Int(dayFrom[:4])
|
||||
var month = types.Int(dayFrom[4:6])
|
||||
var day = types.Int(dayFrom[6:])
|
||||
var t = time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
|
||||
for {
|
||||
t = t.AddDate(0, 0, 20)
|
||||
newDay := timeutil.Format("Ymd", t)
|
||||
var newDay = timeutil.Format("Ymd", t)
|
||||
if newDay <= dayTo {
|
||||
var monthString = newDay[:6]
|
||||
if !lists.ContainsString(result, monthString) {
|
||||
@@ -129,17 +142,17 @@ func RangeHours(hourFrom string, hourTo string) ([]string, error) {
|
||||
}
|
||||
|
||||
// 不能超过N天
|
||||
maxHours := 100 - 1 // -1 是去掉默认加入的dayFrom
|
||||
result := []string{hourFrom}
|
||||
var maxHours = 100 - 1 // -1 是去掉默认加入的dayFrom
|
||||
var result = []string{hourFrom}
|
||||
|
||||
year := types.Int(hourFrom[:4])
|
||||
month := types.Int(hourFrom[4:6])
|
||||
day := types.Int(hourFrom[6:8])
|
||||
hour := types.Int(hourFrom[8:])
|
||||
t := time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.Local)
|
||||
var year = types.Int(hourFrom[:4])
|
||||
var month = types.Int(hourFrom[4:6])
|
||||
var day = types.Int(hourFrom[6:8])
|
||||
var hour = types.Int(hourFrom[8:])
|
||||
var t = time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.Local)
|
||||
for {
|
||||
t = t.Add(1 * time.Hour)
|
||||
newHour := timeutil.Format("YmdH", t)
|
||||
var newHour = timeutil.Format("YmdH", t)
|
||||
if newHour <= hourTo {
|
||||
result = append(result, newHour)
|
||||
} else {
|
||||
@@ -154,3 +167,56 @@ func RangeHours(hourFrom string, hourTo string) ([]string, error) {
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// RangeMinutes 计算若干个时间点,返回结果为 [ [day1, minute1], [day2, minute2] ... ]
|
||||
func RangeMinutes(toTime time.Time, count int, everyMinutes int64) []timeMinute {
|
||||
var everySeconds = everyMinutes * 60
|
||||
if everySeconds <= 0 {
|
||||
everySeconds = 300
|
||||
}
|
||||
var result = []timeMinute{}
|
||||
var fromTime = time.Unix(toTime.Unix()-everySeconds*int64(count-1), 0)
|
||||
for {
|
||||
var timestamp = fromTime.Unix() / everySeconds * everySeconds
|
||||
result = append(result, timeMinute{
|
||||
Day: timeutil.FormatTime("Ymd", timestamp),
|
||||
Minute: timeutil.FormatTime("Hi", timestamp),
|
||||
})
|
||||
fromTime = time.Unix(fromTime.Unix()+everySeconds, 0)
|
||||
|
||||
count--
|
||||
if count <= 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// GroupMinuteRanges 将时间点分组
|
||||
func GroupMinuteRanges(minutes []timeMinute) []timeMinuteRange {
|
||||
var result = []*timeMinuteRange{}
|
||||
var lastDay = ""
|
||||
var lastRange *timeMinuteRange
|
||||
for _, minute := range minutes {
|
||||
if minute.Day != lastDay {
|
||||
lastDay = minute.Day
|
||||
lastRange = &timeMinuteRange{
|
||||
Day: minute.Day,
|
||||
MinuteFrom: minute.Minute,
|
||||
MinuteTo: minute.Minute,
|
||||
}
|
||||
result = append(result, lastRange)
|
||||
} else {
|
||||
if lastRange != nil {
|
||||
lastRange.MinuteTo = minute.Minute
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var finalResult = []timeMinuteRange{}
|
||||
for _, minutePtr := range result {
|
||||
finalResult = append(finalResult, *minutePtr)
|
||||
}
|
||||
return finalResult
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package utils
|
||||
package utils_test
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestRangeDays(t *testing.T) {
|
||||
days, err := RangeDays("20210101", "20210115")
|
||||
days, err := utils.RangeDays("20210101", "20210115")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -11,7 +15,7 @@ func TestRangeDays(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRangeMonth(t *testing.T) {
|
||||
days, err := RangeMonths("20200101", "20210115")
|
||||
days, err := utils.RangeMonths("20200101", "20210115")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -20,7 +24,7 @@ func TestRangeMonth(t *testing.T) {
|
||||
|
||||
func TestRangeHours(t *testing.T) {
|
||||
{
|
||||
hours, err := RangeHours("2021010100", "2021010123")
|
||||
hours, err := utils.RangeHours("2021010100", "2021010123")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -28,10 +32,49 @@ func TestRangeHours(t *testing.T) {
|
||||
}
|
||||
|
||||
{
|
||||
hours, err := RangeHours("2021010105", "2021010112")
|
||||
hours, err := utils.RangeHours("2021010105", "2021010112")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(hours)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRangeMinutes(t *testing.T) {
|
||||
{
|
||||
var minutes = utils.RangeMinutes(time.Now(), 5, 5)
|
||||
t.Log(minutes)
|
||||
}
|
||||
|
||||
{
|
||||
var minutes = utils.RangeMinutes(time.Now(), 5, 3)
|
||||
t.Log(minutes)
|
||||
}
|
||||
|
||||
{
|
||||
var now = time.Now()
|
||||
var hour = now.Hour()
|
||||
var minute = now.Minute()
|
||||
now = now.Add(-time.Duration(hour) * time.Hour)
|
||||
now = now.Add(-time.Duration(minute-7) * time.Minute) // 后一天的 00:07 开始往前计算
|
||||
var minutes = utils.RangeMinutes(now, 5, 5)
|
||||
t.Log(minutes)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGroupMinuteRanges(t *testing.T) {
|
||||
{
|
||||
var minutes = utils.GroupMinuteRanges(utils.RangeMinutes(time.Now(), 5, 5))
|
||||
t.Log(minutes)
|
||||
}
|
||||
|
||||
{
|
||||
var now = time.Now()
|
||||
var hour = now.Hour()
|
||||
var minute = now.Minute()
|
||||
now = now.Add(-time.Duration(hour) * time.Hour)
|
||||
now = now.Add(-time.Duration(minute-7) * time.Minute) // 后一天的 00:07 开始往前计算
|
||||
var minutes = utils.GroupMinuteRanges(utils.RangeMinutes(now, 5, 5))
|
||||
t.Log(minutes)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user