Major fixes to podman ps --format=json output

A number of fields were never being populated. Populate them as
best we can.

Add a new field, exited, to indicate whether the exit code has
meaning (IE, the container has exited).

Fix handling of running time - it stops ticking when the
container stops. There is further work needed here, I suspect.

Signed-off-by: Matthew Heon <mheon@redhat.com>
This commit is contained in:
Matthew Heon
2018-07-13 11:21:37 -04:00
parent d25ebcc35b
commit 4c44185199
2 changed files with 23 additions and 15 deletions

View File

@ -38,6 +38,7 @@ type BatchContainerStruct struct {
ConConfig *libpod.ContainerConfig ConConfig *libpod.ContainerConfig
ConState libpod.ContainerStatus ConState libpod.ContainerStatus
ExitCode int32 ExitCode int32
Exited bool
Pid int Pid int
RootFsSize, RwSize int64 RootFsSize, RwSize int64
StartedTime time.Time StartedTime time.Time
@ -63,6 +64,7 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
conState libpod.ContainerStatus conState libpod.ContainerStatus
err error err error
exitCode int32 exitCode int32
exited bool
pid int pid int
rootFsSize, rwSize int64 rootFsSize, rwSize int64
startedTime time.Time startedTime time.Time
@ -75,7 +77,7 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
return errors.Wrapf(err, "unable to obtain container state") return errors.Wrapf(err, "unable to obtain container state")
} }
exitCode, _, err = c.ExitCode() exitCode, exited, err = c.ExitCode()
if err != nil { if err != nil {
return errors.Wrapf(err, "unable to obtain container exit code") return errors.Wrapf(err, "unable to obtain container exit code")
} }
@ -115,6 +117,7 @@ func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStru
ConConfig: conConfig, ConConfig: conConfig,
ConState: conState, ConState: conState,
ExitCode: exitCode, ExitCode: exitCode,
Exited: exited,
Pid: pid, Pid: pid,
RootFsSize: rootFsSize, RootFsSize: rootFsSize,
RwSize: rwSize, RwSize: rwSize,

View File

@ -58,6 +58,7 @@ type psJSONParams struct {
Command []string `json:"command"` Command []string `json:"command"`
CreatedAt time.Time `json:"createdAt"` CreatedAt time.Time `json:"createdAt"`
ExitCode int32 `json:"exitCode"` ExitCode int32 `json:"exitCode"`
Exited bool `json:"exited"`
RunningFor time.Duration `json:"runningFor"` RunningFor time.Duration `json:"runningFor"`
Status string `json:"status"` Status string `json:"status"`
PID int `json:"PID"` PID int `json:"PID"`
@ -581,17 +582,21 @@ func getAndSortJSONParams(containers []*libpod.Container, opts batchcontainer.Ps
ImageID: batchInfo.ConConfig.RootfsImageID, ImageID: batchInfo.ConConfig.RootfsImageID,
Command: batchInfo.ConConfig.Spec.Process.Args, Command: batchInfo.ConConfig.Spec.Process.Args,
CreatedAt: batchInfo.ConConfig.CreatedTime, CreatedAt: batchInfo.ConConfig.CreatedTime,
ExitCode: batchInfo.ExitCode,
Exited: batchInfo.Exited,
Status: batchInfo.ConState.String(), Status: batchInfo.ConState.String(),
PID: batchInfo.Pid,
Ports: batchInfo.ConConfig.PortMappings, Ports: batchInfo.ConConfig.PortMappings,
RootFsSize: batchInfo.RootFsSize, RootFsSize: batchInfo.RootFsSize,
RWSize: batchInfo.RwSize, RWSize: batchInfo.RwSize,
Names: batchInfo.ConConfig.Name, Names: batchInfo.ConConfig.Name,
Labels: batchInfo.ConConfig.Labels, Labels: batchInfo.ConConfig.Labels,
Mounts: batchInfo.ConConfig.UserVolumes, Mounts: batchInfo.ConConfig.UserVolumes,
ContainerRunning: batchInfo.ConState == libpod.ContainerStateRunning,
Namespaces: ns, Namespaces: ns,
} }
if !batchInfo.StartedTime.IsZero() { if !batchInfo.StartedTime.IsZero() && batchInfo.ConState == libpod.ContainerStateRunning {
params.RunningFor = time.Since(batchInfo.StartedTime) params.RunningFor = time.Since(batchInfo.StartedTime)
} }