Implement stats for systemd

It looks weird but works and not crashes application.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
This commit is contained in:
Alexander Morozov 2015-03-02 14:36:09 -08:00
parent 56bc1485df
commit dd5576b2b3
1 changed files with 23 additions and 1 deletions

View File

@ -29,6 +29,17 @@ type subsystem interface {
GetStats(string, *cgroups.Stats) error
}
var subsystems = map[string]subsystem{
"devices": &fs.DevicesGroup{},
"memory": &fs.MemoryGroup{},
"cpu": &fs.CpuGroup{},
"cpuset": &fs.CpusetGroup{},
"cpuacct": &fs.CpuacctGroup{},
"blkio": &fs.BlkioGroup{},
"perf_event": &fs.PerfEventGroup{},
"freezer": &fs.FreezerGroup{},
}
var (
connLock sync.Mutex
theConn *systemd.Conn
@ -298,7 +309,18 @@ func (m *Manager) GetPids() ([]int, error) {
}
func (m *Manager) GetStats() (*cgroups.Stats, error) {
panic("not implemented")
stats := cgroups.NewStats()
for name, path := range m.Paths {
sys, ok := subsystems[name]
if !ok || !cgroups.PathExists(path) {
continue
}
if err := sys.GetStats(path, stats); err != nil {
return nil, err
}
}
return stats, nil
}
func getUnitName(c *configs.Cgroup) string {