Skip to content

Commit

Permalink
Better flag parsing and added way to see current keybindings
Browse files Browse the repository at this point in the history
  • Loading branch information
hoyle1974 committed Feb 19, 2025
1 parent 09ccb59 commit f538f58
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 41 deletions.
22 changes: 15 additions & 7 deletions cmd/khronoscope/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ package main

import (
"encoding/gob"
"flag"
"fmt"
"log"
"os"
"runtime/pprof"
"time"

flag "github.com/spf13/pflag"

tea "github.com/charmbracelet/bubbletea"
"github.com/hoyle1974/khronoscope/internal/config"
"github.com/hoyle1974/khronoscope/internal/conn"
Expand All @@ -28,7 +29,18 @@ func main() {
if err != nil {
panic(err)
}
log.Println(cfg)

//"/Users/jstrohm/code/khronoscope/session.khron"
filename := flag.StringP("file", "f", "", "Filename to load")
namespace := flag.StringP("namespace", "n", "", "Namespace to filter on")
showKeybindings := flag.BoolP("keybindings", "k", false, "Show keybindings")
kubeConfigFlag := flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
flag.Parse()

if *showKeybindings {
config.Get().KeyBindings.Print()
return
}

done := make(chan bool)
defer func() {
Expand Down Expand Up @@ -77,11 +89,7 @@ func main() {
gob.Register(resources.StatefulSetExtra{})
gob.Register(resources.PersistentVolumeExtra{})

//"/Users/jstrohm/code/khronoscope/session.khron"
filename := flag.String("file", "", "Filename to load")
namespace := flag.String("namespace", "", "Namespace to filter on")

client, err := conn.NewKhronosConnection()
client, err := conn.NewKhronosConnection(kubeConfigFlag)
if err != nil {
fmt.Printf("Error creating connection: %v", err)
return
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/pflag v1.0.6
github.com/x448/float16 v0.8.4 // indirect
golang.org/x/net v0.30.0 // indirect
golang.org/x/oauth2 v0.23.0 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
Expand Down
64 changes: 38 additions & 26 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,50 @@ package config

import (
"fmt"
"reflect"

"github.com/gookit/config/v2"
"github.com/gookit/config/v2/yaml"
)

type Keys struct {
WindowDetails string `default:"1"`
WindowLogs string `default:"2"`
FilterLogsToggle string `default:"L"`
LogToggle string `default:"l"`
FilterSearch string `default:"/"`
Save string `default:"q"`
NewLabel string `default:"m"`
RotateViewToggle string `default:"tab"`
Quit string `default:"ctrl+c"`
VCRRewind string `default:"left"`
VCRFastForward string `default:"right"`
VCRPlay string `default:" "`
VCROff string `default:"esc"`
Toggle string `default:"enter"`
DetailsUp string `default:"shift+up"`
DetailsDown string `default:"shift+down"`
Up string `default:"up"`
Down string `default:"down"`
PageUp string `default:"alt+up"`
PageDown string `default:"alt+down"`
DeleteResource string `default:"ctrl+d"`
Exec string `default:"s"`
Pod string `default:"P"`
Debug string `default:"ctrl+d"`
NextLabel string `default:"shift+right"`
PrevLabel string `default:"shift+left"`
WindowDetails string `default:"1" doc:"Press this to show the details of a resource"`
WindowLogs string `default:"2" doc:"Press this to show any collected logs of a resource"`
FilterLogsToggle string `default:"L" doc:"Filter resources by those currently logging"`
LogToggle string `default:"l" doc:"Toggle log collection for this pod"`
FilterSearch string `default:"/" doc:"Filter by a string"`
Save string `default:"q" doc:"Save the recorded state to a file"`
NewLabel string `default:"m" doc:"Mark this timestamp with a label"`
RotateViewToggle string `default:"tab" doc:"Rotate view"`
Quit string `default:"ctrl+c" doc:"Quit"`
VCRRewind string `default:"left" doc:"In VCR mode, rewind, press multiple times to speed up"`
VCRFastForward string `default:"right" doc:"In VCR mode, fast forward, press multiple times to speed up"`
VCRPlay string `default:" " doc:"In VCR mode, toggle play/pause"`
VCROff string `default:"esc" doc:"Exit VCR mode and resume at the latest timestamp"`
Toggle string `default:"enter" doc:"Toggle folding the resource category/kind view"`
DetailsUp string `default:"shift+up" doc:"Jump up in the details view by 10 lines"`
DetailsDown string `default:"shift+down" doc:"Jump down in the details view by 10 lines"`
Up string `default:"up" doc:"Go up a resource"`
Down string `default:"down" doc:"Go down a resource"`
PageUp string `default:"alt+up" doc:"Go up 10 resources"`
PageDown string `default:"alt+down" doc:"Go down 10 resources"`
DeleteResource string `default:"ctrl+d" doc:"Delete a resource"`
Exec string `default:"s" doc:"Exec into a shell for this pod"`
Pod string `default:"P" doc:"Filter all pods"`
Debug string `default:"ctrl+d" doc:"Debug log window"`
NextLabel string `default:"shift+right" doc:"In VCR mode, jump to the next marked label"`
PrevLabel string `default:"shift+left" doc:"In VCR mode, jump to the previous marked label"`
}

func (k Keys) Print() {
typeOfK := reflect.TypeOf(k)
fmt.Println("Keybindings:")
for i := 0; i < typeOfK.NumField(); i++ {
field := typeOfK.Field(i)
defaultVal := field.Tag.Get("default")
doc := field.Tag.Get("doc")
fmt.Printf(" '%s' - %s\n", defaultVal, doc)
}
}

type Config struct {
Expand Down
6 changes: 1 addition & 5 deletions internal/conn/connection.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package conn

import (
"flag"
"fmt"
"os"
"path/filepath"
Expand All @@ -21,14 +20,11 @@ type KhronosConn struct {
Config *rest.Config
}

var kubeConfigFlag = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")

func NewKhronosConnection() (KhronosConn, error) {
func NewKhronosConnection(kubeConfigFlag *string) (KhronosConn, error) {
// Disable the kubernetes logger otherwise it will mess output up from time to time.
klog.SetLogger(logr.Logger{})

// Otherwise use passed in flags
flag.Parse()
kubeConfigPath := *kubeConfigFlag

// Look for KUBECONFIG and use it if it exists
Expand Down

0 comments on commit f538f58

Please sign in to comment.