From 21e6eeffb919f521290d9b55bd0c6c8892f773f7 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Sun, 20 Apr 2014 18:35:33 -0700 Subject: [PATCH] Add freezer stats This one is a problem because the most useful stat is a string and not a float like verything else. We may have to change the return type Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- cgroups/fs/freezer.go | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/cgroups/fs/freezer.go b/cgroups/fs/freezer.go index 878a3a5..ebf5bb9 100644 --- a/cgroups/fs/freezer.go +++ b/cgroups/fs/freezer.go @@ -1,7 +1,13 @@ package fs import ( + "fmt" "github.com/dotcloud/docker/pkg/cgroups" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "strings" ) type freezerGroup struct { @@ -20,5 +26,37 @@ func (s *freezerGroup) Remove(d *data) error { } func (s *freezerGroup) Stats(d *data) (map[string]float64, error) { - return nil, ErrNotSupportStat + var ( + paramData = make(map[string]float64) + params = []string{ + "parent_freezing", + "self_freezing", + // comment out right now because this is string "state", + } + ) + + path, err := d.path("freezer") + if err != nil { + return nil, err + } + + for _, param := range params { + f, err := os.Open(filepath.Join(path, fmt.Sprintf("freezer.%s", param))) + if err != nil { + return nil, err + } + defer f.Close() + + data, err := ioutil.ReadAll(f) + if err != nil { + return nil, err + } + + v, err := strconv.ParseFloat(strings.TrimSuffix(string(data), "\n"), 64) + if err != nil { + return nil, err + } + paramData[param] = v + } + return paramData, nil }