Skip to content

Commit

Permalink
Add basic functionalitu
Browse files Browse the repository at this point in the history
  • Loading branch information
vs4vijay committed Apr 17, 2020
1 parent ce20b00 commit d84735a
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 48 deletions.
23 changes: 23 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,27 @@
https://github.com/alitari/kubexp

https://github.com/JulienBreux/pody



if v, err := g.SetView("help", maxX-25, 0, maxX-1, 9); err != nil {
if err != gocui.ErrUnknownView {
return err
}
fmt.Fprintln(v, "KEYBINDINGS")
fmt.Fprintln(v, "Space: New View")
fmt.Fprintln(v, "Tab: Next View")
fmt.Fprintln(v, "← ↑ → ↓: Move View")
fmt.Fprintln(v, "Backspace: Delete View")
fmt.Fprintln(v, "t: Set view on top")
fmt.Fprintln(v, "b: Set view on bottom")
fmt.Fprintln(v, "^C: Exit")
}


CPU
MEM
View Logs
Execute Shell
? Events
```
25 changes: 13 additions & 12 deletions pkg/k8s/k8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ func SearchNamespaces(clientset *kubernetes.Clientset) ([]v1.Namespace, error) {
if err != nil {
return nil, err
}
fmt.Println("Namespaces: ")
for _, pod := range namespaceList.Items {
fmt.Println("\t", pod.GetName())
}
// fmt.Println("Namespaces: ")
// for _, pod := range namespaceList.Items {
// fmt.Println("\t", pod.GetName())
// }
return namespaceList.Items, nil
}

Expand All @@ -58,10 +58,10 @@ func SearchPods(clientset *kubernetes.Clientset, namespace string) ([]v1.Pod, er
if err != nil {
return nil, err
}
fmt.Println("Pods: ")
for _, pod := range podList.Items {
fmt.Println("\t", pod.GetName())
}
// fmt.Println("Pods: ")
// for _, pod := range podList.Items {
// fmt.Println("\t", pod.GetName())
// }
return podList.Items, nil
}

Expand All @@ -70,10 +70,11 @@ func SearchServices(clientset *kubernetes.Clientset, namespace string) ([]v1.Ser
if err != nil {
return nil, err
}
fmt.Println("Services: ")
for _, service := range serviceList.Items {
fmt.Println("\t", service.GetName())
}
// fmt.Println("Services: ")
// for _, service := range serviceList.Items {
// fmt.Println("\t", service.GetName())
// }

return serviceList.Items, nil
}

Expand Down
116 changes: 80 additions & 36 deletions pkg/tui/tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,48 +6,57 @@ import (
"os"

"github.com/jroimartin/gocui"
"k8s.io/client-go/kubernetes"

"github.com/vs4vijay/lazykubectl/pkg/k8s"
)

var (
viewArr = []string{"Info", "Namespaces", "Pods", "Services"}
active = 0
viewArr = []string{"Info", "Namespaces", "Pods", "Services"}
active = 0
clientset *kubernetes.Clientset
)

func Start(kubeConfig k8s.KubeConfig) {
clientset, _ = k8s.GetClientset(kubeConfig)

g, err := gocui.NewGui(gocui.Output256)
if err != nil {
log.Panicln(err)
}
defer g.Close()

g.InputEsc = true
g.Cursor = true
g.Mouse = true
g.Highlight = true
g.Mouse = true
// g.Cursor = true
// g.SelBgColor = gocui.ColorCyan
g.SelFgColor = gocui.ColorBlue

g.SetManagerFunc(layout)

// g.SetCurrentView("Info")

if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
log.Panicln("SetKeybinding --- ", err)
log.Panicln(err)
}

if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone, nextView); err != nil {
log.Panicln(err)
}

if err := g.SetKeybinding("Pods", gocui.KeyCtrlP, gocui.ModNone, quit); err != nil {
log.Panicln("SetKeybinding --- ", err)
if err := g.SetKeybinding("", gocui.MouseLeft, gocui.ModNone, selectWidgets); err != nil {
log.Panicln(err)
}

if err := g.SetKeybinding("Namespaces", gocui.MouseLeft, gocui.ModNone, selectNamespace); err != nil {
log.Panicln(err)
}

if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln("MainLoop --- ", err)
log.Panicln(err)
}

// g.SetViewOnTop("Namespaces")
// g.SetCurrentView("Namespaces")
}

func layout(g *gocui.Gui) error {
Expand All @@ -56,47 +65,46 @@ func layout(g *gocui.Gui) error {
pad := 1
gridX, gridY := maxX/4, maxY/3

if v, err := g.SetView("Info", 0, 0, gridX - pad, gridY - pad); err != nil {
if v, err := g.SetView("Info", 0, 0, gridX-pad, gridY-pad); err != nil {
if err != gocui.ErrUnknownView {
return err
}

v.Title = "Info"
v.Editable = true
v.Wrap = true

fmt.Fprintf(v, "Context: %v\n", "")
fmt.Fprintf(v, "Cluster: %v\n", "")
fmt.Fprintf(v, "User: %v\n", "")
fmt.Fprintf(v, "Nodes: %v\n", "")
}

if v, err := g.SetView("Namespaces", 0, gridY, gridX - pad, (gridY * 2) - pad) ; err != nil {
if v, err := g.SetView("Namespaces", 0, gridY, gridX-pad, (gridY*2)-pad); err != nil {
if err != gocui.ErrUnknownView {
return err
}

v.Title = "Namespaces"
v.Editable = true
v.Wrap = true
fmt.Fprintf(v, "Namespaces: %v\n", "")
v.Highlight = true
v.SelBgColor = gocui.ColorGreen
v.SelFgColor = gocui.ColorBlack
namespaces, _ := k8s.SearchNamespaces(clientset)
for _, item := range namespaces {
fmt.Fprintln(v, item.GetName())
}
}

if v, err := g.SetView("Pods", gridX, 0, (gridX * 4), (gridY * 2) - pad) ; err != nil {
if v, err := g.SetView("Pods", gridX, 0, (gridX*4), (gridY*2)-pad); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Pods"
v.Editable = true
v.Autoscroll = true
fmt.Fprintf(v, "Pods: %v\n", "")
// v.Autoscroll = true
}

if v, err := g.SetView("Services", 0, gridY * 2, (gridX * 4), gridY * 3) ; err != nil {
if v, err := g.SetView("Services", 0, gridY*2, (gridX*4), gridY*3); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Services"
v.Editable = true
v.Wrap = true
fmt.Fprintf(v, "Services: %v\n", "")
}
Expand All @@ -116,29 +124,65 @@ func setCurrentViewOnTop(g *gocui.Gui, name string) (*gocui.View, error) {
}

func nextView(g *gocui.Gui, v *gocui.View) error {
// TODO: Try to use g.View()
nextIndex := (active + 1) % len(viewArr)
name := viewArr[nextIndex]

// out, err := g.View("Pods")
// if err != nil {
// return err
// }
// fmt.Fprintf(out, "Going from view %v to %v\n", v.Name(), name)

if _, err := setCurrentViewOnTop(g, name); err != nil {
return err
}

if nextIndex == 0 || nextIndex == 3 {
g.Cursor = true
} else {
g.Cursor = false
}

active = nextIndex
return nil
}

func selectWidgets(g *gocui.Gui, v *gocui.View) error {
_, err := g.SetCurrentView(v.Name())
return err
}

func selectNamespace(g *gocui.Gui, v *gocui.View) error {
namespaceName := getSelectedText(v)

g.Update(func(g *gocui.Gui) error {
podsView, _ := g.View("Pods")
podsView.Clear()

pods, _ := k8s.SearchPods(clientset, namespaceName)
for _, item := range pods {
podsView.Title = fmt.Sprintf("Pods(%s)", namespaceName)
fmt.Fprintln(podsView, item.GetName())
}

servicesView, _ := g.View("Services")
servicesView.Clear()

services, _ := k8s.SearchServices(clientset, namespaceName)
for _, item := range services {
servicesView.Title = fmt.Sprintf("Services(%s)", namespaceName)
fmt.Fprintln(servicesView, item.GetName())
}
return nil
})

return nil
}

func getSelectedText(view *gocui.View) string {
_, cy := view.Cursor()
line, err := view.Line(cy)
if err != nil {
return ""
}
return line
}

// func renderList(list []interface{}, ) error {
// for _, item := range list {
// item.()
// }
// }

func Try(kubeConfig k8s.KubeConfig) {
fmt.Println("Rendering")
// fmt.Println("kubeConfig", kubeConfig)
Expand Down

0 comments on commit d84735a

Please sign in to comment.