From 50106c74905a27ca96773afd894443d00a62dd06 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 11 Jul 2014 12:00:27 -0700 Subject: [PATCH] Fix nsinit function to get stats from systemd Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- api_temp.go | 30 ++++++++++++++++++------------ cgroups/systemd/apply_systemd.go | 9 ++++----- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/api_temp.go b/api_temp.go index be57fbf64..9b2c52077 100644 --- a/api_temp.go +++ b/api_temp.go @@ -5,6 +5,7 @@ package libcontainer import ( "github.com/docker/libcontainer/cgroups/fs" + "github.com/docker/libcontainer/cgroups/systemd" "github.com/docker/libcontainer/network" ) @@ -12,17 +13,22 @@ import ( // DEPRECATED: The below portions are only to be used during the transition to the official API. // Returns all available stats for the given container. func GetStats(container *Config, state *State) (*ContainerStats, error) { - var containerStats ContainerStats - stats, err := fs.GetStats(container.Cgroups) - if err != nil { - return &containerStats, err - } - containerStats.CgroupStats = stats - networkStats, err := network.GetStats(&state.NetworkState) - if err != nil { - return &containerStats, err - } - containerStats.NetworkStats = networkStats + var ( + err error + stats = &ContainerStats{} + ) - return &containerStats, nil + if systemd.UseSystemd() { + stats.CgroupStats, err = systemd.GetStats(container.Cgroups) + } else { + stats.CgroupStats, err = fs.GetStats(container.Cgroups) + } + + if err != nil { + return stats, err + } + + stats.NetworkStats, err = network.GetStats(&state.NetworkState) + + return stats, err } diff --git a/cgroups/systemd/apply_systemd.go b/cgroups/systemd/apply_systemd.go index 92d8328e8..ea3a53349 100644 --- a/cgroups/systemd/apply_systemd.go +++ b/cgroups/systemd/apply_systemd.go @@ -32,7 +32,7 @@ var ( connLock sync.Mutex theConn *systemd1.Conn hasStartTransientUnit bool - subsystems = map[string]subsystem{ + subsystems = map[string]subsystem{ "devices": &fs.DevicesGroup{}, "memory": &fs.MemoryGroup{}, "cpu": &fs.CpuGroup{}, @@ -417,15 +417,14 @@ func getUnitName(c *cgroups.Cgroup) string { * http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/#readingaccountinginformation. */ func GetStats(c *cgroups.Cgroup) (*cgroups.Stats, error) { - var subsystemPath string - var err error - stats := cgroups.NewStats() for sysname, sys := range subsystems { - if subsystemPath, err = getSubsystemPath(c, sysname); err != nil { + subsystemPath, err := getSubsystemPath(c, sysname) + if err != nil { return nil, err } + if err := sys.GetStats(subsystemPath, stats); err != nil { return nil, err }