diff --git a/internal/k8s/generic.go b/internal/k8s/generic.go deleted file mode 100644 index fb0c960b..00000000 --- a/internal/k8s/generic.go +++ /dev/null @@ -1,19 +0,0 @@ -package k8s - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -func Get(ns, n, string, kind schema.GroupVersionKind, opts metav1.GetOptions) (runtime.Object, error) { - return nil, nil -} - -func List(ns string, kind schema.GroupVersionKind, opts metav1.ListOptions) (runtime.Object, error) { - return nil, nil -} - -func registrar() map[string]func() { - return map[string]func(){} -} diff --git a/internal/k8s/no.go b/internal/k8s/no.go index cdb5349d..6d41de61 100644 --- a/internal/k8s/no.go +++ b/internal/k8s/no.go @@ -1,9 +1,6 @@ package k8s import ( - "time" - - "github.com/rs/zerolog/log" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -25,10 +22,6 @@ func (n *Node) Get(_, name string) (interface{}, error) { // List all nodes on the cluster. func (n *Node) List(_ string) (Collection, error) { - defer func(t time.Time) { - log.Debug().Msgf("List Node %v", time.Since(t)) - }(time.Now()) - opts := metav1.ListOptions{ LabelSelector: n.labelSelector, FieldSelector: n.fieldSelector, diff --git a/internal/resource/list.go b/internal/resource/list.go index 8f0276da..fb7e21c3 100644 --- a/internal/resource/list.go +++ b/internal/resource/list.go @@ -1,8 +1,8 @@ package resource import ( + "fmt" "reflect" - "time" wa "github.com/derailed/k9s/internal/watch" "github.com/rs/zerolog/log" @@ -231,60 +231,68 @@ func metaFQN(m metav1.ObjectMeta) string { return m.Namespace + "/" + m.Name } +func (l *list) fetchFromStore(m *wa.Meta, ns string) (Columnars, error) { + rr, err := m.List(l.name, ns) + if err != nil { + return nil, err + } + + items := make(Columnars, 0, len(rr)) + for _, r := range rr { + var ( + fqn string + res Columnar + ) + switch o := r.(type) { + case *v1.Node: + fqn = metaFQN(o.ObjectMeta) + res = l.resource.New(r) + nmx, err := m.Get(wa.NodeMXIndex, fqn) + if err != nil { + log.Warn().Err(err).Msg("NodeMetrics") + } + if mx, ok := nmx.(*mv1beta1.NodeMetrics); ok { + res.SetNodeMetrics(mx) + } + case *v1.Pod: + fqn = metaFQN(o.ObjectMeta) + res = l.resource.New(r) + pmx, err := m.Get(wa.PodMXIndex, fqn) + if err != nil { + log.Warn().Err(err).Msg("PodMetrics") + } + if mx, ok := pmx.(*mv1beta1.PodMetrics); ok { + res.SetPodMetrics(mx) + } + case v1.Container: + fqn = ns + res = l.resource.New(r) + pmx, err := m.Get(wa.PodMXIndex, fqn) + if err != nil { + log.Warn().Err(err).Msg("PodMetrics") + } + if mx, ok := pmx.(*mv1beta1.PodMetrics); ok { + res.SetPodMetrics(mx) + } + default: + return items, fmt.Errorf("No informer matched %s:%s", l.name, ns) + } + items = append(items, res) + } + + return items, nil +} + // Reconcile previous vs current state and emits delta events. func (l *list) Reconcile(m *wa.Meta, path *string) error { - defer func(t time.Time) { - log.Debug().Msgf("Reconcile %v", time.Since(t)) - }(time.Now()) - ns := l.namespace if path != nil { ns = *path } - var ( - items Columnars - err error - ) - rr, err := m.List(l.name, ns) - if err == nil { - for _, r := range rr { - var fqn string - var res Columnar - switch o := r.(type) { - case *v1.Node: - fqn = metaFQN(o.ObjectMeta) - res = l.resource.New(r) - nmx, err := m.Get(wa.NodeMXIndex, fqn) - if err != nil { - log.Warn().Err(err).Msg("NodeMetrics") - } - if mx, ok := nmx.(*mv1beta1.NodeMetrics); ok { - res.SetNodeMetrics(mx) - } - case *v1.Pod: - fqn = metaFQN(o.ObjectMeta) - res = l.resource.New(r) - pmx, err := m.Get(wa.PodMXIndex, fqn) - if err != nil { - log.Warn().Err(err).Msg("PodMetrics") - } - if mx, ok := pmx.(*mv1beta1.PodMetrics); ok { - res.SetPodMetrics(mx) - } - case v1.Container: - fqn = ns - res = l.resource.New(r) - pmx, err := m.Get(wa.PodMXIndex, fqn) - if err != nil { - log.Warn().Err(err).Msg("PodMetrics") - } - if mx, ok := pmx.(*mv1beta1.PodMetrics); ok { - res.SetPodMetrics(mx) - } - } - items = append(items, res) - } + var items Columnars + if rr, err := l.fetchFromStore(m, ns); err == nil { + items = rr } else { log.Debug().Msg("Standard load") items, err = l.resource.List(l.namespace) diff --git a/internal/resource/pod.go b/internal/resource/pod.go index 34fb4f1d..f97ed950 100644 --- a/internal/resource/pod.go +++ b/internal/resource/pod.go @@ -171,10 +171,6 @@ func (r *Pod) Logs(c chan<- string, ns, n, co string, lines int64, prev bool) (c // List resources for a given namespace. func (r *Pod) List(ns string) (Columnars, error) { - defer func(t time.Time) { - log.Debug().Msgf("List Pod %v", time.Since(t)) - }(time.Now()) - pods, err := r.Resource.List(ns) if err != nil { return nil, err diff --git a/internal/views/cluster_info.go b/internal/views/cluster_info.go index 1ae3c9e3..5366af19 100644 --- a/internal/views/cluster_info.go +++ b/internal/views/cluster_info.go @@ -2,7 +2,6 @@ package views import ( "strings" - "time" "github.com/derailed/k9s/internal/config" "github.com/derailed/k9s/internal/k8s" @@ -92,10 +91,6 @@ func (v *clusterInfoView) infoCell(t string) *tview.TableCell { } func (v *clusterInfoView) refresh() { - defer func(t time.Time) { - log.Debug().Msgf("Cluster Refresh %v", time.Since(t)) - }(time.Now()) - cluster := resource.NewCluster(v.app.conn(), &log.Logger, v.mxs) var row int diff --git a/internal/views/resource.go b/internal/views/resource.go index 756cd6aa..fedd7c1a 100644 --- a/internal/views/resource.go +++ b/internal/views/resource.go @@ -379,11 +379,6 @@ func (v *resourceView) doSwitchNamespace(ns string) { } func (v *resourceView) refresh() { - log.Debug().Msgf("%s", strings.Repeat("-", 80)) - defer func(t time.Time) { - log.Debug().Msgf("Refresh %s %v", v.list.GetName(), time.Since(t)) - }(time.Now()) - if _, ok := v.CurrentPage().Item.(*tableView); !ok { return }