Adding "stats" and "spec" option to nsinit binary which will print the stats and spec respectively.
Docker-DCO-1.1-Signed-off-by: Vishnu Kannan <vishnuk@google.com> (github: vishh)
This commit is contained in:
parent
1a38e6ff10
commit
3589181812
2 changed files with 48 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"syscall"
|
||||
|
||||
"github.com/dotcloud/docker/pkg/libcontainer/cgroups"
|
||||
)
|
||||
|
@ -49,6 +50,9 @@ func (s *cpuGroup) GetStats(d *data, stats *cgroups.Stats) error {
|
|||
|
||||
f, err := os.Open(filepath.Join(path, "cpu.stat"))
|
||||
if err != nil {
|
||||
if pathErr, ok := err.(*os.PathError); ok && pathErr.Err == syscall.ENOENT {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
|
@ -11,6 +12,7 @@ import (
|
|||
"strconv"
|
||||
|
||||
"github.com/dotcloud/docker/pkg/libcontainer"
|
||||
"github.com/dotcloud/docker/pkg/libcontainer/cgroups/fs"
|
||||
"github.com/dotcloud/docker/pkg/libcontainer/nsinit"
|
||||
)
|
||||
|
||||
|
@ -67,6 +69,26 @@ func main() {
|
|||
if err := nsinit.Init(container, rootfs, console, syncPipe, os.Args[2:]); err != nil {
|
||||
log.Fatalf("unable to initialize for container: %s", err)
|
||||
}
|
||||
case "stats":
|
||||
// returns the stats of the current container.
|
||||
stats, err := getContainerStats(container)
|
||||
if err != nil {
|
||||
log.Printf("Failed to get stats - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("Stats:\n%v\n", stats)
|
||||
os.Exit(0)
|
||||
|
||||
case "spec":
|
||||
// returns the spec of the current container.
|
||||
spec, err := getContainerSpec(container)
|
||||
if err != nil {
|
||||
log.Printf("Failed to get spec - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("Spec:\n%v\n", spec)
|
||||
os.Exit(0)
|
||||
|
||||
default:
|
||||
log.Fatalf("command not supported for nsinit %s", os.Args[0])
|
||||
}
|
||||
|
@ -125,3 +147,25 @@ func startContainer(container *libcontainer.Container, term nsinit.Terminal, dat
|
|||
|
||||
return nsinit.Exec(container, term, "", dataPath, args, createCommand, startCallback)
|
||||
}
|
||||
|
||||
// returns the container stats in json format.
|
||||
func getContainerStats(container *libcontainer.Container) (string, error) {
|
||||
stats, err := fs.GetStats(container.Cgroups)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
out, err := json.MarshalIndent(stats, "", "\t")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(out), nil
|
||||
}
|
||||
|
||||
// returns the container spec in json format.
|
||||
func getContainerSpec(container *libcontainer.Container) (string, error) {
|
||||
spec, err := json.MarshalIndent(container, "", "\t")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(spec), nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue