diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | cmd/podman/batchcontainer/container.go | 7 | ||||
-rw-r--r-- | cmd/podman/ps.go | 23 |
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) |