// This method takes a container's absolute path and returns the stats for the // container. The container's absolute path refers to its hierarchy in the // cgroup file system. e.g. The root container, which represents the whole // machine, has path "/"; all docker containers have path "/docker/<docker id>" func (kl *Kubelet) statsFromContainerPath(containerPath string) (*api.ContainerStats, error) { info, err := kl.CadvisorClient.ContainerInfo(containerPath) if err != nil { return nil, err } // When the stats data for the container is not available yet. if info.StatsPercentiles == nil { return nil, nil } ret := new(api.ContainerStats) ret.MaxMemoryUsage = info.StatsPercentiles.MaxMemoryUsage if len(info.StatsPercentiles.CpuUsagePercentiles) > 0 { percentiles := make([]api.Percentile, len(info.StatsPercentiles.CpuUsagePercentiles)) for i, p := range info.StatsPercentiles.CpuUsagePercentiles { percentiles[i].Percentage = p.Percentage percentiles[i].Value = p.Value } ret.CpuUsagePercentiles = percentiles } if len(info.StatsPercentiles.MemoryUsagePercentiles) > 0 { percentiles := make([]api.Percentile, len(info.StatsPercentiles.MemoryUsagePercentiles)) for i, p := range info.StatsPercentiles.MemoryUsagePercentiles { percentiles[i].Percentage = p.Percentage percentiles[i].Value = p.Value } ret.MemoryUsagePercentiles = percentiles } return ret, nil }
func (kl *Kubelet) GetContainerStats(name string) (*api.ContainerStats, error) { if kl.CadvisorClient == nil { return nil, nil } id, found, err := kl.GetContainerID(name) if err != nil || !found { return nil, err } info, err := kl.CadvisorClient.ContainerInfo(fmt.Sprintf("/docker/%v", id)) if err != nil { return nil, err } // When the stats data for the container is not available yet. if info.StatsPercentiles == nil { return nil, nil } ret := new(api.ContainerStats) ret.MaxMemoryUsage = info.StatsPercentiles.MaxMemoryUsage if len(info.StatsPercentiles.CpuUsagePercentiles) > 0 { percentiles := make([]api.Percentile, len(info.StatsPercentiles.CpuUsagePercentiles)) for i, p := range info.StatsPercentiles.CpuUsagePercentiles { percentiles[i].Percentage = p.Percentage percentiles[i].Value = p.Value } ret.CpuUsagePercentiles = percentiles } if len(info.StatsPercentiles.MemoryUsagePercentiles) > 0 { percentiles := make([]api.Percentile, len(info.StatsPercentiles.MemoryUsagePercentiles)) for i, p := range info.StatsPercentiles.MemoryUsagePercentiles { percentiles[i].Percentage = p.Percentage percentiles[i].Value = p.Value } ret.MemoryUsagePercentiles = percentiles } return ret, nil }