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 }