k9s/internal/views/cluster_info.go

101 lines
2.2 KiB
Go

package views
import (
"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)
c.SetText(deltas(c.Text, toPerc(mx.PercCPU)))
row++
c = v.GetCell(row, 1)
c.SetText(deltas(c.Text, toPerc(mx.PercMEM)))
}