Codebase list golang-github-vbauerster-mpb / e6506d8
placeholder eta/elapsed for aborted bar Vladimir Bauer 3 years ago
2 changed file(s) with 34 addition(s) and 16 deletion(s). Raw diff Collapse all Expand all
2626 producer := chooseTimeProducer(style)
2727 fn := func(s Statistics) string {
2828 if !s.Completed {
29 msg = producer(time.Since(startTime))
29 msg = producer(time.Since(startTime), s.Aborted)
3030 }
3131 return msg
3232 }
5959 WC
6060 average ewma.MovingAverage
6161 normalizer TimeNormalizer
62 producer func(time.Duration) string
62 producer func(time.Duration, bool) string
6363 }
6464
6565 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))
7275 }
7376
7477 func (d *movingAverageETA) EwmaUpdate(n int64, dur time.Duration) {
113116 WC
114117 startTime time.Time
115118 normalizer TimeNormalizer
116 producer func(time.Duration) string
119 producer func(time.Duration, bool) string
117120 }
118121
119122 func (d *averageETA) Decor(s Statistics) string {
120123 var remaining time.Duration
121 if s.Current != 0 {
124 if s.Current != 0 && !s.Aborted {
122125 durPerItem := float64(time.Since(d.startTime)) / float64(s.Current)
123126 durPerItem = math.Round(durPerItem)
124127 remaining = time.Duration((s.Total - s.Current) * int64(durPerItem))
126129 remaining = d.normalizer.Normalize(remaining)
127130 }
128131 }
129 return d.FormatMsg(d.producer(remaining))
132 return d.FormatMsg(d.producer(remaining, s.Aborted))
130133 }
131134
132135 func (d *averageETA) AverageAdjust(startTime time.Time) {
168171 })
169172 }
170173
171 func chooseTimeProducer(style TimeStyle) func(time.Duration) string {
174 func chooseTimeProducer(style TimeStyle) func(time.Duration, bool) string {
172175 switch style {
173176 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 }
175181 hours := int64(remaining/time.Hour) % 60
176182 minutes := int64(remaining/time.Minute) % 60
177183 seconds := int64(remaining/time.Second) % 60
178184 return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
179185 }
180186 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 }
182191 hours := int64(remaining/time.Hour) % 60
183192 minutes := int64(remaining/time.Minute) % 60
184193 return fmt.Sprintf("%02d:%02d", hours, minutes)
185194 }
186195 case ET_STYLE_MMSS:
187 return func(remaining time.Duration) string {
196 return func(remaining time.Duration, aborted bool) string {
188197 hours := int64(remaining/time.Hour) % 60
189198 minutes := int64(remaining/time.Minute) % 60
190199 seconds := int64(remaining/time.Second) % 60
191200 if hours > 0 {
201 if aborted {
202 return "--:--:--"
203 }
192204 return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
193205 }
206 if aborted {
207 return "--:--"
208 }
194209 return fmt.Sprintf("%02d:%02d", minutes, seconds)
195210 }
196211 default:
197 return func(remaining time.Duration) string {
212 return func(remaining time.Duration, aborted bool) string {
213 if aborted {
214 return "unknown"
215 }
198216 // strip off nanoseconds
199217 return ((remaining / time.Second) * time.Second).String()
200218 }