pkg/libcontainer/cgroups/fs/freezer.go
Vishnu Kannan c7135d73d3 Added a new method cgroups.GetStats() which will return a cgroups.Stats object which will contain all the available cgroup Stats.
Remove old Stats interface in libcontainers cgroups package.
Changed Stats to use unit64 instead of int64 to prevent integer overflow issues.
Updated unit tests.

Docker-DCO-1.1-Signed-off-by: Vishnu Kannan <vishnuk@google.com> (github: vishh)
2014-05-29 20:16:49 +00:00

56 lines
1.1 KiB
Go

package fs
import (
"io/ioutil"
"path/filepath"
"strings"
"github.com/dotcloud/docker/pkg/libcontainer/cgroups"
)
type freezerGroup struct {
}
func (s *freezerGroup) Set(d *data) error {
dir, err := d.join("freezer")
if err != nil {
if err != cgroups.ErrNotFound {
return err
}
return nil
}
if d.c.Freezer != "" {
if err := writeFile(dir, "freezer.state", d.c.Freezer); err != nil {
return err
}
}
return nil
}
func (s *freezerGroup) Remove(d *data) error {
return removePath(d.path("freezer"))
}
func getFreezerFileData(path string) (string, error) {
data, err := ioutil.ReadFile(path)
return strings.TrimSuffix(string(data), "\n"), err
}
func (s *freezerGroup) GetStats(d *data, stats *cgroups.Stats) error {
path, err := d.path("freezer")
if err != nil {
return err
}
var data string
if data, err = getFreezerFileData(filepath.Join(path, "freezer.parent_freezing")); err != nil {
return err
}
stats.FreezerStats.ParentState = data
if data, err = getFreezerFileData(filepath.Join(path, "freezer.self_freezing")); err != nil {
return err
}
stats.FreezerStats.SelfState = data
return nil
}