diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-01-15 23:33:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 23:33:10 +0100 |
commit | 741e29caf39c57551724a48265f6d9641f8f6fe0 (patch) | |
tree | 402ec832106bdc4da02fcc30927c465152b1fe72 /pkg/adapter/containers.go | |
parent | 0870e88ff48eaf6b5624044b7cd2bc35cff85150 (diff) | |
parent | 69bd57f518cbc7c97808a663d76066d0d247ac0f (diff) | |
download | podman-741e29caf39c57551724a48265f6d9641f8f6fe0.tar.gz podman-741e29caf39c57551724a48265f6d9641f8f6fe0.tar.bz2 podman-741e29caf39c57551724a48265f6d9641f8f6fe0.zip |
Merge pull request #4860 from vrothberg/v2-top
v2 api: top improvements
Diffstat (limited to 'pkg/adapter/containers.go')
-rw-r--r-- | pkg/adapter/containers.go | 67 |
1 files changed, 1 insertions, 66 deletions
diff --git a/pkg/adapter/containers.go b/pkg/adapter/containers.go index 8b21d6b94..f66999ffa 100644 --- a/pkg/adapter/containers.go +++ b/pkg/adapter/containers.go @@ -27,7 +27,6 @@ import ( "github.com/containers/libpod/libpod/logs" "github.com/containers/libpod/pkg/adapter/shortcuts" "github.com/containers/libpod/pkg/systemdgen" - "github.com/containers/psgo" "github.com/containers/storage" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -913,71 +912,7 @@ func (r *LocalRuntime) Top(cli *cliconfig.TopValues) ([]string, error) { return nil, errors.Wrapf(err, "unable to lookup requested container") } - output, psgoErr := container.Top(descriptors) - if psgoErr == nil { - return output, nil - } - - // If we encountered an ErrUnknownDescriptor error, fallback to executing - // ps(1). This ensures backwards compatibility to users depending on ps(1) - // and makes sure we're ~compatible with docker. - if errors.Cause(psgoErr) != psgo.ErrUnknownDescriptor { - return nil, psgoErr - } - - output, err = r.execPS(container, descriptors) - if err != nil { - // Note: return psgoErr to guide users into using the AIX descriptors - // instead of using ps(1). - return nil, psgoErr - } - - // Trick: filter the ps command from the output instead of - // checking/requiring PIDs in the output. - filtered := []string{} - cmd := strings.Join(descriptors, " ") - for _, line := range output { - if !strings.Contains(line, cmd) { - filtered = append(filtered, line) - } - } - - return filtered, nil -} - -func (r *LocalRuntime) execPS(c *libpod.Container, args []string) ([]string, error) { - rPipe, wPipe, err := os.Pipe() - if err != nil { - return nil, err - } - defer wPipe.Close() - defer rPipe.Close() - - streams := new(libpod.AttachStreams) - streams.OutputStream = wPipe - streams.ErrorStream = wPipe - streams.InputStream = bufio.NewReader(os.Stdin) - streams.AttachOutput = true - streams.AttachError = true - streams.AttachInput = true - - psOutput := []string{} - go func() { - scanner := bufio.NewScanner(rPipe) - for scanner.Scan() { - psOutput = append(psOutput, scanner.Text()) - } - }() - - cmd := append([]string{"ps"}, args...) - ec, err := c.Exec(false, false, map[string]string{}, cmd, "", "", streams, 0, nil, "") - if err != nil { - return nil, err - } else if ec != 0 { - return nil, errors.Errorf("Runtime failed with exit status: %d and output: %s", ec, strings.Join(psOutput, " ")) - } - - return psOutput, nil + return container.Top(descriptors) } // ExecContainer executes a command in the container |