mirror of
https://github.com/containers/podman.git
synced 2025-05-21 09:05:56 +08:00

Using the vendored changes from psgo, incorporate JoinNamespaceAndProcessInfoByPids to get process information for each pid namespace of running containers in the pod. Also added a man page, and tests. Signed-off-by: haircommander <pehunt@redhat.com> Closes: #1298 Approved by: mheon
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
// +build linux
|
|
|
|
package libpod
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/containers/psgo"
|
|
)
|
|
|
|
// GetPodPidInformation returns process-related data of all processes in
|
|
// the pod. The output data can be controlled via the `descriptors`
|
|
// argument which expects format descriptors and supports all AIXformat
|
|
// descriptors of ps (1) plus some additional ones to for instance inspect the
|
|
// set of effective capabilities. Eeach element in the returned string slice
|
|
// is a tab-separated string.
|
|
//
|
|
// For more details, please refer to github.com/containers/psgo.
|
|
func (p *Pod) GetPodPidInformation(descriptors []string) ([]string, error) {
|
|
p.lock.Lock()
|
|
defer p.lock.Unlock()
|
|
|
|
pids := make([]string, 0)
|
|
ctrsInPod, err := p.allContainers()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, c := range ctrsInPod {
|
|
c.lock.Lock()
|
|
|
|
if err := c.syncContainer(); err != nil {
|
|
c.lock.Unlock()
|
|
return nil, err
|
|
}
|
|
if c.state.State == ContainerStateRunning {
|
|
pid := strconv.Itoa(c.state.PID)
|
|
pids = append(pids, pid)
|
|
}
|
|
c.lock.Unlock()
|
|
}
|
|
// TODO: psgo returns a [][]string to give users the ability to apply
|
|
// filters on the data. We need to change the API here and the
|
|
// varlink API to return a [][]string if we want to make use of
|
|
// filtering.
|
|
output, err := psgo.JoinNamespaceAndProcessInfoByPids(pids, descriptors)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res := []string{}
|
|
for _, out := range output {
|
|
res = append(res, strings.Join(out, "\t"))
|
|
}
|
|
return res, nil
|
|
}
|