Skip to content
This repository has been archived by the owner on Nov 20, 2020. It is now read-only.

Commit

Permalink
Render description of resources (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
GnaneshKunal committed Sep 13, 2020
1 parent 7d3a043 commit 642924a
Show file tree
Hide file tree
Showing 6 changed files with 287 additions and 27 deletions.
53 changes: 53 additions & 0 deletions pkg/client/kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"path/filepath"
"time"

v1Apps "k8s.io/api/apps/v1"
v1Batch "k8s.io/api/batch/v1"
v1Core "k8s.io/api/core/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/version"
Expand Down Expand Up @@ -149,6 +151,57 @@ func (k *K8s) DescribePod(ns string, podname string) (*v1Core.Pod, error) {
return out, nil
}

func (k *K8s) DescribeJob(ns string, jobname string) (*v1Batch.Job, error) {
ctx := context.TODO()
opts := v1.GetOptions{}
out, err := k.client.BatchV1().Jobs(ns).Get(ctx, jobname, opts)
if err != nil {
return nil, err
}
return out, nil
}

func (k *K8s) DescribeService(ns string, servicename string) (*v1Core.Service, error) {
ctx := context.TODO()
opts := v1.GetOptions{}
out, err := k.client.CoreV1().Services(ns).Get(ctx, servicename, opts)
if err != nil {
return nil, err
}
return out, nil
}

func (k *K8s) DescribeDeployment(ns string, deploymentname string) (*v1Apps.Deployment, error) {
ctx := context.TODO()
opts := v1.GetOptions{}
out, err := k.client.AppsV1().Deployments(ns).Get(ctx, deploymentname, opts)
if err != nil {
return nil, err
}
return out, nil
}

func (k *K8s) DescribeSecret(ns string, secretName string) (*v1Core.Secret, error) {
ctx := context.TODO()
opts := v1.GetOptions{}
out, err := k.client.CoreV1().Secrets(ns).Get(ctx, secretName, opts)
if err != nil {
return nil, err
}
return out, nil
}

func (k *K8s) DescribeConfigMap(ns string, configMapName string) (*v1Core.ConfigMap, error) {
ctx := context.TODO()
opts := v1.GetOptions{}
out, err := k.client.CoreV1().ConfigMaps(ns).Get(ctx, configMapName, opts)
if err != nil {
return nil, err
}
return out, nil
}


func (k *K8s) StreamPodLogs(ns string, podname string) *restclient.Request {
opts := &v1Core.PodLogOptions{Follow: true}
request := k.client.CoreV1().Pods(ns).GetLogs(podname, opts)
Expand Down
9 changes: 6 additions & 3 deletions pkg/gui/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@ func (gui *Gui) onInfoClick(g *gocui.Gui, v *gocui.View) error {
return nil
}

func (gui *Gui) onInfoTabCick(tabIndex int) error {
resourceView := gui.getInfoView()
resourceView.TabIndex = tabIndex
func (gui *Gui) onInfoTabClick(tabIndex int) error {

infoView := gui.getInfoView()
infoView.TabIndex = tabIndex
gui.panelStates.Info.TabIndex = tabIndex

return nil
}

Expand Down
17 changes: 16 additions & 1 deletion pkg/gui/keybindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ func (gui *Gui) SetKeybindings(g *gocui.Gui) error {
return err
}

if err := g.SetKeybinding("namespace", nil, gocui.MouseWheelDown, gocui.ModNone, gui.handleNSKeyUp); err != nil {
return err
}

if err := g.SetKeybinding("namespace", nil, gocui.MouseWheelUp, gocui.ModNone, gui.handleNSKeyDown); err != nil {
return err
}

if err := g.SetKeybinding("resource", nil, gocui.KeyArrowDown, gocui.ModNone, gui.handleResourceKeyUp); err != nil {
return err
}
Expand All @@ -58,12 +66,19 @@ func (gui *Gui) SetKeybindings(g *gocui.Gui) error {
return err
}

if err := g.SetKeybinding("info", nil, gocui.MouseWheelUp, gocui.ModNone, gui.scrollUpInfo); err != nil {
return err
}
if err := g.SetKeybinding("info", nil, gocui.MouseWheelDown, gocui.ModNone, gui.scrollDownInfo); err != nil {
return err
}

// Tab click
if err := g.SetTabClickBinding("resource", gui.onResourceTabClick); err != nil {
return err
}

if err := g.SetTabClickBinding("info", gui.onInfoTabCick); err != nil {
if err := g.SetTabClickBinding("info", gui.onInfoTabClick); err != nil {
return err
}

Expand Down
230 changes: 209 additions & 21 deletions pkg/gui/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,189 @@ func (gui *Gui) onResourceClick(g *gocui.Gui, v *gocui.View) error {
infoView.Tabs = getPodInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.PodData))
return gui.handlePodSelect(v)
case "job":
infoView.Tabs = getJobInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.JobData))
return gui.handleJobSelect(v)
case "deploy":
infoView.Tabs = getDeployInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.DeploymentData))
return gui.handleDeploymentSelect(v)
case "service":
infoView.Tabs = getServiceInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.ServiceData))
return gui.handleServiceSelect(v)
case "configMap":
infoView.Tabs = getConfigMapInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.ConfigMapData))
return gui.handleConfigMapSelect(v)
case "secret":
infoView.Tabs = getSecretInfoTabs()
gui.panelStates.Resource.SelectedLine = gui.FindSelectedLine(v, len(gui.data.SecretData))
return gui.handleSecretSelect(v)
}

