From 407e8fca0e3b32b3c86cffd3be1a33ba5d29dda8 Mon Sep 17 00:00:00 2001 From: Bradley Cicenas Date: Tue, 27 Dec 2016 02:24:02 +0000 Subject: [PATCH] add names column to multiview --- container.go | 8 ++++++-- grid.go | 57 +++++++++++++++++----------------------------------- main.go | 20 ++++-------------- widgets.go | 19 ++++++++++++++++-- 4 files changed, 45 insertions(+), 59 deletions(-) diff --git a/container.go b/container.go index 60a462d..74516c6 100644 --- a/container.go +++ b/container.go @@ -2,24 +2,28 @@ package main import ( "fmt" + "strings" "github.com/fsouza/go-dockerclient" ) type Container struct { id string + name string done chan bool stats chan *docker.Stats widgets *Widgets reader *StatReader } -func NewContainer(cid string) *Container { +func NewContainer(cid string, names []string) *Container { + name := strings.Join(names, ",") return &Container{ id: cid, + name: name, done: make(chan bool), stats: make(chan *docker.Stats), - widgets: NewWidgets(cid), + widgets: NewWidgets(cid, name), reader: &StatReader{}, } } diff --git a/grid.go b/grid.go index ad7c5f0..5593bc5 100644 --- a/grid.go +++ b/grid.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "sort" ui "github.com/gizak/termui" @@ -11,8 +12,8 @@ type Grid struct { containers map[string]*Container } -func (g *Grid) AddContainer(id string) { - g.containers[id] = NewContainer(id) +func (g *Grid) AddContainer(id string, names []string) { + g.containers[id] = NewContainer(id, names) } // Return number of containers/rows @@ -48,52 +49,30 @@ func (g *Grid) Cursor() { func (g *Grid) Rows() (rows []*ui.Row) { for _, cid := range g.CIDs() { c := g.containers[cid] - rows = append(rows, ui.NewRow( - ui.NewCol(1, 0, c.widgets.cid), - ui.NewCol(2, 0, c.widgets.cpu), - ui.NewCol(2, 0, c.widgets.memory), - ui.NewCol(2, 0, c.widgets.net), - )) + rows = append(rows, c.widgets.MakeRow()) } return rows } func header() *ui.Row { - // cid - c1 := ui.NewPar(" CID") - c1.Border = false - c1.Height = 2 - c1.Width = 20 - c1.TextFgColor = ui.ColorWhite - - // cpu - c2 := ui.NewPar(" CPU") - c2.Border = false - c2.Height = 2 - c2.Width = 10 - c2.TextFgColor = ui.ColorWhite - - // mem - c3 := ui.NewPar(" MEM") - c3.Border = false - c3.Height = 2 - c3.Width = 10 - c3.TextFgColor = ui.ColorWhite - - // net - c4 := ui.NewPar(" NET RX/TX") - c4.Border = false - c4.Height = 2 - c4.Width = 10 - c4.TextFgColor = ui.ColorWhite return ui.NewRow( - ui.NewCol(1, 0, c1), - ui.NewCol(2, 0, c2), - ui.NewCol(2, 0, c3), - ui.NewCol(2, 0, c4), + ui.NewCol(1, 0, headerPar("CID")), + ui.NewCol(2, 0, headerPar("CPU")), + ui.NewCol(2, 0, headerPar("MEM")), + ui.NewCol(2, 0, headerPar("NET RX/TX")), + ui.NewCol(2, 0, headerPar("NAMES")), ) } +func headerPar(s string) *ui.Par { + p := ui.NewPar(fmt.Sprintf(" %s", s)) + p.Border = false + p.Height = 2 + p.Width = 20 + p.TextFgColor = ui.ColorWhite + return p +} + func Display(g *Grid) { if err := ui.Init(); err != nil { panic(err) diff --git a/main.go b/main.go index a151a58..f473e8f 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,7 @@ import ( "github.com/fsouza/go-dockerclient" ) -func runningCIDs(client *docker.Client) (running []string) { +func getContainers(client *docker.Client) []docker.APIContainers { filters := make(map[string][]string) filters["status"] = []string{"running"} opts := docker.ListContainersOptions{ @@ -16,15 +16,10 @@ func runningCIDs(client *docker.Client) (running []string) { if err != nil { panic(err) } - for _, c := range containers { - running = append(running, c.ID[:12]) - } - return running + return containers } func main() { - var containers []string - dockerhost := os.Getenv("DOCKER_HOST") if dockerhost == "" { dockerhost = "unix:///var/run/docker.sock" @@ -35,16 +30,9 @@ func main() { panic(err) } - // Default to all running containers - if len(os.Args) < 2 { - containers = runningCIDs(client) - } else { - containers = os.Args[1:] - } - g := &Grid{0, make(map[string]*Container)} - for _, c := range containers { - g.AddContainer(c) + for _, c := range getContainers(client) { + g.AddContainer(c.ID[:12], c.Names) } for _, c := range g.containers { diff --git a/widgets.go b/widgets.go index 54653ef..831d4b4 100644 --- a/widgets.go +++ b/widgets.go @@ -15,6 +15,16 @@ type Widgets struct { memory *ui.Gauge } +func (w *Widgets) MakeRow() *ui.Row { + return ui.NewRow( + ui.NewCol(1, 0, w.cid), + ui.NewCol(2, 0, w.cpu), + ui.NewCol(2, 0, w.memory), + ui.NewCol(2, 0, w.net), + ui.NewCol(2, 0, w.names), + ) +} + func (w *Widgets) SetCPU(val int) { w.cpu.BarColor = colorScale(val) w.cpu.Label = fmt.Sprintf("%s%%", strconv.Itoa(val)) @@ -36,13 +46,18 @@ func (w *Widgets) SetMem(val int64, limit int64) { w.memory.Label = fmt.Sprintf("%s / %s", byteFormat(val), byteFormat(limit)) } -func NewWidgets(id string) *Widgets { +func NewWidgets(id string, names string) *Widgets { cid := ui.NewPar(id) cid.Border = false cid.Height = 1 cid.Width = 20 cid.TextFgColor = ui.ColorWhite - return &Widgets{cid, mkGauge(), mkGauge(), mkGauge()} + name := ui.NewPar(names) + name.Border = false + name.Height = 1 + name.Width = 20 + name.TextFgColor = ui.ColorWhite + return &Widgets{cid, name, mkGauge(), mkGauge(), mkGauge()} } func mkGauge() *ui.Gauge {