Skip to content

Commit 0628c5f

Browse files
committed
progress: Overall ETA never less than max ETA
1 parent 3e1eb94 commit 0628c5f

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

progress/render.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,14 @@ func (p *Progress) extractDoneAndActiveTrackers() ([]*Tracker, []*Tracker) {
7070
var trackersActive, trackersDone []*Tracker
7171
var activeTrackersProgress int64
7272
p.trackersActiveMutex.RLock()
73+
var maxETA time.Duration
7374
for _, tracker := range p.trackersActive {
7475
if !tracker.IsDone() {
7576
trackersActive = append(trackersActive, tracker)
7677
activeTrackersProgress += int64(tracker.PercentDone())
78+
if eta := tracker.ETA(); eta > maxETA {
79+
maxETA = eta
80+
}
7781
} else {
7882
trackersDone = append(trackersDone, tracker)
7983
}
@@ -85,6 +89,7 @@ func (p *Progress) extractDoneAndActiveTrackers() ([]*Tracker, []*Tracker) {
8589
// calculate the overall tracker's progress value
8690
p.overallTracker.value = int64(p.LengthDone()+len(trackersDone)) * 100
8791
p.overallTracker.value += activeTrackersProgress
92+
p.overallTracker.minETA = maxETA
8893
if len(trackersActive) == 0 {
8994
p.overallTracker.MarkAsDone()
9095
}

progress/tracker.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Tracker struct {
3535
timeStart time.Time
3636
timeStop time.Time
3737
value int64
38+
minETA time.Duration
3839
}
3940

4041
// ETA returns the expected time of "arrival" or completion of this tracker. It
@@ -56,7 +57,11 @@ func (t *Tracker) ETA() time.Duration {
5657
if pDone == 0 {
5758
return time.Duration(0)
5859
}
59-
return time.Duration((int64(timeTaken) / pDone) * (100 - pDone))
60+
eta := time.Duration((int64(timeTaken) / pDone) * (100 - pDone))
61+
if eta < t.minETA {
62+
eta = t.minETA
63+
}
64+
return eta
6065
}
6166

6267
// Increment updates the current value of the task being tracked.

0 commit comments

Comments
 (0)