123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package main
- import (
- "flag"
- "fmt"
- "os"
- "strings"
- "text/tabwriter"
- psgo "github.com/johnsonjh/gfpsgo"
- "github.com/sirupsen/logrus"
- )
- func main() {
- var (
- descriptors []string
- pidsList []string
- data [][]string
- err error
- pids = flag.String(
- "pids",
- "",
- "comma separated list of process IDs to retrieve",
- )
- format = flag.String(
- "format",
- "",
- "ps(1) AIX format comma-separated string",
- )
- list = flag.Bool(
- "list",
- false,
- "list all supported descriptors",
- )
- join = flag.Bool(
- "join",
- false,
- "join namespace of provided pids (containers)",
- )
- fillMappings = flag.Bool(
- "fill-mappings",
- false,
- "fill the UID and GID mappings with the current user namespace",
- )
- )
- flag.Parse()
- if *fillMappings && !*join {
- fmt.Fprintln(os.Stderr, "-fill-mappings requires -join")
- os.Exit(1)
- }
- if *list {
- fmt.Println(strings.Join(psgo.ListDescriptors(), ", "))
- return
- }
- if *format != "" {
- descriptors = strings.Split(*format, ",")
- }
- if *pids != "" {
- pidsList = strings.Split(*pids, ",")
- }
- if len(pidsList) > 0 {
- opts := psgo.JoinNamespaceOpts{FillMappings: *fillMappings}
- if *join {
- data, err = psgo.JoinNamespaceAndProcessInfoByPidsWithOptions(
- pidsList,
- descriptors,
- &opts,
- )
- } else {
- data, err = psgo.ProcessInfoByPids(pidsList, descriptors)
- }
- if err != nil {
- logrus.Panic(err)
- }
- } else {
- data, err = psgo.ProcessInfo(descriptors)
- if err != nil {
- logrus.Panic(err)
- }
- }
- tw := tabwriter.NewWriter(os.Stdout, 5, 1, 3, ' ', 0)
- for _, d := range data {
- fmt.Fprintln(tw, strings.Join(d, "\t"))
- }
- err = tw.Flush()
- if err != nil {
- logrus.Panic(err)
- }
- }
|