Remove systemd.GetStats
Because we are using the paths that are created when we initially setup cgroups for a container we no longer have to dynamically generates them when a user requests stats. This allows us to fully use the fs stats code without having system create it's paths. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
6c6808e5bf
commit
5cacd48132
17
api_temp.go
17
api_temp.go
|
@ -5,30 +5,17 @@ package libcontainer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/docker/libcontainer/cgroups/fs"
|
"github.com/docker/libcontainer/cgroups/fs"
|
||||||
"github.com/docker/libcontainer/cgroups/systemd"
|
|
||||||
"github.com/docker/libcontainer/network"
|
"github.com/docker/libcontainer/network"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO(vmarmol): Complete Stats() in final libcontainer API and move users to that.
|
// TODO(vmarmol): Complete Stats() in final libcontainer API and move users to that.
|
||||||
// DEPRECATED: The below portions are only to be used during the transition to the official API.
|
// DEPRECATED: The below portions are only to be used during the transition to the official API.
|
||||||
// Returns all available stats for the given container.
|
// Returns all available stats for the given container.
|
||||||
func GetStats(container *Config, state *State) (*ContainerStats, error) {
|
func GetStats(container *Config, state *State) (stats *ContainerStats, err error) {
|
||||||
var (
|
|
||||||
err error
|
|
||||||
stats = &ContainerStats{}
|
stats = &ContainerStats{}
|
||||||
)
|
if stats.CgroupStats, err = fs.GetStats(state.CgroupPaths); err != nil {
|
||||||
|
|
||||||
if systemd.UseSystemd() {
|
|
||||||
stats.CgroupStats, err = systemd.GetStats(container.Cgroups)
|
|
||||||
} else {
|
|
||||||
stats.CgroupStats, err = fs.GetStats(state.CgroupPaths)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return stats, err
|
return stats, err
|
||||||
}
|
}
|
||||||
|
|
||||||
stats.NetworkStats, err = network.GetStats(&state.NetworkState)
|
stats.NetworkStats, err = network.GetStats(&state.NetworkState)
|
||||||
|
|
||||||
return stats, err
|
return stats, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,3 @@ func ApplyDevices(c *cgroups.Cgroup, pid int) error {
|
||||||
func Freeze(c *cgroups.Cgroup, state cgroups.FreezerState) error {
|
func Freeze(c *cgroups.Cgroup, state cgroups.FreezerState) error {
|
||||||
return fmt.Errorf("Systemd not supported")
|
return fmt.Errorf("Systemd not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStats(c *cgroups.Cgroup) (*cgroups.Stats, error) {
|
|
||||||
return nil, fmt.Errorf("Systemd not supported")
|
|
||||||
}
|
|
||||||
|
|
|
@ -31,16 +31,6 @@ var (
|
||||||
connLock sync.Mutex
|
connLock sync.Mutex
|
||||||
theConn *systemd.Conn
|
theConn *systemd.Conn
|
||||||
hasStartTransientUnit bool
|
hasStartTransientUnit bool
|
||||||
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{},
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func newProp(name string, units interface{}) systemd.Property {
|
func newProp(name string, units interface{}) systemd.Property {
|
||||||
|
@ -168,21 +158,26 @@ func writeFile(dir, file, data string) error {
|
||||||
|
|
||||||
func (c *systemdCgroup) Paths() (map[string]string, error) {
|
func (c *systemdCgroup) Paths() (map[string]string, error) {
|
||||||
paths := make(map[string]string)
|
paths := make(map[string]string)
|
||||||
|
for _, sysname := range []string{
|
||||||
for sysname := range subsystems {
|
"devices",
|
||||||
|
"memory",
|
||||||
|
"cpu",
|
||||||
|
"cpuset",
|
||||||
|
"cpuacct",
|
||||||
|
"blkio",
|
||||||
|
"perf_event",
|
||||||
|
"freezer",
|
||||||
|
} {
|
||||||
subsystemPath, err := getSubsystemPath(c.cgroup, sysname)
|
subsystemPath, err := getSubsystemPath(c.cgroup, sysname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Don't fail if a cgroup hierarchy was not found, just skip this subsystem
|
// Don't fail if a cgroup hierarchy was not found, just skip this subsystem
|
||||||
if cgroups.IsNotFound(err) {
|
if cgroups.IsNotFound(err) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
paths[sysname] = subsystemPath
|
paths[sysname] = subsystemPath
|
||||||
}
|
}
|
||||||
|
|
||||||
return paths, nil
|
return paths, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,35 +262,6 @@ func getUnitName(c *cgroups.Cgroup) string {
|
||||||
return fmt.Sprintf("%s-%s.scope", c.Parent, c.Name)
|
return fmt.Sprintf("%s-%s.scope", c.Parent, c.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This would be nicer to get from the systemd API when accounting
|
|
||||||
* is enabled, but sadly there is no way to do that yet.
|
|
||||||
* The lack of this functionality in the API & the approach taken
|
|
||||||
* is guided by
|
|
||||||
* http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/#readingaccountinginformation.
|
|
||||||
*/
|
|
||||||
func GetStats(c *cgroups.Cgroup) (*cgroups.Stats, error) {
|
|
||||||
stats := cgroups.NewStats()
|
|
||||||
|
|
||||||
for sysname, sys := range subsystems {
|
|
||||||
subsystemPath, err := getSubsystemPath(c, sysname)
|
|
||||||
if err != nil {
|
|
||||||
// Don't fail if a cgroup hierarchy was not found, just skip this subsystem
|
|
||||||
if cgroups.IsNotFound(err) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sys.GetStats(subsystemPath, stats); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return stats, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Atm we can't use the systemd device support because of two missing things:
|
// Atm we can't use the systemd device support because of two missing things:
|
||||||
// * Support for wildcards to allow mknod on any device
|
// * Support for wildcards to allow mknod on any device
|
||||||
// * Support for wildcards to allow /dev/pts support
|
// * Support for wildcards to allow /dev/pts support
|
||||||
|
|
Loading…
Reference in New Issue