fix metrics update

mine
derailed 2020-01-25 15:03:24 -07:00
parent 8fedc42304
commit 7d703ba434
9 changed files with 30 additions and 51 deletions

View File

@ -48,7 +48,7 @@ func init() {
if err := flag.Set("log_file", config.K9sLogs); err != nil {
log.Error().Err(err)
}
if err := flag.Set("stderrthreshold", "fatal"); err != nil {
if err := flag.Set("stderrthreshold", "error"); err != nil {
log.Error().Err(err)
}
if err := flag.Set("alsologtostderr", falseFlag); err != nil {

View File

@ -99,6 +99,10 @@ func (m *MetricsServer) FetchNodesMetrics() (*mv1beta1.NodeMetricsList, error) {
// FetchPodsMetrics return all metrics for pods in a given namespace.
func (m *MetricsServer) FetchPodsMetrics(ns string) (*mv1beta1.PodMetricsList, error) {
var mx mv1beta1.PodMetricsList
if m.Connection == nil {
return &mx, fmt.Errorf("no client connection")
}
if !m.HasMetrics() {
return &mx, fmt.Errorf("No metrics-server detected on cluster")
}
@ -123,12 +127,16 @@ func (m *MetricsServer) FetchPodsMetrics(ns string) (*mv1beta1.PodMetricsList, e
}
// FetchPodMetrics return all metrics for pods in a given namespace.
func (m *MetricsServer) FetchPodMetrics(ns, sel string) (*mv1beta1.PodMetrics, error) {
func (m *MetricsServer) FetchPodMetrics(fqn string) (*mv1beta1.PodMetrics, error) {
var mx mv1beta1.PodMetrics
if m.Connection == nil {
return &mx, fmt.Errorf("no client connection")
}
if !m.HasMetrics() {
return &mx, fmt.Errorf("No metrics-server detected on cluster")
}
ns, _ := Namespaced(fqn)
if ns == NamespaceAll {
ns = AllNamespaces
}
@ -145,7 +153,7 @@ func (m *MetricsServer) FetchPodMetrics(ns, sel string) (*mv1beta1.PodMetrics, e
return &mx, err
}
return client.MetricsV1beta1().PodMetricses(ns).Get(sel, metav1.GetOptions{})
return client.MetricsV1beta1().PodMetricses(ns).Get(fqn, metav1.GetOptions{})
}
// PodsMetrics retrieves metrics for all pods in a given namespace.

View File

@ -38,15 +38,14 @@ func (c *Container) List(ctx context.Context, _ string) ([]runtime.Object, error
return nil, err
}
ns, _ := client.Namespaced(fqn)
var pmx *mv1beta1.PodMetrics
if c.Client().HasMetrics() {
mx := client.NewMetricsServer(c.Client())
if c.Client() != nil {
var err error
pmx, err = mx.FetchPodMetrics(ns, po.Name)
pmx, err = mx.FetchPodMetrics(fqn)
if err != nil {
log.Warn().Err(err).Msgf("No metrics found for pod %q:%q", ns, po.Name)
log.Warn().Err(err).Msgf("No metrics found for pod %q", fqn)
}
}
}

View File

@ -36,16 +36,16 @@ func (n *Node) List(ctx context.Context, ns string) ([]runtime.Object, error) {
log.Warn().Msgf("No label selector found in context")
}
nmx, ok := ctx.Value(internal.KeyMetrics).(*mv1beta1.NodeMetricsList)
if !ok {
log.Warn().Msgf("No node metrics available in context")
mx := client.NewMetricsServer(n.Client())
nmx, err := mx.FetchNodesMetrics()
if err != nil {
log.Warn().Err(err).Msgf("No node metrics")
}
nn, err := FetchNodes(n.Factory, labels)
if err != nil {
return nil, err
}
oo := make([]runtime.Object, len(nn.Items))
for i, no := range nn.Items {
o, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&nn.Items[i])

View File

@ -50,9 +50,13 @@ func (p *Pod) Get(ctx context.Context, path string) (runtime.Object, error) {
}
// No Deal!
pmx, _ := ctx.Value(internal.KeyMetrics).(*mv1beta1.PodMetricsList)
mx := client.NewMetricsServer(p.Client())
pmx, err := mx.FetchPodMetrics(path)
if err != nil {
log.Warn().Err(err).Msgf("No pods metrics")
}
return &render.PodWithMetrics{Raw: u, MX: podMetricsFor(o, pmx)}, nil
return &render.PodWithMetrics{Raw: u, MX: pmx}, nil
}
// List returns a collection of nodes.
@ -72,8 +76,11 @@ func (p *Pod) List(ctx context.Context, ns string) ([]runtime.Object, error) {
return oo, err
}
// No Deal!
pmx, _ := ctx.Value(internal.KeyMetrics).(*mv1beta1.PodMetricsList)
mx := client.NewMetricsServer(p.Client())
pmx, err := mx.FetchPodsMetrics(ns)
if err != nil {
log.Warn().Err(err).Msgf("No pods metrics")
}
var res []runtime.Object
for _, o := range oo {

View File

@ -89,7 +89,6 @@ func (c *Configurator) RefreshStyles(context string) {
if err := c.Styles.Load(clusterSkins); err != nil {
log.Info().Msgf("No context specific skin file found -- %s", clusterSkins)
} else {
log.Debug().Msgf("Found context skins %s", clusterSkins)
c.updateStyles(clusterSkins)
return
}

View File

@ -56,8 +56,8 @@ func (s *StatusIndicator) ClusterInfoUpdated(data model.ClusterMeta) {
data.Cluster,
data.User,
data.K8sVer,
render.AsPerc(data.Cpu)+"%",
render.AsPerc(data.Mem)+"%",
render.AsPerc(data.Cpu),
render.AsPerc(data.Mem),
))
})
}

View File

@ -1,14 +1,10 @@
package view
import (
"context"
"github.com/derailed/k9s/internal"
"github.com/derailed/k9s/internal/client"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/ui"
"github.com/gdamore/tcell"
"github.com/rs/zerolog/log"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@ -24,7 +20,6 @@ func NewNode(gvr client.GVR) ResourceViewer {
}
n.SetBindKeysFn(n.bindKeys)
n.GetTable().SetEnterFn(n.showPods)
n.SetContextFn(n.nodeContext)
return &n
}
@ -40,20 +35,6 @@ func (n *Node) bindKeys(aa ui.KeyActions) {
})
}
func (n *Node) nodeContext(ctx context.Context) context.Context {
if !n.App().Conn().HasMetrics() {
return ctx
}
mx := client.NewMetricsServer(n.App().factory.Client())
nmx, err := mx.FetchNodesMetrics()
if err != nil {
log.Warn().Err(err).Msgf("No node metrics")
}
return context.WithValue(ctx, internal.KeyMetrics, nmx)
}
func (n *Node) showPods(app *App, _ ui.Tabular, _, path string) {
showPods(app, n.GetTable().GetSelectedItem(), "", "spec.nodeName="+path)
}

View File

@ -32,7 +32,6 @@ func NewPod(gvr client.GVR) ResourceViewer {
p.SetBindKeysFn(p.bindKeys)
p.GetTable().SetEnterFn(p.showContainers)
p.GetTable().SetColorerFn(render.Pod{}.ColorerFunc())
p.SetContextFn(p.podContext)
return &p
}
@ -64,20 +63,6 @@ func (p *Pod) showContainers(app *App, model ui.Tabular, gvr, path string) {
}
}
func (p *Pod) podContext(ctx context.Context) context.Context {
ns, ok := ctx.Value(internal.KeyNamespace).(string)
if !ok {
log.Error().Err(fmt.Errorf("Expecting context namespace"))
}
mx := client.NewMetricsServer(p.App().factory.Client())
nmx, err := mx.FetchPodsMetrics(ns)
if err != nil {
log.Warn().Err(err).Msgf("No pods metrics")
}
return context.WithValue(ctx, internal.KeyMetrics, nmx)
}
func (p *Pod) coContext(ctx context.Context) context.Context {
return context.WithValue(ctx, internal.KeyPath, p.GetTable().GetSelectedItem())
}