| 59 | 59 |
WC
|
| 60 | 60 |
average ewma.MovingAverage
|
| 61 | 61 |
normalizer TimeNormalizer
|
| 62 | |
producer func(time.Duration) string
|
|
62 |
producer func(time.Duration, bool) string
|
| 63 | 63 |
}
|
| 64 | 64 |
|
| 65 | 65 |
func (d *movingAverageETA) Decor(s Statistics) string {
|
| 66 | |
v := math.Round(d.average.Value())
|
| 67 | |
remaining := time.Duration((s.Total - s.Current) * int64(v))
|
| 68 | |
if d.normalizer != nil {
|
| 69 | |
remaining = d.normalizer.Normalize(remaining)
|
| 70 | |
}
|
| 71 | |
return d.FormatMsg(d.producer(remaining))
|
|
66 |
var remaining time.Duration
|
|
67 |
if !s.Aborted {
|
|
68 |
v := math.Round(d.average.Value())
|
|
69 |
remaining = time.Duration((s.Total - s.Current) * int64(v))
|
|
70 |
if d.normalizer != nil {
|
|
71 |
remaining = d.normalizer.Normalize(remaining)
|
|
72 |
}
|
|
73 |
}
|
|
74 |
return d.FormatMsg(d.producer(remaining, s.Aborted))
|
| 72 | 75 |
}
|
| 73 | 76 |
|
| 74 | 77 |
func (d *movingAverageETA) EwmaUpdate(n int64, dur time.Duration) {
|
|
| 113 | 116 |
WC
|
| 114 | 117 |
startTime time.Time
|
| 115 | 118 |
normalizer TimeNormalizer
|
| 116 | |
producer func(time.Duration) string
|
|
119 |
producer func(time.Duration, bool) string
|
| 117 | 120 |
}
|
| 118 | 121 |
|
| 119 | 122 |
func (d *averageETA) Decor(s Statistics) string {
|
| 120 | 123 |
var remaining time.Duration
|
| 121 | |
if s.Current != 0 {
|
|
124 |
if s.Current != 0 && !s.Aborted {
|
| 122 | 125 |
durPerItem := float64(time.Since(d.startTime)) / float64(s.Current)
|
| 123 | 126 |
durPerItem = math.Round(durPerItem)
|
| 124 | 127 |
remaining = time.Duration((s.Total - s.Current) * int64(durPerItem))
|
|
| 126 | 129 |
remaining = d.normalizer.Normalize(remaining)
|
| 127 | 130 |
}
|
| 128 | 131 |
}
|
| 129 | |
return d.FormatMsg(d.producer(remaining))
|
|
132 |
return d.FormatMsg(d.producer(remaining, s.Aborted))
|
| 130 | 133 |
}
|
| 131 | 134 |
|
| 132 | 135 |
func (d *averageETA) AverageAdjust(startTime time.Time) {
|
|
| 168 | 171 |
})
|
| 169 | 172 |
}
|
| 170 | 173 |
|
| 171 | |
func chooseTimeProducer(style TimeStyle) func(time.Duration) string {
|
|
174 |
func chooseTimeProducer(style TimeStyle) func(time.Duration, bool) string {
|
| 172 | 175 |
switch style {
|
| 173 | 176 |
case ET_STYLE_HHMMSS:
|
| 174 | |
return func(remaining time.Duration) string {
|
|
177 |
return func(remaining time.Duration, aborted bool) string {
|
|
178 |
if aborted {
|
|
179 |
return "--:--:--"
|
|
180 |
}
|
| 175 | 181 |
hours := int64(remaining/time.Hour) % 60
|
| 176 | 182 |
minutes := int64(remaining/time.Minute) % 60
|
| 177 | 183 |
seconds := int64(remaining/time.Second) % 60
|
| 178 | 184 |
return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
|
| 179 | 185 |
}
|
| 180 | 186 |
case ET_STYLE_HHMM:
|
| 181 | |
return func(remaining time.Duration) string {
|
|
187 |
return func(remaining time.Duration, aborted bool) string {
|
|
188 |
if aborted {
|
|
189 |
return "--:--"
|
|
190 |
}
|
| 182 | 191 |
hours := int64(remaining/time.Hour) % 60
|
| 183 | 192 |
minutes := int64(remaining/time.Minute) % 60
|
| 184 | 193 |
return fmt.Sprintf("%02d:%02d", hours, minutes)
|
| 185 | 194 |
}
|
| 186 | 195 |
case ET_STYLE_MMSS:
|
| 187 | |
return func(remaining time.Duration) string {
|
|
196 |
return func(remaining time.Duration, aborted bool) string {
|
| 188 | 197 |
hours := int64(remaining/time.Hour) % 60
|
| 189 | 198 |
minutes := int64(remaining/time.Minute) % 60
|
| 190 | 199 |
seconds := int64(remaining/time.Second) % 60
|
| 191 | 200 |
if hours > 0 {
|
|
201 |
if aborted {
|
|
202 |
return "--:--:--"
|
|
203 |
}
|
| 192 | 204 |
return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
|
| 193 | 205 |
}
|
|
206 |
if aborted {
|
|
207 |
return "--:--"
|
|
208 |
}
|
| 194 | 209 |
return fmt.Sprintf("%02d:%02d", minutes, seconds)
|
| 195 | 210 |
}
|
| 196 | 211 |
default:
|
| 197 | |
return func(remaining time.Duration) string {
|
|
212 |
return func(remaining time.Duration, aborted bool) string {
|
|
213 |
if aborted {
|
|
214 |
return "unknown"
|
|
215 |
}
|
| 198 | 216 |
// strip off nanoseconds
|
| 199 | 217 |
return ((remaining / time.Second) * time.Second).String()
|
| 200 | 218 |
}
|