add progressbar and time

Upstream-commit: ebc36b879d4197a9455b325b529da212539e180c
Component: engine
This commit is contained in:
Victor Vieux
2013-11-28 14:33:18 -08:00
parent ee50ddf929
commit 53c5a8d270
2 changed files with 13 additions and 5 deletions
+11 -4
View File
@@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"io"
"strings"
"time"
)
@@ -17,8 +18,9 @@ func (e *JSONError) Error() string {
}
type JSONProgress struct {
Current int `json:"current,omitempty"`
Total int `json:"total,omitempty"`
Current int `json:"current,omitempty"`
Total int `json:"total,omitempty"`
Start int64 `json:"start,omitempty"`
}
func (p *JSONProgress) String() string {
@@ -30,8 +32,13 @@ func (p *JSONProgress) String() string {
return fmt.Sprintf("%8v/?", current)
}
total := HumanSize(int64(p.Total))
percentage := float64(p.Current) / float64(p.Total) * 100
return fmt.Sprintf("%8v/%v (%.0f%%)", current, total, percentage)
percentage := int(float64(p.Current)/float64(p.Total)*100) / 2
fromStart := time.Now().UTC().Sub(time.Unix(int64(p.Start), 0))
perEntry := fromStart / time.Duration(p.Current)
left := time.Duration(p.Total-p.Current) * perEntry
left = (left / time.Second) * time.Second
return fmt.Sprintf("[%s>%s] %8v/%v %s", strings.Repeat("=", percentage), strings.Repeat(" ", 50-percentage), current, total, left.String())
}
type JSONMessage struct {
+2 -1
View File
@@ -2,6 +2,7 @@ package utils
import (
"io"
"time"
)
// Reader with progress bar
@@ -48,7 +49,7 @@ func ProgressReader(r io.ReadCloser, size int, output io.Writer, sf *StreamForma
output: NewWriteFlusher(output),
ID: ID,
action: action,
progress: JSONProgress{Total: size},
progress: JSONProgress{Total: size, Start: time.Now().UTC().Unix()},
sf: sf,
newLine: newline,
}