wip
This commit is contained in:
40
cmd/root.go
40
cmd/root.go
@@ -6,10 +6,10 @@ import (
|
||||
"os/signal"
|
||||
"strings"
|
||||
|
||||
"github.com/pterm/pterm"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/config"
|
||||
"golang.org/x/exp/slog"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -19,6 +19,7 @@ const (
|
||||
)
|
||||
|
||||
var conf config.Config
|
||||
var plog *pterm.Logger
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "gitlab-project-manager",
|
||||
@@ -44,7 +45,7 @@ func Execute() {
|
||||
err := rootCmd.ExecuteContext(ctx)
|
||||
|
||||
if err != nil {
|
||||
slog.Error("Failed to execute command", "err", err)
|
||||
plog.Error("Failed to execute command", plog.Args("err", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
@@ -89,47 +90,48 @@ func initConfig() {
|
||||
|
||||
checkConfigPerms(viper.ConfigFileUsed()) // Abort on world-readable config
|
||||
|
||||
// Configure default logger
|
||||
logger := slog.New(slog.NewTextHandler(os.Stdout,
|
||||
&slog.HandlerOptions{Level: getSlogLevel(viper.GetString("logLevel"))}))
|
||||
slog.SetDefault(logger)
|
||||
// Configure pretty logger
|
||||
plog = pterm.DefaultLogger.WithLevel(getPtermLogLevel(viper.GetString("logLevel")))
|
||||
if plog.Level == pterm.LogLevelDebug {
|
||||
pterm.EnableDebugMessages()
|
||||
}
|
||||
|
||||
// Load into struct to not be so darn pythonic, retrieving
|
||||
// settings by untyped string "name"
|
||||
if err := viper.Unmarshal(&conf); err != nil {
|
||||
slog.Error("Failed loading config", "err", err)
|
||||
plog.Error("Failed loading config", plog.Args("err", err))
|
||||
}
|
||||
|
||||
slog.Debug("Configuration loaded", "conf", conf)
|
||||
plog.Debug("Configuration loaded", plog.Args("conf", conf))
|
||||
}
|
||||
|
||||
func getSlogLevel(level string) slog.Level {
|
||||
var slogLevel slog.Level
|
||||
func getPtermLogLevel(level string) pterm.LogLevel {
|
||||
var pLevel pterm.LogLevel
|
||||
switch strings.ToLower(level) {
|
||||
case "error":
|
||||
slogLevel = slog.LevelError
|
||||
pLevel = pterm.LogLevelError
|
||||
case "warn":
|
||||
slogLevel = slog.LevelWarn
|
||||
pLevel = pterm.LogLevelWarn
|
||||
case "info":
|
||||
slogLevel = slog.LevelInfo
|
||||
pLevel = pterm.LogLevelInfo
|
||||
case "debug":
|
||||
slogLevel = slog.LevelDebug
|
||||
pLevel = pterm.LogLevelDebug
|
||||
default:
|
||||
slogLevel = slog.LevelInfo
|
||||
pLevel = pterm.LogLevelInfo
|
||||
}
|
||||
return slogLevel
|
||||
return pLevel
|
||||
}
|
||||
|
||||
// Don't allow world-readable configuration
|
||||
func checkConfigPerms(file string) {
|
||||
stat, err := os.Stat(file)
|
||||
if err != nil {
|
||||
slog.Error("Failure reading configuration", "err", err)
|
||||
plog.Error("Failure reading configuration", plog.Args("err", err))
|
||||
return
|
||||
}
|
||||
if stat.Mode().Perm()&0004 == 0004 {
|
||||
slog.Error("Configuration is world-readable. Recomment 0400.",
|
||||
"mode", stat.Mode().String())
|
||||
plog.Error("Configuration is world-readable. Recomment 0400.",
|
||||
plog.Args("mode", stat.Mode().String()))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user