// Info returns information about the current cluster state. func (c *Cluster) Info() types.Info { info := types.Info{ NodeAddr: c.GetAdvertiseAddress(), } c.mu.RLock() defer c.mu.RUnlock() state := c.currentNodeState() info.LocalNodeState = state.status if state.err != nil { info.Error = state.err.Error() } ctx, cancel := c.getRequestContext() defer cancel() if state.IsActiveManager() { info.ControlAvailable = true swarm, err := c.Inspect() if err != nil { info.Error = err.Error() } // Strip JoinTokens info.Cluster = swarm.ClusterInfo if r, err := state.controlClient.ListNodes(ctx, &swarmapi.ListNodesRequest{}); err == nil { info.Nodes = len(r.Nodes) for _, n := range r.Nodes { if n.ManagerStatus != nil { info.Managers = info.Managers + 1 } } } } if state.swarmNode != nil { for _, r := range state.swarmNode.Remotes() { info.RemoteManagers = append(info.RemoteManagers, types.Peer{NodeID: r.NodeID, Addr: r.Addr}) } info.NodeID = state.swarmNode.NodeID() } return info }
// Info returns information about the current cluster state. func (c *Cluster) Info() types.Info { info := types.Info{ NodeAddr: c.GetAdvertiseAddress(), } c.RLock() defer c.RUnlock() if c.node == nil { info.LocalNodeState = types.LocalNodeStateInactive if c.cancelDelay != nil { info.LocalNodeState = types.LocalNodeStateError } } else { info.LocalNodeState = types.LocalNodeStatePending if c.ready == true { info.LocalNodeState = types.LocalNodeStateActive } } if c.err != nil { info.Error = c.err.Error() } ctx, cancel := c.getRequestContext() defer cancel() if c.isActiveManager() { info.ControlAvailable = true swarm, err := c.Inspect() if err != nil { info.Error = err.Error() } // Strip JoinTokens info.Cluster = swarm.ClusterInfo if r, err := c.client.ListNodes(ctx, &swarmapi.ListNodesRequest{}); err == nil { info.Nodes = len(r.Nodes) for _, n := range r.Nodes { if n.ManagerStatus != nil { info.Managers = info.Managers + 1 } } } } if c.node != nil { for _, r := range c.node.Remotes() { info.RemoteManagers = append(info.RemoteManagers, types.Peer{NodeID: r.NodeID, Addr: r.Addr}) } info.NodeID = c.node.NodeID() } return info }
func (s *DockerServer) infoDocker(w http.ResponseWriter, r *http.Request) { s.cMut.RLock() defer s.cMut.RUnlock() s.iMut.RLock() defer s.iMut.RUnlock() var running, stopped, paused int for _, c := range s.containers { if c.State.Running { running++ } else { stopped++ } if c.State.Paused { paused++ } } var swarmInfo *swarm.Info if s.swarm != nil { swarmInfo = &swarm.Info{ NodeID: s.nodeID, } for _, n := range s.nodes { swarmInfo.RemoteManagers = append(swarmInfo.RemoteManagers, swarm.Peer{ NodeID: n.ID, Addr: n.ManagerStatus.Addr, }) } } envs := map[string]interface{}{ "ID": "AAAA:XXXX:0000:BBBB:AAAA:XXXX:0000:BBBB:AAAA:XXXX:0000:BBBB", "Containers": len(s.containers), "ContainersRunning": running, "ContainersPaused": paused, "ContainersStopped": stopped, "Images": len(s.images), "Driver": "aufs", "DriverStatus": [][]string{}, "SystemStatus": nil, "Plugins": map[string]interface{}{ "Volume": []string{ "local", }, "Network": []string{ "bridge", "null", "host", }, "Authorization": nil, }, "MemoryLimit": true, "SwapLimit": false, "CpuCfsPeriod": true, "CpuCfsQuota": true, "CPUShares": true, "CPUSet": true, "IPv4Forwarding": true, "BridgeNfIptables": true, "BridgeNfIp6tables": true, "Debug": false, "NFd": 79, "OomKillDisable": true, "NGoroutines": 101, "SystemTime": "2016-02-25T18:13:10.25870078Z", "ExecutionDriver": "native-0.2", "LoggingDriver": "json-file", "NEventsListener": 0, "KernelVersion": "3.13.0-77-generic", "OperatingSystem": "Ubuntu 14.04.3 LTS", "OSType": "linux", "Architecture": "x86_64", "IndexServerAddress": "https://index.docker.io/v1/", "RegistryConfig": map[string]interface{}{ "InsecureRegistryCIDRs": []string{}, "IndexConfigs": map[string]interface{}{}, "Mirrors": nil, }, "InitSha1": "e2042dbb0fcf49bb9da199186d9a5063cda92a01", "InitPath": "/usr/lib/docker/dockerinit", "NCPU": 1, "MemTotal": 2099204096, "DockerRootDir": "/var/lib/docker", "HttpProxy": "", "HttpsProxy": "", "NoProxy": "", "Name": "vagrant-ubuntu-trusty-64", "Labels": nil, "ExperimentalBuild": false, "ServerVersion": "1.10.1", "ClusterStore": "", "ClusterAdvertise": "", "Swarm": swarmInfo, } w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(envs) }