From aa3fa88044e70c1956525e723e15d7afb538c3ab Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 22 Jun 2026 22:07:52 +0100 Subject: [PATCH] init application routines --- cmd/cmd.go | 12 +----------- cmd/tui.go | 11 +++-------- main.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 1454321..7662c44 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -2,8 +2,6 @@ package cmd import ( - "context" - "log/slog" "os" "github.com/spf13/cobra" @@ -20,10 +18,7 @@ type loggerKey struct{} // Execute adds all child commands to the root command and sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. -func Execute(log *slog.Logger) { - ctx := context.WithValue(context.Background(), loggerKey{}, log) - rootCmd.SetContext(ctx) - +func Execute() { err := rootCmd.Execute() if err != nil { os.Exit(1) @@ -31,11 +26,6 @@ func Execute(log *slog.Logger) { } func init() { - cobra.OnInitialize(initApplication) - rootCmd.Flags().StringP("out", "o", "", "output file") rootCmd.Flags().StringP("session", "s", "", "output session info to file") } - -func initApplication() { -} diff --git a/cmd/tui.go b/cmd/tui.go index 4beb120..ddf9030 100644 --- a/cmd/tui.go +++ b/cmd/tui.go @@ -1,21 +1,16 @@ package cmd import ( - "esdi/tui" "fmt" "log/slog" + "esdi/tui" + "github.com/spf13/cobra" ) func tuiCmdAction(cmd *cobra.Command, args []string) { - logger, ok := cmd.Context().Value(loggerKey{}).(*slog.Logger) - if !ok { - fmt.Printf("Error loading logger from context: %s\n", logger) - return - } - - err := tui.Run(logger) + err := tui.Run(slog.Default()) if err != nil { fmt.Printf("Error running TUI: %s\n", err.Error()) return diff --git a/main.go b/main.go index 2917f66..e75e69d 100644 --- a/main.go +++ b/main.go @@ -1,40 +1,79 @@ package main import ( + "fmt" "log/slog" "net/http" "os" "esdi/cmd" + "esdi/config" "esdi/telemetry" "github.com/arl/statsviz" ) -func main() { - // NOTE: pass all these things to cobra - output, err := os.OpenFile("./output.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o755) +func initApplication() { + // 1. This is the first initialization setup we do so we can log + err := setupLogger() if err != nil { panic("failed to open logging file: " + err.Error()) } + // 2. This is the second thing we setup because we need some stuff to run + // other things + err = config.Setup("./config/config.yaml") + if err != nil { + panic("failed to setup config: " + err.Error()) + } + + // Performance analysis + if config.GetCfg().MetricsServer { + slog.Info("Setting up metrics server...") + err = runStatviz() + if err != nil { + slog.Error(fmt.Sprintf("failed to setup metrics server: %+v", err)) + } + } + + // Setting up some internal data structures + telemetry.Init() +} + +func setupLogger() error { + output, err := os.OpenFile("./output.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o755) + if err != nil { + return err + } + logger := slog.New( slog.NewTextHandler(output, &slog.HandlerOptions{ Level: slog.LevelDebug, }), ) - // Performance analysis + slog.SetDefault(logger) + + return nil +} + +func runStatviz() error { mux := http.NewServeMux() - statsviz.Register(mux) + err := statsviz.Register(mux) + if err != nil { + return err + } go func() { http.ListenAndServe("localhost:8001", mux) }() - // Setting up some internal data structures - telemetry.Init() + return nil +} + +func main() { + initApplication() // Launches the cobra package stuff - cmd.Execute(logger) + cmd.Execute() }