summaryrefslogtreecommitdiff
path: root/cmd/podman/ps.go
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@gmail.com>2018-08-07 11:56:18 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2018-08-08 12:37:51 +0000
commit71793f9f8a26bc2593968f61a68c0bb42f9da71a (patch)
treeaad50ffe94dea6ab6256e17634bc698637454e42 /cmd/podman/ps.go
parent9e06478d8307b0279c991fd47122755fdf7bd922 (diff)
downloadpodman-71793f9f8a26bc2593968f61a68c0bb42f9da71a.tar.gz
podman-71793f9f8a26bc2593968f61a68c0bb42f9da71a.tar.bz2
podman-71793f9f8a26bc2593968f61a68c0bb42f9da71a.zip
Improve ps handling of container start/stop time
Previously all calculations were done based off the container's start time. Retrieve end time and use it to calculate time stopped for containers. Also, convert ps JSON output to report timestamps for create, start, and stop times. Signed-off-by: Matthew Heon <matthew.heon@gmail.com> Closes: #1228 Approved by: rhatdan
Diffstat (limited to 'cmd/podman/ps.go')
-rw-r--r--cmd/podman/ps.go23
1 files changed, 10 insertions, 13 deletions
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)