func GetStatsCgroupOnly(cgroup *cgroups.Cgroup) (*info.ContainerStats, error) { s, err := cgroupfs.GetStats(cgroup) if err != nil { return nil, err } return toContainerStats(&libcontainer.ContainerStats{CgroupStats: s}), nil }
func (self *dockerContainerHandler) GetStats() (stats *info.ContainerStats, err error) { if !self.isDockerContainer() { // Return empty stats for root containers. stats = new(info.ContainerStats) stats.Timestamp = time.Now() return } mi, err := self.machineInfoFactory.GetMachineInfo() if err != nil { return } parent, id, err := self.splitName() if err != nil { return } cg := &cgroups.Cgroup{ Parent: parent, Name: id, } s, err := fs.GetStats(cg) if err != nil { return } stats = libcontainerToContainerStats(s, mi) return }
func (self *dockerContainerHandler) GetStats() (stats *info.ContainerStats, err error) { if !self.isDockerContainer() { // Return empty stats for root containers. stats = new(info.ContainerStats) stats.Timestamp = time.Now() return } mi, err := self.machineInfoFactory.GetMachineInfo() if err != nil { return } parent, id, err := self.splitName() if err != nil { return } cg := &cgroups.Cgroup{ Parent: parent, Name: id, } // TODO(vmarmol): Use libcontainer's Stats() in the new API when that is ready. // Use systemd paths if systemd is being used. var s *cgroups.Stats if systemd.UseSystemd() { s, err = systemd.GetStats(cg) } else { s, err = fs.GetStats(cg) } if err != nil { return } stats = libcontainerToContainerStats(s, mi) return }
// 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. // Returns all available stats for the given container. func GetStats(container *Config, state *State) (stats *ContainerStats, err error) { stats = &ContainerStats{} if stats.CgroupStats, err = fs.GetStats(state.CgroupPaths); err != nil { return stats, err } stats.NetworkStats, err = network.GetStats(&state.NetworkState) return stats, err }
// returns the container stats in json format. func getContainerStats(container *libcontainer.Container) (string, error) { stats, err := fs.GetStats(container.Cgroups) if err != nil { return "", err } out, err := json.MarshalIndent(stats, "", "\t") if err != nil { return "", err } return string(out), nil }
// Get stats of the specified container func GetStats(cgroup *cgroups.Cgroup, state *libcontainer.State) (*info.ContainerStats, error) { // TODO(vmarmol): Use libcontainer's Stats() in the new API when that is ready. stats := &libcontainer.ContainerStats{} var err error stats.CgroupStats, err = cgroupfs.GetStats(cgroup) if err != nil { return &info.ContainerStats{}, err } stats.NetworkStats, err = network.GetStats(&state.NetworkState) return toContainerStats(stats), nil }
// 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 return &containerStats, nil }
func statsAction(context *cli.Context) { config, err := getConfig(context) if err != nil { log.Fatal(err) } stats, err := fs.GetStats(config) if err != nil { log.Fatal(err) } out, err := json.MarshalIndent(stats, "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("Usage stats for '%s':\n %v\n", config.Name, string(out)) }
// 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. // Returns all available stats for the given container. func GetStats(container *Config, state *State) (*ContainerStats, error) { var ( err error stats = &ContainerStats{} ) 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 }