@@ -2,6 +2,7 @@ package view
2
2
3
3
import (
4
4
"fmt"
5
+ "math/rand"
5
6
"strconv"
6
7
"time"
7
8
@@ -21,6 +22,11 @@ type SuggestOption struct {
21
22
// TODO:refactoring combine with Lookup, use HeatMap as input
22
23
// TODO:refactoring extract "table builder", compare with others views
23
24
25
+ func jitter (duration time.Duration ) time.Duration {
26
+ r := rand .New (rand .NewSource (time .Now ().UnixNano ()))
27
+ return time .Duration (r .Int63n (int64 (duration )))
28
+ }
29
+
24
30
func Suggest (
25
31
printer interface { Println (... interface {}) },
26
32
@@ -29,23 +35,22 @@ func Suggest(
29
35
30
36
option SuggestOption ,
31
37
) error {
32
- now := time .Now ().UTC ()
38
+ now := time .Now ()
39
+ day := option .Suggest .Day .Add (jitter (time .Hour )).In (time .Local )
33
40
34
41
var suggestion string
35
42
if option .Delta {
36
- suggestion = fmt .Sprintf ("%dd" , option .Suggest .Day .Sub (now )/ xtime .Day )
43
+ days := day .Sub (now ) / xtime .Day
44
+ tail := - day .Sub (now ) % xtime .Day
45
+ suggestion = fmt .Sprintf ("%dd%s" , days , tail )
37
46
} else {
38
- day := xtime .CopyClock (now , option .Suggest .Day ).In (time .Local )
39
47
suggestion = day .Format (time .RFC3339 )
40
48
}
41
49
if option .Short {
42
50
printer .Println (suggestion )
43
51
return nil
44
52
} else if option .Delta {
45
- suggestion = fmt .Sprintf ("%s: %s" ,
46
- option .Suggest .Day .Format (xtime .RFC3339Day ),
47
- suggestion ,
48
- )
53
+ suggestion = fmt .Sprintf ("%s: %s" , day .Format (time .RFC3339 ), suggestion )
49
54
}
50
55
51
56
data := convert (scope , histogram )
0 commit comments