func dockerInfo() (DockerStatus, error) { dockerInfo, err := docker.DockerInfo() if err != nil { return DockerStatus{}, err } versionInfo, err := getVersionInfo() if err != nil { return DockerStatus{}, err } out := DockerStatus{} out.Version = versionInfo.DockerVersion out.KernelVersion = dockerInfo.KernelVersion out.OS = dockerInfo.OperatingSystem out.Hostname = dockerInfo.Name out.RootDir = dockerInfo.DockerRootDir out.Driver = dockerInfo.Driver out.ExecDriver = dockerInfo.ExecutionDriver out.NumImages = dockerInfo.Images out.NumContainers = dockerInfo.Containers out.DriverStatus = make(map[string]string, len(dockerInfo.DriverStatus)) for _, v := range dockerInfo.DriverStatus { out.DriverStatus[v[0]] = v[1] } return out, nil }
func (m *manager) DockerInfo() (DockerStatus, error) { info, err := docker.DockerInfo() if err != nil { return DockerStatus{}, err } versionInfo, err := m.GetVersionInfo() if err != nil { return DockerStatus{}, err } out := DockerStatus{} out.Version = versionInfo.DockerVersion if val, ok := info["KernelVersion"]; ok { out.KernelVersion = val } if val, ok := info["OperatingSystem"]; ok { out.OS = val } if val, ok := info["Name"]; ok { out.Hostname = val } if val, ok := info["DockerRootDir"]; ok { out.RootDir = val } if val, ok := info["Driver"]; ok { out.Driver = val } if val, ok := info["ExecutionDriver"]; ok { out.ExecDriver = val } if val, ok := info["Images"]; ok { n, err := strconv.Atoi(val) if err == nil { out.NumImages = n } } if val, ok := info["Containers"]; ok { n, err := strconv.Atoi(val) if err == nil { out.NumContainers = n } } // cut, trim, cut - Example format: // DriverStatus=[["Root Dir","/var/lib/docker/aufs"],["Backing Filesystem","extfs"],["Dirperm1 Supported","false"]] if val, ok := info["DriverStatus"]; ok { out.DriverStatus = make(map[string]string) val = strings.TrimPrefix(val, "[[") val = strings.TrimSuffix(val, "]]") vals := strings.Split(val, "],[") for _, v := range vals { kv := strings.Split(v, "\",\"") if len(kv) != 2 { continue } else { out.DriverStatus[strings.Trim(kv[0], "\"")] = strings.Trim(kv[1], "\"") } } } return out, nil }
// New takes a memory storage and returns a new manager. func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, maxHousekeepingInterval time.Duration, allowDynamicHousekeeping bool) (Manager, error) { if memoryCache == nil { return nil, fmt.Errorf("manager requires memory storage") } // Detect the container we are running on. selfContainer, err := cgroups.GetThisCgroupDir("cpu") if err != nil { return nil, err } glog.Infof("cAdvisor running in container: %q", selfContainer) dockerInfo, err := docker.DockerInfo() if err != nil { glog.Warningf("Unable to connect to Docker: %v", err) } context := fs.Context{DockerRoot: docker.RootDir(), DockerInfo: dockerInfo} fsInfo, err := fs.NewFsInfo(context) if err != nil { return nil, err } // If cAdvisor was started with host's rootfs mounted, assume that its running // in its own namespaces. inHostNamespace := false if _, err := os.Stat("/rootfs/proc"); os.IsNotExist(err) { inHostNamespace = true } newManager := &manager{ containers: make(map[namespacedContainerName]*containerData), quitChannels: make([]chan error, 0, 2), memoryCache: memoryCache, fsInfo: fsInfo, cadvisorContainer: selfContainer, inHostNamespace: inHostNamespace, startupTime: time.Now(), maxHousekeepingInterval: maxHousekeepingInterval, allowDynamicHousekeeping: allowDynamicHousekeeping, ignoreMetrics: ignoreMetrics.MetricSet, } machineInfo, err := getMachineInfo(sysfs, fsInfo, inHostNamespace) if err != nil { return nil, err } newManager.machineInfo = *machineInfo glog.Infof("Machine: %+v", newManager.machineInfo) versionInfo, err := getVersionInfo() if err != nil { return nil, err } glog.Infof("Version: %+v", *versionInfo) newManager.eventHandler = events.NewEventManager(parseEventsStoragePolicy()) return newManager, nil }
func (m *manager) DockerInfo() (DockerStatus, error) { info, err := docker.DockerInfo() if err != nil { return DockerStatus{}, err } versionInfo, err := m.GetVersionInfo() if err != nil { return DockerStatus{}, err } out := DockerStatus{} out.Version = versionInfo.DockerVersion if val, ok := info["KernelVersion"]; ok { out.KernelVersion = val } if val, ok := info["OperatingSystem"]; ok { out.OS = val } if val, ok := info["Name"]; ok { out.Hostname = val } if val, ok := info["DockerRootDir"]; ok { out.RootDir = val } if val, ok := info["Driver"]; ok { out.Driver = val } if val, ok := info["ExecutionDriver"]; ok { out.ExecDriver = val } if val, ok := info["Images"]; ok { n, err := strconv.Atoi(val) if err == nil { out.NumImages = n } } if val, ok := info["Containers"]; ok { n, err := strconv.Atoi(val) if err == nil { out.NumContainers = n } } if val, ok := info["DriverStatus"]; ok { var driverStatus [][]string err := json.Unmarshal([]byte(val), &driverStatus) if err != nil { return DockerStatus{}, err } out.DriverStatus = make(map[string]string) for _, v := range driverStatus { if len(v) == 2 { out.DriverStatus[v[0]] = v[1] } } } return out, nil }