aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/kpod/info.go148
1 files changed, 16 insertions, 132 deletions
diff --git a/cmd/kpod/info.go b/cmd/kpod/info.go
index 0b8ae75b4..c491b4585 100644
--- a/cmd/kpod/info.go
+++ b/cmd/kpod/info.go
@@ -1,15 +1,11 @@
package main
import (
- "bytes"
- "fmt"
- "io/ioutil"
- "os"
"runtime"
- "github.com/docker/docker/pkg/system"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/cmd/kpod/formats"
+ "github.com/projectatomic/libpod/libpod"
"github.com/urfave/cli"
)
@@ -41,22 +37,24 @@ func infoCmd(c *cli.Context) error {
}
info := map[string]interface{}{}
- infoGivers := []infoGiverFunc{
- storeInfo,
- hostInfo,
+ runtime, err := getRuntime(c)
+ if err != nil {
+ return errors.Wrapf(err, "could not get runtime")
+ }
+ defer runtime.Shutdown(false)
+
+ infoArr, err := runtime.Info()
+ if err != nil {
+ return errors.Wrapf(err, "error getting info")
}
if c.Bool("debug") {
- infoGivers = append(infoGivers, debugInfo)
+ debugInfo := debugInfo(c)
+ infoArr = append(infoArr, libpod.InfoData{Type: "debug", Data: debugInfo})
}
- for _, giver := range infoGivers {
- thisName, thisInfo, err := giver(c)
- if err != nil {
- info[thisName] = infoErr(err)
- continue
- }
- info[thisName] = thisInfo
+ for _, currInfo := range infoArr {
+ info[currInfo.Type] = currInfo.Data
}
var out formats.Writer
@@ -75,126 +73,12 @@ func infoCmd(c *cli.Context) error {
return nil
}
-func infoErr(err error) map[string]interface{} {
- return map[string]interface{}{
- "error": err.Error(),
- }
-}
-
-type infoGiverFunc func(c *cli.Context) (name string, info map[string]interface{}, err error)
-
// top-level "debug" info
-func debugInfo(c *cli.Context) (string, map[string]interface{}, error) {
+func debugInfo(c *cli.Context) map[string]interface{} {
info := map[string]interface{}{}
info["compiler"] = runtime.Compiler
info["go version"] = runtime.Version()
info["kpod version"] = c.App.Version
info["git commit"] = gitCommit
- return "debug", info, nil
-}
-
-// top-level "host" info
-func hostInfo(c *cli.Context) (string, map[string]interface{}, error) {
- // lets say OS, arch, number of cpus, amount of memory, maybe os distribution/version, hostname, kernel version, uptime
- info := map[string]interface{}{}
- info["os"] = runtime.GOOS
- info["arch"] = runtime.GOARCH
- info["cpus"] = runtime.NumCPU()
- mi, err := system.ReadMemInfo()
- if err != nil {
- info["meminfo"] = infoErr(err)
- } else {
- // TODO this might be a place for github.com/dustin/go-humanize
- info["MemTotal"] = mi.MemTotal
- info["MemFree"] = mi.MemFree
- info["SwapTotal"] = mi.SwapTotal
- info["SwapFree"] = mi.SwapFree
- }
- if kv, err := readKernelVersion(); err != nil {
- info["kernel"] = infoErr(err)
- } else {
- info["kernel"] = kv
- }
-
- if up, err := readUptime(); err != nil {
- info["uptime"] = infoErr(err)
- } else {
- info["uptime"] = up
- }
- if host, err := os.Hostname(); err != nil {
- info["hostname"] = infoErr(err)
- } else {
- info["hostname"] = host
- }
- return "host", info, nil
-}
-
-// top-level "store" info
-func storeInfo(c *cli.Context) (string, map[string]interface{}, error) {
- storeStr := "store"
- config, err := getConfig(c)
- if err != nil {
- return storeStr, nil, errors.Wrapf(err, "Could not get config")
- }
- store, err := getStore(config)
- if err != nil {
- return storeStr, nil, err
- }
-
- // lets say storage driver in use, number of images, number of containers
- info := map[string]interface{}{}
- info["GraphRoot"] = store.GraphRoot()
- info["RunRoot"] = store.RunRoot()
- info["GraphDriverName"] = store.GraphDriverName()
- info["GraphOptions"] = store.GraphOptions()
- statusPairs, err := store.Status()
- if err != nil {
- return storeStr, nil, err
- }
- status := map[string]string{}
- for _, pair := range statusPairs {
- status[pair[0]] = pair[1]
- }
- info["GraphStatus"] = status
- images, err := store.Images()
- if err != nil {
- info["ImageStore"] = infoErr(err)
- } else {
- info["ImageStore"] = map[string]interface{}{
- "number": len(images),
- }
- }
- containers, err := store.Containers()
- if err != nil {
- info["ContainerStore"] = infoErr(err)
- } else {
- info["ContainerStore"] = map[string]interface{}{
- "number": len(containers),
- }
- }
- return storeStr, info, nil
-}
-
-func readKernelVersion() (string, error) {
- buf, err := ioutil.ReadFile("/proc/version")
- if err != nil {
- return "", err
- }
- f := bytes.Fields(buf)
- if len(f) < 2 {
- return string(bytes.TrimSpace(buf)), nil
- }
- return string(f[2]), nil
-}
-
-func readUptime() (string, error) {
- buf, err := ioutil.ReadFile("/proc/uptime")
- if err != nil {
- return "", err
- }
- f := bytes.Fields(buf)
- if len(f) < 1 {
- return "", fmt.Errorf("invalid uptime")
- }
- return string(f[0]), nil
+ return info
}