// Info returns some info about the cluster, like nb or containers / images func (c *Cluster) Info() [][]string { info := [][]string{ {"\bStrategy", c.scheduler.Strategy()}, {"\bFilters", c.scheduler.Filters()}, {"\bNodes", fmt.Sprintf("%d", len(c.engines))}, } engines := c.listEngines() sort.Sort(cluster.EngineSorter(engines)) for _, engine := range engines { info = append(info, []string{engine.Name, engine.Addr}) info = append(info, []string{" └ Containers", fmt.Sprintf("%d", len(engine.Containers()))}) info = append(info, []string{" └ Reserved CPUs", fmt.Sprintf("%d / %d", engine.UsedCpus(), engine.TotalCpus())}) info = append(info, []string{" └ Reserved Memory", fmt.Sprintf("%s / %s", units.BytesSize(float64(engine.UsedMemory())), units.BytesSize(float64(engine.TotalMemory())))}) labels := make([]string, 0, len(engine.Labels)) for k, v := range engine.Labels { labels = append(labels, k+"="+v) } sort.Strings(labels) info = append(info, []string{" └ Labels", fmt.Sprintf("%s", strings.Join(labels, ", "))}) } return info }
// Info returns some info about the cluster, like nb or containers / images func (c *Cluster) Info() [][]string { info := [][]string{ {"\bStrategy", c.scheduler.Strategy()}, {"\bFilters", c.scheduler.Filters()}, {"\bNodes", fmt.Sprintf("%d", len(c.engines))}, } engines := c.listEngines() sort.Sort(cluster.EngineSorter(engines)) for _, engine := range engines { info = append(info, []string{engine.Name, engine.Addr}) info = append(info, []string{" └ Status", engine.Status()}) info = append(info, []string{" └ Containers", fmt.Sprintf("%d", len(engine.Containers()))}) info = append(info, []string{" └ Reserved CPUs", fmt.Sprintf("%d / %d", engine.UsedCpus(), engine.TotalCpus())}) info = append(info, []string{" └ Reserved Memory", fmt.Sprintf("%s / %s", units.BytesSize(float64(engine.UsedMemory())), units.BytesSize(float64(engine.TotalMemory())))}) labels := make([]string, 0, len(engine.Labels)) for k, v := range engine.Labels { labels = append(labels, k+"="+v) } sort.Strings(labels) info = append(info, []string{" └ Labels", fmt.Sprintf("%s", strings.Join(labels, ", "))}) errMsg := engine.ErrMsg() if len(errMsg) == 0 { errMsg = "(none)" } info = append(info, []string{" └ Error", errMsg}) info = append(info, []string{" └ UpdatedAt", engine.UpdatedAt().UTC().Format(time.RFC3339)}) } return info }
// Info returns some info about the cluster, like nb or containers / images func (c *Cluster) Info() [][2]string { info := [][2]string{ {"Strategy", c.scheduler.Strategy()}, {"Filters", c.scheduler.Filters()}, {"Nodes", fmt.Sprintf("%d", len(c.engines)+len(c.pendingEngines))}, } engines := c.listEngines() sort.Sort(cluster.EngineSorter(engines)) for _, engine := range engines { engineName := "(unknown)" if engine.Name != "" { engineName = engine.Name } info = append(info, [2]string{" " + engineName, engine.Addr}) info = append(info, [2]string{" └ ID", engine.ID}) info = append(info, [2]string{" └ Status", engine.Status()}) // if engine's status is healthy, show container details of the node if engine.IsHealthy() { var paused, running, stopped int = 0, 0, 0 for _, c := range engine.Containers() { if c.Info.State.Paused { paused++ } else if c.Info.State.Running { running++ } else { stopped++ } } info = append(info, [2]string{" └ Containers", fmt.Sprintf("%d (%d Running, %d Paused, %d Stopped)", len(engine.Containers()), running, paused, stopped)}) } else { info = append(info, [2]string{" └ Containers", fmt.Sprintf("%d", len(engine.Containers()))}) } info = append(info, [2]string{" └ Reserved CPUs", fmt.Sprintf("%d / %d", engine.UsedCpus(), engine.TotalCpus())}) info = append(info, [2]string{" └ Reserved Memory", fmt.Sprintf("%s / %s", units.BytesSize(float64(engine.UsedMemory())), units.BytesSize(float64(engine.TotalMemory())))}) labels := make([]string, 0, len(engine.Labels)) for k, v := range engine.Labels { labels = append(labels, k+"="+v) } sort.Strings(labels) info = append(info, [2]string{" └ Labels", fmt.Sprintf("%s", strings.Join(labels, ", "))}) errMsg := engine.ErrMsg() if len(errMsg) != 0 { info = append(info, [2]string{" └ Error", errMsg}) } info = append(info, [2]string{" └ UpdatedAt", engine.UpdatedAt().UTC().Format(time.RFC3339)}) info = append(info, [2]string{" └ ServerVersion", engine.Version}) } return info }