diff --git a/cmd/commander/ccmem/main.go b/cmd/commander/ccmem/main.go index 2763ad1..b123d56 100644 --- a/cmd/commander/ccmem/main.go +++ b/cmd/commander/ccmem/main.go @@ -17,6 +17,7 @@ import ( "github.com/spf13/cobra" ) +// XX: no subcommands here // StartCmd represents the Start command var StartCmd = &cobra.Command{ Use: "Start", diff --git a/cmd/commander/main.go b/cmd/commander/main.go index e9fd13e..e7d389f 100644 --- a/cmd/commander/main.go +++ b/cmd/commander/main.go @@ -1,7 +1,65 @@ // Copyright © 2024 github // Licensed under the Apache License, Version 2.0 (the "License"). + package main +import ( + "flag" + "log" + "log/slog" + "os" +) + func main() { - Execute() + // Define flags + helpFlag := flag.Bool("help", false, "Display help message") + logLevel := flag.String("loglevel", "info", "Set log level: debug, info, warn, error") + mode := flag.String("mode", "standalone", "Set mode: standalone, container, cluster") + + // Custom usage function for the help flag + flag.Usage = func() { + log.Printf("Usage of %s:\n", os.Args[0]) + flag.PrintDefaults() + log.Println("\nExamples:") + log.Println(" go run main.go --loglevel=Debug --mode=container") + } + + // Parse the flags + flag.Parse() + + // Handle the help flag + if *helpFlag { + flag.Usage() + return + } + + // Apply 'loglevel' flag + switch *logLevel { + case "debug": + slog.SetLogLoggerLevel(slog.LevelDebug) + case "info": + slog.SetLogLoggerLevel(slog.LevelInfo) + case "warn": + slog.SetLogLoggerLevel(slog.LevelWarn) + case "error": + slog.SetLogLoggerLevel(slog.LevelError) + default: + log.Printf("Invalid logging verbosity level: %s", *logLevel) + os.Exit(1) + } + + // Apply 'mode' flag + switch *mode { + case "standalone": + case "container": + case "cluster": + default: + slog.Error("Invalid value for --mode. Allowed values are: standalone, container, cluster\n") + os.Exit(1) + } + + // Output configuration summary + log.Printf("Help: %t\n", *helpFlag) + log.Printf("Log Level: %s\n", *logLevel) + log.Printf("Mode: %s\n", *mode) } diff --git a/cmd/commander/root.go b/cmd/commander/root.go deleted file mode 100644 index 12a291c..0000000 --- a/cmd/commander/root.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright © 2024 github -// Licensed under the Apache License, Version 2.0 (the "License"). - -package main - -import ( - "log" - "log/slog" - "os" - - "github.com/spf13/cobra" -) - -// rootCmd represents the base command when called without any subcommands -var rootCmd = &cobra.Command{ - Use: "ghes-mirva-server", - Short: "A brief description of your application", - Long: `A longer description that spans multiple lines and likely contains -examples and usage of using your application. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, - // Uncomment the following line if your bare application - // has an action associated with it: - // Run: func(cmd *cobra.Command, args []string) { - PersistentPreRun: func(cmd *cobra.Command, args []string) { - switch logging_verbosity { - case "debug": - slog.SetLogLoggerLevel(slog.LevelDebug) - case "info": - slog.SetLogLoggerLevel(slog.LevelInfo) - case "warn": - slog.SetLogLoggerLevel(slog.LevelWarn) - case "error": - slog.SetLogLoggerLevel(slog.LevelError) - default: - log.Printf("Invalid logging verbosity level: %s", logging_verbosity) - } - }, -} - -func init() { - // Here you will define your flags and configuration settings. - // Cobra supports persistent flags, which, if defined here, - // will be global for your application. - - // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.ghes-mirva-server.yaml)") - - // Cobra also supports local flags, which will only run - // when this action is called directly. - rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") - - rootCmd.Flags().StringVar(&Backend, "backend", "local", `Backend to use. - Currently available: - - local - `) - - rootCmd.PersistentFlags().StringVar(&logging_verbosity, "verbosity", "info", `Logging verbosity, from least to most verbose: - - error - - warn - - info - - debug - `) -} - -// 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() { - err := rootCmd.Execute() - if err != nil { - os.Exit(1) - } -} - -var logging_verbosity string - -var Backend string = "local"