107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
package views
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/derailed/k9s/internal/k8s"
|
|
"github.com/derailed/k9s/internal/resource"
|
|
"github.com/derailed/tview"
|
|
"github.com/gdamore/tcell"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type clusterInfoView struct {
|
|
*tview.Table
|
|
|
|
app *appView
|
|
cluster *resource.Cluster
|
|
}
|
|
|
|
func newInfoView(app *appView) *clusterInfoView {
|
|
return &clusterInfoView{
|
|
app: app,
|
|
Table: tview.NewTable(),
|
|
cluster: resource.NewCluster(app.conn(), &log.Logger, k8s.NewMetricsServer(app.conn())),
|
|
}
|
|
}
|
|
|
|
func (v *clusterInfoView) init() {
|
|
var row int
|
|
v.SetCell(row, 0, v.sectionCell("Context"))
|
|
v.SetCell(row, 1, v.infoCell(v.cluster.ContextName()))
|
|
row++
|
|
|
|
v.SetCell(row, 0, v.sectionCell("Cluster"))
|
|
v.SetCell(row, 1, v.infoCell(v.cluster.ClusterName()))
|
|
row++
|
|
|
|
v.SetCell(row, 0, v.sectionCell("User"))
|
|
v.SetCell(row, 1, v.infoCell(v.cluster.UserName()))
|
|
row++
|
|
|
|
v.SetCell(row, 0, v.sectionCell("K9s Rev"))
|
|
v.SetCell(row, 1, v.infoCell(v.app.version))
|
|
row++
|
|
|
|
rev := v.cluster.Version()
|
|
v.SetCell(row, 0, v.sectionCell("K8s Rev"))
|
|
v.SetCell(row, 1, v.infoCell(rev))
|
|
row++
|
|
|
|
v.SetCell(row, 0, v.sectionCell("CPU"))
|
|
v.SetCell(row, 1, v.infoCell("n/a"))
|
|
v.SetCell(row+1, 0, v.sectionCell("MEM"))
|
|
v.SetCell(row+1, 1, v.infoCell("n/a"))
|
|
v.refresh()
|
|
}
|
|
|
|
func (*clusterInfoView) sectionCell(t string) *tview.TableCell {
|
|
c := tview.NewTableCell(t + ":")
|
|
c.SetAlign(tview.AlignLeft)
|
|
|
|
return c
|
|
}
|
|
|
|
func (*clusterInfoView) infoCell(t string) *tview.TableCell {
|
|
c := tview.NewTableCell(t)
|
|
c.SetExpansion(2)
|
|
c.SetTextColor(tcell.ColorOrange)
|
|
|
|
return c
|
|
}
|
|
|
|
func (v *clusterInfoView) refresh() {
|
|
var row int
|
|
|
|
v.GetCell(row, 1).SetText(v.cluster.ContextName())
|
|
row++
|
|
v.GetCell(row, 1).SetText(v.cluster.ClusterName())
|
|
row++
|
|
v.GetCell(row, 1).SetText(v.cluster.UserName())
|
|
row += 2
|
|
v.GetCell(row, 1).SetText(v.cluster.Version())
|
|
row++
|
|
|
|
nodes, err := v.cluster.FetchNodes()
|
|
if err != nil {
|
|
log.Warn().Msgf("ClusterInfo %s", err)
|
|
return
|
|
}
|
|
mxNodes, err := v.cluster.FetchNodesMetrics()
|
|
if err != nil {
|
|
log.Warn().Msgf("ClusterInfo %s", err)
|
|
return
|
|
}
|
|
|
|
mx := v.cluster.Metrics(nodes, mxNodes)
|
|
c := v.GetCell(row, 1)
|
|
cpu := toPerc(mx.PercCPU)
|
|
stripTxt := strings.Replace(c.Text, plus(), "", 1)
|
|
stripTxt = strings.Replace(stripTxt, minus(), "", 1)
|
|
c.SetText(cpu + deltas(stripTxt, cpu))
|
|
row++
|
|
c = v.GetCell(row, 1)
|
|
mem := toPerc(mx.PercMEM)
|
|
c.SetText(mem + deltas(c.Text, mem))
|
|
}
|