client/driver: add waiting layer status count to pull progress status msg
This commit is contained in:
parent
77af17efbc
commit
d8de354dbf
|
@ -21,6 +21,10 @@ const (
|
||||||
// dockerImageProgressReportInterval is the default value set in the
|
// dockerImageProgressReportInterval is the default value set in the
|
||||||
// imageProgressManager when newImageProgressManager is called
|
// imageProgressManager when newImageProgressManager is called
|
||||||
dockerImageProgressReportInterval = 10 * time.Second
|
dockerImageProgressReportInterval = 10 * time.Second
|
||||||
|
|
||||||
|
// dockerImageSlowProgressReportInterval is the default value set in the
|
||||||
|
// imageProgressManager when newImageProgressManager is called
|
||||||
|
dockerImageSlowProgressReportInterval = 2 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
// layerProgress tracks the state and downloaded bytes of a single layer within
|
// layerProgress tracks the state and downloaded bytes of a single layer within
|
||||||
|
@ -88,11 +92,16 @@ func (p *imageProgress) get() (string, time.Time) {
|
||||||
return "No progress", p.timestamp
|
return "No progress", p.timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
var pulled, pulling int
|
var pulled, pulling, waiting int
|
||||||
for _, l := range p.layers {
|
for _, l := range p.layers {
|
||||||
if l.status == layerProgressStatusDownloading {
|
switch {
|
||||||
|
case l.status == layerProgressStatusStarting ||
|
||||||
|
l.status == layerProgressStatusWaiting:
|
||||||
|
waiting++
|
||||||
|
case l.status == layerProgressStatusDownloading ||
|
||||||
|
l.status == layerProgressStatusVerifying:
|
||||||
pulling++
|
pulling++
|
||||||
} else if l.status > layerProgressStatusVerifying {
|
case l.status >= layerProgressStatusDownloaded:
|
||||||
pulled++
|
pulled++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,9 +114,9 @@ func (p *imageProgress) get() (string, time.Time) {
|
||||||
est = (elapsed.Nanoseconds() / cur * total) - elapsed.Nanoseconds()
|
est = (elapsed.Nanoseconds() / cur * total) - elapsed.Nanoseconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("Pulled %d/%d (%s/%s) pulling %d layers - est %.1fs remaining",
|
return fmt.Sprintf("Pulled %d/%d (%s/%s) layers: %d waiting/%d pulling - est %.1fs remaining",
|
||||||
pulled, len(p.layers), units.BytesSize(float64(cur)), units.BytesSize(float64(total)), pulling,
|
pulled, len(p.layers), units.BytesSize(float64(cur)), units.BytesSize(float64(total)),
|
||||||
time.Duration(est).Seconds()), p.timestamp
|
waiting, pulling, time.Duration(est).Seconds()), p.timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
// set takes a status message received from the docker engine api during an image
|
// set takes a status message received from the docker engine api during an image
|
||||||
|
@ -160,7 +169,7 @@ func (p *imageProgress) totalBytes() int64 {
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
// progressReporterFunc defines the method for handeling inactivity and report
|
// progressReporterFunc defines the method for handling inactivity and report
|
||||||
// events from the imageProgressManager. The image name, current status message
|
// events from the imageProgressManager. The image name, current status message
|
||||||
// and timestamp of last received status update are passed in.
|
// and timestamp of last received status update are passed in.
|
||||||
type progressReporterFunc func(image string, msg string, timestamp time.Time)
|
type progressReporterFunc func(image string, msg string, timestamp time.Time)
|
||||||
|
@ -190,12 +199,13 @@ func newImageProgressManager(
|
||||||
inactivityFunc, reporter, slowReporter progressReporterFunc) *imageProgressManager {
|
inactivityFunc, reporter, slowReporter progressReporterFunc) *imageProgressManager {
|
||||||
|
|
||||||
pm := &imageProgressManager{
|
pm := &imageProgressManager{
|
||||||
image: image,
|
image: image,
|
||||||
activityDeadline: dockerPullActivityDeadline,
|
activityDeadline: dockerPullActivityDeadline,
|
||||||
inactivityFunc: inactivityFunc,
|
inactivityFunc: inactivityFunc,
|
||||||
reportInterval: dockerImageProgressReportInterval,
|
reportInterval: dockerImageProgressReportInterval,
|
||||||
reporter: reporter,
|
reporter: reporter,
|
||||||
slowReporter: slowReporter,
|
slowReportInterval: dockerImageSlowProgressReportInterval,
|
||||||
|
slowReporter: slowReporter,
|
||||||
imageProgress: &imageProgress{
|
imageProgress: &imageProgress{
|
||||||
timestamp: time.Now(),
|
timestamp: time.Now(),
|
||||||
layers: make(map[string]*layerProgress),
|
layers: make(map[string]*layerProgress),
|
||||||
|
|
Loading…
Reference in New Issue