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:
parent
56bc1485df
commit
dd5576b2b3
|
@ -29,6 +29,17 @@ type subsystem interface {
|
||||||
GetStats(string, *cgroups.Stats) error
|
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 (
|
var (
|
||||||
connLock sync.Mutex
|
connLock sync.Mutex
|
||||||
theConn *systemd.Conn
|
theConn *systemd.Conn
|
||||||
|
@ -298,7 +309,18 @@ func (m *Manager) GetPids() ([]int, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) GetStats() (*cgroups.Stats, 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 {
|
func getUnitName(c *configs.Cgroup) string {
|
||||||
|
|
Loading…
Reference in New Issue