getTimeIntervalAndBucket 根据start和end来获取窗口时间间隔,窗口偏移量offset,以及使用的bucket, 查询的startTime也会格式化
(startTime, endTime time.Time)
| 87 | |
| 88 | // getTimeIntervalAndBucket 根据start和end来获取窗口时间间隔,窗口偏移量offset,以及使用的bucket, 查询的startTime也会格式化 |
| 89 | func getTimeIntervalAndBucket(startTime, endTime time.Time) (time.Time, string, string, string) { |
| 90 | //根据start距离现在的时长算出可使用的最小桶 |
| 91 | minimumBucket := "" |
| 92 | startToNow := time.Now().Unix() - startTime.Unix() |
| 93 | if startToNow <= bucketMinuteRetention { |
| 94 | minimumBucket = bucketMinute |
| 95 | } else if startToNow <= bucketHourRetention { |
| 96 | minimumBucket = bucketHour |
| 97 | } else if startToNow <= bucketDayRetention { |
| 98 | minimumBucket = bucketDay |
| 99 | } else { |
| 100 | minimumBucket = bucketWeek |
| 101 | } |
| 102 | |
| 103 | //结合可使用的最小桶,根据end-start时间间隔来得出合适的桶和趋势图时间间隔 |
| 104 | diff := endTime.Unix() - startTime.Unix() |
| 105 | location, _ := time.LoadLocation(timeZone) |
| 106 | if diff <= oneHour { |
| 107 | |
| 108 | switch minimumBucket { |
| 109 | case bucketMinute: |
| 110 | return startTime, "1m", "", bucketMinute |
| 111 | case bucketHour: |
| 112 | //start变成小时整 |
| 113 | newStart := formatStartTimeHour(startTime, location) |
| 114 | return newStart, "1h", "", bucketHour |
| 115 | case bucketDay: |
| 116 | //start 变成一天整 |
| 117 | newStart := formatStartTimeDay(startTime, location) |
| 118 | return newStart, "1d", "", bucketDay |
| 119 | case bucketWeek: |
| 120 | //将startTime往前顺延到周一 |
| 121 | newStart := formatStartTimeToMonday(startTime, location) |
| 122 | return newStart, "1w", "-4d", bucketWeek |
| 123 | } |
| 124 | |
| 125 | } else if diff <= oneDay { |
| 126 | |
| 127 | switch minimumBucket { |
| 128 | case bucketMinute: |
| 129 | offset := "" |
| 130 | offsetTime := startTime.Minute() % 10 |
| 131 | if offsetTime != 0 { |
| 132 | offset = fmt.Sprintf("%dm", offsetTime) |
| 133 | } |
| 134 | return startTime, "10m", offset, bucketMinute |
| 135 | |
| 136 | case bucketHour: |
| 137 | newStart := formatStartTimeHour(startTime, location) |
| 138 | return newStart, "1h", "", bucketHour |
| 139 | case bucketDay: |
| 140 | newStart := formatStartTimeDay(startTime, location) |
| 141 | return newStart, "1d", "", bucketDay |
| 142 | case bucketWeek: |
| 143 | //将startTime往前顺延到周一 |
| 144 | newStart := formatStartTimeToMonday(startTime, location) |
| 145 | return newStart, "1w", "-4d", bucketWeek |
| 146 | } |
no test coverage detected