aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--cmd/podman/batchcontainer/container.go7
-rw-r--r--cmd/podman/ps.go23
3 files changed, 18 insertions, 13 deletions
diff --git a/.gitignore b/.gitignore
index 2ea832cde..c35cd3383 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,4 +15,5 @@
.ropeproject
__pycache__
/cmd/podman/varlink/ioprojectatomicpodman.go
+/cmd/podman/varlink/iopodman.go
.gopathok
diff --git a/cmd/podman/batchcontainer/container.go b/cmd/podman/batchcontainer/container.go
index de127c64d..e27914174 100644
--- a/cmd/podman/batchcontainer/container.go
+++ b/cmd/podman/batchcontainer/container.go
@@ -42,6 +42,7 @@ type BatchContainerStruct struct {
Exited bool
Pid int
StartedTime time.Time
+ ExitedTime time.Time
Size *ContainerSize
}
@@ -76,6 +77,7 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
pid int
size *ContainerSize
startedTime time.Time
+ exitedTime time.Time
)
batchErr := ctr.Batch(func(c *libpod.Container) error {
@@ -93,6 +95,10 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
if err != nil {
logrus.Errorf("error getting started time for %q: %v", c.ID(), err)
}
+ exitedTime, err = c.FinishedTime()
+ if err != nil {
+ logrus.Errorf("error getting exited time for %q: %v", c.ID(), err)
+ }
if !opts.Size && !opts.Namespace {
return nil
@@ -132,6 +138,7 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
Exited: exited,
Pid: pid,
StartedTime: startedTime,
+ ExitedTime: exitedTime,
Size: size,
}, nil
}
diff --git a/cmd/podman/ps.go b/cmd/podman/ps.go
index a0fb9dabc..a5f862f8f 100644
--- a/cmd/podman/ps.go
+++ b/cmd/podman/ps.go
@@ -29,7 +29,6 @@ type psTemplateParams struct {
Command string
CreatedAtTime time.Time
Created string
- RunningFor string
Status string
Ports string
Size string
@@ -57,10 +56,11 @@ type psJSONParams struct {
Image string `json:"image"`
ImageID string `json:"image_id"`
Command []string `json:"command"`
- CreatedAt time.Time `json:"createdAt"`
ExitCode int32 `json:"exitCode"`
Exited bool `json:"exited"`
- RunningFor time.Duration `json:"runningFor"`
+ CreatedAt time.Time `json:"createdAt"`
+ StartedAt time.Time `json:"startedAt"`
+ ExitedAt time.Time `json:"exitedAt"`
Status string `json:"status"`
PID int `json:"PID"`
Ports []ocicni.PortMapping `json:"ports"`
@@ -110,7 +110,7 @@ func (a psSortedPod) Less(i, j int) bool { return a.psSorted[i].Pod < a.psSorted
type psSortedRunningFor struct{ psSorted }
func (a psSortedRunningFor) Less(i, j int) bool {
- return a.psSorted[i].RunningFor < a.psSorted[j].RunningFor
+ return a.psSorted[j].StartedAt.After(a.psSorted[i].StartedAt)
}
type psSortedStatus struct{ psSorted }
@@ -529,7 +529,6 @@ func getTemplateOutput(psParams []psJSONParams, opts batchcontainer.PsOptions) (
if opts.Pod {
pod = psParam.Pod
}
- runningFor := units.HumanDuration(psParam.RunningFor)
command := strings.Join(psParam.Command, " ")
if !opts.NoTrunc {
@@ -542,9 +541,10 @@ func getTemplateOutput(psParams []psJSONParams, opts batchcontainer.PsOptions) (
switch psParam.Status {
case libpod.ContainerStateStopped.String():
- status = fmt.Sprintf("Exited (%d) %s ago", psParam.ExitCode, runningFor)
+ exitedSince := units.HumanDuration(time.Since(psParam.ExitedAt))
+ status = fmt.Sprintf("Exited (%d) %s ago", psParam.ExitCode, exitedSince)
case libpod.ContainerStateRunning.String():
- status = "Up " + runningFor + " ago"
+ status = "Up " + units.HumanDuration(time.Since(psParam.StartedAt)) + " ago"
case libpod.ContainerStatePaused.String():
status = "Paused"
case libpod.ContainerStateCreated.String(), libpod.ContainerStateConfigured.String():
@@ -563,7 +563,6 @@ func getTemplateOutput(psParams []psJSONParams, opts batchcontainer.PsOptions) (
Command: command,
CreatedAtTime: psParam.CreatedAt,
Created: units.HumanDuration(time.Since(psParam.CreatedAt)) + " ago",
- RunningFor: runningFor,
Status: status,
Ports: ports,
Size: size,
@@ -613,9 +612,11 @@ func getAndSortJSONParams(containers []*libpod.Container, opts batchcontainer.Ps
Image: batchInfo.ConConfig.RootfsImageName,
ImageID: batchInfo.ConConfig.RootfsImageID,
Command: batchInfo.ConConfig.Spec.Process.Args,
- CreatedAt: batchInfo.ConConfig.CreatedTime,
ExitCode: batchInfo.ExitCode,
Exited: batchInfo.Exited,
+ CreatedAt: batchInfo.ConConfig.CreatedTime,
+ StartedAt: batchInfo.StartedTime,
+ ExitedAt: batchInfo.ExitedTime,
Status: batchInfo.ConState.String(),
PID: batchInfo.Pid,
Ports: batchInfo.ConConfig.PortMappings,
@@ -628,10 +629,6 @@ func getAndSortJSONParams(containers []*libpod.Container, opts batchcontainer.Ps
Pod: ctr.PodID(),
}
- if !batchInfo.StartedTime.IsZero() && batchInfo.ConState == libpod.ContainerStateRunning {
- params.RunningFor = time.Since(batchInfo.StartedTime)
- }
-
psOutput = append(psOutput, params)
}
return sortPsOutput(opts.Sort, psOutput)