diff --git a/cmd/root.go b/cmd/root.go index b97fe285..f69d50a6 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -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 { diff --git a/internal/client/metrics.go b/internal/client/metrics.go index 887d5b84..24aabb01 100644 --- a/internal/client/metrics.go +++ b/internal/client/metrics.go @@ -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. diff --git a/internal/dao/container.go b/internal/dao/container.go index c36c4c26..60a8ac3c 100644 --- a/internal/dao/container.go +++ b/internal/dao/container.go @@ -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) } } } diff --git a/internal/dao/node.go b/internal/dao/node.go index 17c33f25..c821fdc1 100644 --- a/internal/dao/node.go +++ b/internal/dao/node.go @@ -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]) diff --git a/internal/dao/pod.go b/internal/dao/pod.go index 98ca8bfb..cff6cbf3 100644 --- a/internal/dao/pod.go +++ b/internal/dao/pod.go @@ -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 { diff --git a/internal/ui/config.go b/internal/ui/config.go index 53115f06..cc4f69e3 100644 --- a/internal/ui/config.go +++ b/internal/ui/config.go @@ -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 } diff --git a/internal/ui/indicator.go b/internal/ui/indicator.go index 54a25bfc..5c89fbba 100644 --- a/internal/ui/indicator.go +++ b/internal/ui/indicator.go @@ -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), )) }) } diff --git a/internal/view/node.go b/internal/view/node.go index 96643d48..4d69e677 100644 --- a/internal/view/node.go +++ b/internal/view/node.go @@ -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) } diff --git a/internal/view/pod.go b/internal/view/pod.go index a7100ac3..300feea9 100644 --- a/internal/view/pod.go +++ b/internal/view/pod.go @@ -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()) }