diff --git a/cmd/stash-vr/internal/run.go b/cmd/stash-vr/internal/run.go index de5f2c4..c71c7a9 100644 --- a/cmd/stash-vr/internal/run.go +++ b/cmd/stash-vr/internal/run.go @@ -4,10 +4,11 @@ import ( "context" "fmt" "github.com/Khan/genqlient/graphql" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" "stash-vr/internal/build" "stash-vr/internal/config" - "stash-vr/internal/interrupt" + "stash-vr/internal/logger" "stash-vr/internal/sections" "stash-vr/internal/server" "stash-vr/internal/stash" @@ -15,10 +16,10 @@ import ( "stash-vr/internal/stimhub" ) -const listenAddress = ":9666" - -func Run() error { - ctx := interrupt.Context() +func Run(ctx context.Context) error { + config.Init() + log.Logger = logger.New(config.Get().LogLevel, config.Get().DisableLogColor) + zerolog.DefaultContextLogger = &log.Logger log.Info().Str("config", fmt.Sprintf("%+v", config.Get().Redacted())).Send() @@ -32,7 +33,7 @@ func Run() error { sections.Get(ctx, stashClient, stimhubClient) - err := server.Listen(ctx, listenAddress, stashClient, stimhubClient) + err := server.Listen(ctx, config.Get().ListenAddress, stashClient, stimhubClient) if err != nil { return fmt.Errorf("server: %w", err) } diff --git a/cmd/stash-vr/main.go b/cmd/stash-vr/main.go index 6cebbe3..b6accf6 100644 --- a/cmd/stash-vr/main.go +++ b/cmd/stash-vr/main.go @@ -3,15 +3,13 @@ package main import ( - "github.com/rs/zerolog/log" + "log" "stash-vr/cmd/stash-vr/internal" - _ "stash-vr/internal/logger" + "stash-vr/internal/interrupt" ) func main() { - if err := internal.Run(); err != nil { - log.Warn().Err(err).Msg("Application EXIT with ERROR") - } else { - log.Info().Msg("Application EXIT without error") + if err := internal.Run(interrupt.Context()); err != nil { + log.Fatal("Application EXIT with ERROR", err) } } diff --git a/internal/config/config.go b/internal/config/config.go index 7163f12..433ed36 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -3,15 +3,18 @@ package config import ( "github.com/spf13/pflag" "github.com/spf13/viper" + "os" "strings" ) const ( + envKeyListenAddress = "LISTEN_ADDR" envKeyStashGraphQLUrl = "STASH_GRAPHQL_URL" envKeyStashApiKey = "STASH_API_KEY" envKeyFavoriteTag = "FAVORITE_TAG" envKeyFilters = "FILTERS" envKeyLogLevel = "LOG_LEVEL" + envKeyDisableLogColor = "DISABLE_LOG_COLOR" envKeyDisableRedact = "DISABLE_REDACT" envKeyForceHTTPS = "FORCE_HTTPS" envKeyDisableHeatmap = "DISABLE_HEATMAP" @@ -22,12 +25,14 @@ const ( ) type Application struct { + ListenAddress string StashGraphQLUrl string StashApiKey string FavoriteTag string Filters string IsSyncMarkersAllowed bool LogLevel string + DisableLogColor bool IsRedactDisabled bool ForceHTTPS bool IsHeatmapDisabled bool @@ -38,7 +43,10 @@ type Application struct { var cfg Application -func init() { +func Init() { + pflag.String(envKeyListenAddress, ":9666", "Local address for Stash-VR to listen on") + _ = viper.BindPFlag(envKeyListenAddress, pflag.Lookup(envKeyListenAddress)) + pflag.String(envKeyStashGraphQLUrl, "http://localhost:9999/graphql", "Url to Stash graphql") _ = viper.BindPFlag(envKeyStashGraphQLUrl, pflag.Lookup(envKeyStashGraphQLUrl)) @@ -57,6 +65,9 @@ func init() { pflag.String(envKeyLogLevel, "info", "Set log level - trace, debug, warn, info or error") _ = viper.BindPFlag(envKeyLogLevel, pflag.Lookup(envKeyLogLevel)) + pflag.Bool(envKeyDisableLogColor, false, "Disable colors in log output") + _ = viper.BindPFlag(envKeyDisableLogColor, pflag.Lookup(envKeyDisableLogColor)) + pflag.Bool(envKeyDisableRedact, false, "Disable redacting sensitive information from logs") _ = viper.BindPFlag(envKeyDisableRedact, pflag.Lookup(envKeyDisableRedact)) @@ -75,16 +86,26 @@ func init() { pflag.String(envKeyStimhubUrl, "", "") _ = viper.BindPFlag(envKeyStimhubUrl, pflag.Lookup(envKeyStimhubUrl)) + pflag.BoolP("help", "h", false, "Display usage information") + _ = viper.BindPFlag("help", pflag.Lookup("help")) + pflag.Parse() + if viper.GetBool("help") { + pflag.Usage() + os.Exit(1) + } + viper.AutomaticEnv() + cfg.ListenAddress = viper.GetString(envKeyListenAddress) cfg.StashGraphQLUrl = viper.GetString(envKeyStashGraphQLUrl) cfg.StashApiKey = viper.GetString(envKeyStashApiKey) cfg.FavoriteTag = viper.GetString(envKeyFavoriteTag) cfg.Filters = viper.GetString(envKeyFilters) cfg.IsSyncMarkersAllowed = viper.GetBool(envKeyAllowSyncMarkers) cfg.LogLevel = strings.ToLower(viper.GetString(envKeyLogLevel)) + cfg.DisableLogColor = viper.GetBool(envKeyDisableLogColor) cfg.IsRedactDisabled = viper.GetBool(envKeyDisableRedact) cfg.ForceHTTPS = viper.GetBool(envKeyForceHTTPS) cfg.IsHeatmapDisabled = viper.GetBool(envKeyDisableHeatmap) diff --git a/internal/logger/logger.go b/internal/logger/logger.go index f30b095..f8b1765 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -5,21 +5,19 @@ import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log" "os" - "stash-vr/internal/config" ) -func init() { - log.Logger = log.Output(zerolog.ConsoleWriter{ - Out: os.Stderr, - TimeFormat: "Jan 02, 15:04:05", - }).With().Str("mod", "default").Logger().Level(zerolog.TraceLevel) //.With().Caller().Logger() - - level, err := zerolog.ParseLevel(config.Get().LogLevel) +func New(level string, disableColor bool) zerolog.Logger { + lvl, err := zerolog.ParseLevel(level) if err != nil { panic(fmt.Sprintf("error parsing log level: %v", err)) } - log.Logger = log.Logger.Level(level) + l := log.Output(zerolog.ConsoleWriter{ + Out: os.Stderr, + TimeFormat: "Jan 02, 15:04:05", + NoColor: disableColor, + }).With().Str("mod", "default").Logger().Level(lvl) //.With().Caller().Logger() - zerolog.DefaultContextLogger = &log.Logger + return l } diff --git a/internal/server/server.go b/internal/server/server.go index 359f024..02ceb77 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -23,7 +23,7 @@ func Listen(ctx context.Context, listenAddress string, stashClient graphql.Clien g.Go(func() error { log.Ctx(ctx).Info().Msg(fmt.Sprintf("Server listening at %s", listenAddress)) - if err := server.ListenAndServe(); errors.Is(err, http.ErrServerClosed) { + if err := server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { return fmt.Errorf("listen: %w", err) } return nil