| 81 | } |
| 82 | |
| 83 | func Run(f func()) { |
| 84 | defer f() |
| 85 | |
| 86 | var minLoadHours = sharedMinLoadHours // copy |
| 87 | |
| 88 | if len(minLoadHours) == 0 { |
| 89 | fsutils.WaitLoad(15, 8, time.Hour) |
| 90 | return |
| 91 | } |
| 92 | |
| 93 | var hour = time.Now().Hour() |
| 94 | var minLoadHour = -1 |
| 95 | for _, v := range minLoadHours { |
| 96 | if v == hour { |
| 97 | minLoadHour = v |
| 98 | break |
| 99 | } |
| 100 | if v > hour { |
| 101 | minLoadHour = v |
| 102 | break |
| 103 | } |
| 104 | } |
| 105 | if minLoadHour < 0 { |
| 106 | minLoadHour = minLoadHours[0] |
| 107 | } |
| 108 | |
| 109 | if minLoadHour == hour { |
| 110 | fsutils.WaitLoad(15, 10, time.Minute) |
| 111 | return |
| 112 | } |
| 113 | |
| 114 | if minLoadHour < hour { |
| 115 | time.Sleep(time.Duration(24-hour+minLoadHour) * time.Hour) |
| 116 | } else { |
| 117 | time.Sleep(time.Duration(minLoadHour-hour) * time.Hour) |
| 118 | } |
| 119 | fsutils.WaitLoad(15, 10, time.Minute) |
| 120 | } |
| 121 | |
| 122 | func RunTicker(ticker *time.Ticker, f func()) { |
| 123 | for range ticker.C { |