Skip to content

Commit

Permalink
(cleanup): reuse clients instead of recreating them for each paneler …
Browse files Browse the repository at this point in the history
…type

Signed-off-by: Bryce Palmer <everettraven@gmail.com>
  • Loading branch information
everettraven committed Nov 15, 2023
1 parent 6e96ba5 commit 92f98d9
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 119 deletions.
28 changes: 5 additions & 23 deletions pkg/paneler/item.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ import (
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/dynamic/dynamicinformer"
"k8s.io/client-go/rest"
"k8s.io/client-go/restmapper"
"k8s.io/client-go/tools/cache"
"sigs.k8s.io/yaml"
)
Expand All @@ -34,28 +32,12 @@ type Item struct {
restMapper meta.RESTMapper
}

func NewItem(cfg *rest.Config) (*Item, error) {
client, err := dynamic.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("error creating dynamic client: %w", err)
}

di, err := discovery.NewDiscoveryClientForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("error creating discovery client: %w", err)
}

gr, err := restmapper.GetAPIGroupResources(di)
if err != nil {
return nil, fmt.Errorf("error getting API group resources: %w", err)
}

rm := restmapper.NewDiscoveryRESTMapper(gr)
func NewItem(dynamicClient dynamic.Interface, discoveryClient *discovery.DiscoveryClient, restMapper meta.RESTMapper) *Item {
return &Item{
dynamicClient: client,
discoveryClient: di,
restMapper: rm,
}, nil
dynamicClient: dynamicClient,
discoveryClient: discoveryClient,
restMapper: restMapper,
}
}

func (t *Item) Model(panel types.Panel) (tea.Model, error) {
Expand Down
23 changes: 16 additions & 7 deletions pkg/paneler/paneler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ import (

tea "github.com/charmbracelet/bubbletea"
"github.com/everettraven/buoy/pkg/types"
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/restmapper"
)

type Paneler interface {
Expand All @@ -25,26 +28,32 @@ func (p *paneler) Model(panel types.Panel) (tea.Model, error) {
}

func NewDefaultPaneler(cfg *rest.Config) (Paneler, error) {
dClient, err := dynamic.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("error creating dynamic client: %w", err)
}

kubeClient, err := kubernetes.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("creating kubernetes.Clientset: %w", err)
}

table, err := NewTable(cfg)
di, err := discovery.NewDiscoveryClientForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("creating table paneler: %w", err)
return nil, fmt.Errorf("error creating discovery client: %w", err)
}

item, err := NewItem(cfg)
gr, err := restmapper.GetAPIGroupResources(di)
if err != nil {
return nil, fmt.Errorf("creating item paneler: %w", err)
return nil, fmt.Errorf("error getting API group resources: %w", err)
}
rm := restmapper.NewDiscoveryRESTMapper(gr)

return &paneler{
panelerRegistry: map[string]Paneler{
types.PanelTypeTable: table,
types.PanelTypeItem: item,
types.PanelTypeLogs: &Log{KubeClient: kubeClient},
types.PanelTypeTable: NewTable(dClient, di, rm),
types.PanelTypeItem: NewItem(dClient, di, rm),
types.PanelTypeLogs: NewLog(kubeClient, dClient, di, rm),
},
}, nil
}
28 changes: 5 additions & 23 deletions pkg/paneler/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import (
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/dynamic/dynamicinformer"
"k8s.io/client-go/rest"
"k8s.io/client-go/restmapper"
"k8s.io/client-go/tools/cache"
)

Expand All @@ -31,28 +29,12 @@ type Table struct {
restMapper meta.RESTMapper
}

func NewTable(cfg *rest.Config) (*Table, error) {
client, err := dynamic.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("error creating dynamic client: %w", err)
}

di, err := discovery.NewDiscoveryClientForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("error creating discovery client: %w", err)
}

gr, err := restmapper.GetAPIGroupResources(di)
if err != nil {
return nil, fmt.Errorf("error getting API group resources: %w", err)
}

rm := restmapper.NewDiscoveryRESTMapper(gr)
func NewTable(dynamicClient dynamic.Interface, discoveryClient *discovery.DiscoveryClient, restMapper meta.RESTMapper) *Table {
return &Table{
dynamicClient: client,
discoveryClient: di,
restMapper: rm,
}, nil
dynamicClient: dynamicClient,
discoveryClient: discoveryClient,
restMapper: restMapper,
}
}

func (t *Table) Model(panel buoytypes.Panel) (tea.Model, error) {
Expand Down
74 changes: 8 additions & 66 deletions test.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,40 +33,6 @@
}
]
},
{
"name": "Kube-System Pods",
"group": "",
"version": "v1",
"kind": "Pod",
"type": "table",
"namespace": "kube-system",
"columns": [
{
"header": "Namespace",
"path": "metadata.namespace"
},
{
"header": "Name",
"path": "metadata.name"
},
{
"header": "Phase",
"path": "status.phase"
},
{
"header": "PodIP",
"path": "status.podIP"
},
{
"header": "Start Time",
"path": "status.startTime"
},
{
"header": "UID",
"path": "metadata.uid"
}
]
},
{
"name": "Kube-System Pods with label tier=control-plane",
"group": "",
Expand Down Expand Up @@ -104,20 +70,6 @@
}
]
},
{
"name": "ClusterRoles",
"group": "rbac.authorization.k8s.io",
"version": "v1",
"kind": "ClusterRole",
"type": "table",
"namespace": "kube-system",
"columns": [
{
"header": "Name",
"path": "metadata.name"
}
]
},
{
"name": "Deployments",
"group": "apps",
Expand Down Expand Up @@ -175,25 +127,15 @@
]
},
{
"name": "Services",
"group": "",
"name": "CoreDNS Deployment Logs",
"group": "apps",
"version": "v1",
"kind": "Service",
"type": "table",
"columns": [
{
"header": "Namespace",
"path": "metadata.namespace"
},
{
"header": "Name",
"path": "metadata.name"
},
{
"header": "Type",
"path": "spec.type"
}
]
"kind": "Deployment",
"type": "logs",
"key": {
"namespace": "kube-system",
"name": "coredns"
}
}
]
}

0 comments on commit 92f98d9

Please sign in to comment.