Added Ports information to the expanded view

This commit is contained in:
Kenan Rhoton
2017-04-04 12:58:32 +02:00
committed by Kenan Rhoton
parent d81d10ec27
commit b2165b6a29
4 changed files with 90 additions and 8 deletions

View File

@ -18,6 +18,7 @@ type Expanded struct {
Cpu *Cpu Cpu *Cpu
Mem *Mem Mem *Mem
IO *IO IO *IO
Ports *Ports
X, Y int X, Y int
Width int Width int
} }
@ -32,6 +33,7 @@ func NewExpanded(id string) *Expanded {
Cpu: NewCpu(), Cpu: NewCpu(),
Mem: NewMem(), Mem: NewMem(),
IO: NewIO(), IO: NewIO(),
Ports: NewPorts(),
Width: ui.TermWidth(), Width: ui.TermWidth(),
} }
} }
@ -60,6 +62,7 @@ func (e *Expanded) SetMetrics(m metrics.Metrics) {
e.Net.Update(m.NetRx, m.NetTx) e.Net.Update(m.NetRx, m.NetTx)
e.Mem.Update(int(m.MemUsage), int(m.MemLimit)) e.Mem.Update(int(m.MemUsage), int(m.MemLimit))
e.IO.Update(m.IOBytesRead, m.IOBytesWrite) e.IO.Update(m.IOBytesRead, m.IOBytesWrite)
e.Ports.Update(m.PortsExposed, m.PortsOpen)
} }
// Return total column height // Return total column height
@ -69,6 +72,7 @@ func (e *Expanded) GetHeight() (h int) {
h += e.Cpu.Height h += e.Cpu.Height
h += e.Mem.Height h += e.Mem.Height
h += e.IO.Height h += e.IO.Height
h += e.Ports.Height
return h return h
} }
@ -106,6 +110,7 @@ func (e *Expanded) Buffer() ui.Buffer {
buf.Merge(e.Mem.Buffer()) buf.Merge(e.Mem.Buffer())
buf.Merge(e.Net.Buffer()) buf.Merge(e.Net.Buffer())
buf.Merge(e.IO.Buffer()) buf.Merge(e.IO.Buffer())
buf.Merge(e.Ports.Buffer())
return buf return buf
} }
@ -113,6 +118,7 @@ func (e *Expanded) all() []ui.GridBufferer {
return []ui.GridBufferer{ return []ui.GridBufferer{
e.Info, e.Info,
e.Cpu, e.Cpu,
e.Ports,
e.Mem, e.Mem,
e.Net, e.Net,
e.IO, e.IO,

View File

@ -0,0 +1,50 @@
package expanded
import (
"strconv"
"strings"
ui "github.com/gizak/termui"
)
type Ports struct {
*ui.Table
Exposed []int
Open [][]int
}
func NewPorts() *Ports {
t := ui.NewTable()
t.BorderLabel = "Ports"
t.Height = 4
t.Width = colWidth[0]
t.FgColor = ui.ThemeAttr("par.text.fg")
t.Separator = false
p := &Ports{t, nil, nil}
return p
}
func (p *Ports) Update(exposed []int64, open [][]int64) {
p.Rows = [][]string{}
exp_string := ""
for i, exp := range exposed {
if i == 0 {
exp_string = strconv.Itoa(int(exp))
} else {
exp_string = strings.Join([]string{exp_string, strconv.Itoa(int(exp))}, ", ")
}
}
p.Rows = append(p.Rows, []string{"Exposed: ", exp_string})
open_string := ""
for i, op := range open {
ported := strings.Join([]string{strconv.Itoa(int(op[0])), strconv.Itoa(int(op[1]))}, " -> ")
if i == 0 {
open_string = ported
} else {
open_string = strings.Join([]string{open_string, ported}, ", ")
}
}
p.Rows = append(p.Rows, []string{"Open: ", open_string})
}

View File

@ -46,6 +46,7 @@ func (c *Docker) Start() {
c.ReadCPU(s) c.ReadCPU(s)
c.ReadMem(s) c.ReadMem(s)
c.ReadNet(s) c.ReadNet(s)
c.ReadPorts()
c.ReadIO(s) c.ReadIO(s)
c.stream <- c.Metrics c.stream <- c.Metrics
} }
@ -89,6 +90,27 @@ func (c *Docker) ReadMem(stats *api.Stats) {
c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100)
} }
func (c *Docker) ReadPorts() {
containers, err := c.client.ListContainers(api.ListContainersOptions{All: true})
if err != nil {
log.Infof("Error gathering containers")
return
}
for _, container := range containers {
if container.ID == c.id {
c.PortsOpen = [][]int64{}
c.PortsExposed = []int64{}
for _, port := range container.Ports {
if port.PublicPort > 0 {
c.PortsOpen = append(c.PortsOpen, []int64{port.PrivatePort, port.PublicPort})
} else {
c.PortsExposed = append(c.PortsExposed, port.PrivatePort)
}
}
}
}
}
func (c *Docker) ReadNet(stats *api.Stats) { func (c *Docker) ReadNet(stats *api.Stats) {
var rx, tx int64 var rx, tx int64
for _, network := range stats.Networks { for _, network := range stats.Networks {

View File

@ -18,18 +18,22 @@ type Metrics struct {
IOBytesRead int64 IOBytesRead int64
IOBytesWrite int64 IOBytesWrite int64
Pids int Pids int
PortsExposed []int64
PortsOpen [][]int64
} }
func NewMetrics() Metrics { func NewMetrics() Metrics {
return Metrics{ return Metrics{
CPUUtil: -1, CPUUtil: -1,
NetTx: -1, NetTx: -1,
NetRx: -1, NetRx: -1,
MemUsage: -1, MemUsage: -1,
MemPercent: -1, MemPercent: -1,
IOBytesRead: -1, IOBytesRead: -1,
IOBytesWrite: -1, IOBytesWrite: -1,
Pids: -1, Pids: -1,
PortsExposed: nil,
PortsOpen: nil,
} }
} }