return nil
}

func (gui *Gui) handleJobSelect(v *gocui.View) error {
// Find Selected Job
jobSelected := gui.panelStates.Resource.SelectedLine
job := gui.data.JobData[jobSelected]

infoView := gui.getInfoView()

err := gui.focusPoint(0, gui.panelStates.Resource.SelectedLine, len(gui.data.JobData), v)
if err != nil {
return err
}

// Find the tab in info panel
switch getJobInfoTabs()[gui.panelStates.Info.TabIndex] {
case "description":
infoView.Clear()
data, err := gui.k8sClient.DescribeJob(job.Namespace, job.Name)
if err != nil {
return err
}

output, err := yaml.Marshal(data)
if err != nil {
return err
}

fmt.Fprintln(infoView, string(output))
}
return nil
}

func (gui *Gui) handleDeploymentSelect(v *gocui.View) error {
// Find Selected Deployment
deploymentSelected := gui.panelStates.Resource.SelectedLine
deployment := gui.data.DeploymentData[deploymentSelected]

infoView := gui.getInfoView()

err := gui.focusPoint(0, gui.panelStates.Resource.SelectedLine, len(gui.data.DeploymentData), v)
if err != nil {
return err
}

// Find the tab in info panel
switch getDeployInfoTabs()[gui.panelStates.Info.TabIndex] {
case "description":
infoView.Clear()
data, err := gui.k8sClient.DescribeDeployment(deployment.Namespace, deployment.Name)
if err != nil {
return err
}

output, err := yaml.Marshal(data)
if err != nil {
return err
}

fmt.Fprintln(infoView, string(output))
}
return nil
}

func (gui *Gui) handleConfigMapSelect(v *gocui.View) error {
// Find Selected ConfigMap
configMapSelected := gui.panelStates.Resource.SelectedLine
configMap := gui.data.ConfigMapData[configMapSelected]

infoView := gui.getInfoView()

err := gui.focusPoint(0, gui.panelStates.Resource.SelectedLine, len(gui.data.ConfigMapData), v)
if err != nil {
return err
}

// Find the tab in info panel
switch getConfigMapInfoTabs()[gui.panelStates.Info.TabIndex] {
case "description":
infoView.Clear()
data, err := gui.k8sClient.DescribeConfigMap(configMap.Namespace, configMap.Name)
if err != nil {
return err
}

output, err := yaml.Marshal(data)
if err != nil {
return err
}

fmt.Fprintln(infoView, string(output))
}
return nil
}

func (gui *Gui) handleSecretSelect(v *gocui.View) error {
// Find Selected Secret
secretSelected := gui.panelStates.Resource.SelectedLine
secret := gui.data.SecretData[secretSelected]

infoView := gui.getInfoView()

err := gui.focusPoint(0, gui.panelStates.Resource.SelectedLine, len(gui.data.SecretData), v)
if err != nil {
return err
}

// Find the tab in info panel
switch getSecretInfoTabs()[gui.panelStates.Info.TabIndex] {
case "description":
infoView.Clear()
data, err := gui.k8sClient.DescribeSecret(secret.Namespace, secret.Name)
if err != nil {
return err
}

output, err := yaml.Marshal(data)
if err != nil {
return err
}

fmt.Fprintln(infoView, string(output))
}
return nil
}



