This commit is contained in:
2023-12-07 12:08:56 -05:00
parent a8aa8af3d3
commit 20bc28ad36
11 changed files with 411 additions and 120 deletions

View File

@@ -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)
}
}