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