func (gui *Gui) handleServiceSelect(v *gocui.View) error {
// Find Selected Service
serviceSelected := gui.panelStates.Resource.SelectedLine
service := gui.data.ServiceData[serviceSelected]

infoView := gui.getInfoView()

err := gui.focusPoint(0, gui.panelStates.Resource.SelectedLine, len(gui.data.ServiceData), v)
if err != nil {
return err
}

// Find the tab in info panel
switch getServiceInfoTabs()[gui.panelStates.Info.TabIndex] {
case "description":
infoView.Clear()
data, err := gui.k8sClient.DescribeService(service.Namespace, service.Name)
if err != nil {
return err
}

output, err := yaml.Marshal(data)
if err != nil {
return err
}

fmt.Fprintln(infoView, string(output))
}
return nil
}


func (gui *Gui) handlePodSelect(v *gocui.View) error {

// Find Selected Pod
Expand All @@ -49,7 +227,7 @@ func (gui *Gui) handlePodSelect(v *gocui.View) error {
}

// Find the tab in info panel
switch getPodInfoTabs()[gui.panelStates.Resource.TabIndex] {
switch getPodInfoTabs()[gui.panelStates.Info.TabIndex] {
case "logs":
infoView.Clear()
gui.g.Update(func(*gocui.Gui) error {
Expand Down Expand Up @@ -417,16 +595,21 @@ func (gui *Gui) handleResourceKeyUp(g *gocui.Gui, v *gocui.View) error {
case "pod":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.PodData), false)
return gui.handlePodSelect(v)
// case "job":
// infoView.Tabs = getJobInfoTabs()
// case "deploy":
// infoView.Tabs = getDeployInfoTabs()
// case "service":
// infoView.Tabs = getServiceInfoTabs()
// case "secret":
// infoView.Tabs = getSecretInfoTabs()
// case "configMap":
// infoView.Tabs = getConfigMapInfoTabs()
case "job":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.JobData), false)
return gui.handleJobSelect(v)
case "deploy":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.DeploymentData), true)
return gui.handleDeploymentSelect(v)
case "service":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.ServiceData), false)
return gui.handleServiceSelect(v)
case "secret":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.SecretData), false)
return gui.handleSecretSelect(v)
case "configMap":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.ConfigMapData), false)
return gui.handleConfigMapSelect(v)
}
return nil
}
Expand All @@ -436,16 +619,21 @@ func (gui *Gui) handleResourceKeyDown(g *gocui.Gui, v *gocui.View) error {
case "pod":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.PodData), true)
return gui.handlePodSelect(v)
// case "job":
// infoView.Tabs = getJobInfoTabs()
// case "deploy":
// infoView.Tabs = getDeployInfoTabs()
// case "service":
// infoView.Tabs = getServiceInfoTabs()
// case "secret":
// infoView.Tabs = getSecretInfoTabs()
// case "configMap":
// infoView.Tabs = getConfigMapInfoTabs()
case "job":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.JobData), true)
return gui.handleJobSelect(v)
case "deploy":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.DeploymentData), true)
return gui.handleDeploymentSelect(v)
case "service":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.ServiceData), false)
return gui.handleServiceSelect(v)
case "secret":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.SecretData), false)
return gui.handleSecretSelect(v)
case "configMap":
gui.changeSelectedLine(&gui.panelStates.Resource.SelectedLine, len(gui.data.ConfigMapData), false)
return gui.handleConfigMapSelect(v)
}
return nil
}
3 changes: 2 additions & 1 deletion pkg/gui/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ type panelStates struct {
func NewPanelStates() *panelStates {
ns := &namespaceState{}
rs := &resourceState{}
return &panelStates{Namespace: ns, Resource: rs}
is := &infoState{}
return &panelStates{Namespace: ns, Resource: rs, Info: is}
}
2 changes: 1 addition & 1 deletion pkg/gui/tabs.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func getPodInfoTabs() []string {
}

func getJobInfoTabs() []string {
return []string{"logs", "description", "cron"}
return []string{"description", "logs", "cron"}
}

func getDeployInfoTabs() []string {
Expand Down

0 comments on commit 642924a

Please sign in to comment.