From 495ee99084a3ccfadf67e3947eb6b9b3713094bb Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Thu, 15 May 2025 09:55:22 +0530 Subject: [PATCH] [server] Incorporate flags --- server/internal/command/command.go | 18 +++++++++++++++--- server/internal/command/config.go | 14 +++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/server/internal/command/command.go b/server/internal/command/command.go index cdbd10d1..c02c57ff 100644 --- a/server/internal/command/command.go +++ b/server/internal/command/command.go @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" "github.com/knadh/koanf/parsers/yaml" "github.com/knadh/koanf/providers/file" + "github.com/knadh/koanf/providers/posflag" "github.com/knadh/koanf/providers/structs" "github.com/knadh/koanf/v2" "github.com/shroff/phylum/server/internal/command/fs" @@ -22,6 +23,7 @@ import ( "github.com/shroff/phylum/server/internal/core/storage" "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "github.com/spf13/pflag" "github.com/spf13/viper" ) @@ -41,8 +43,8 @@ func SetupCommand() { flags.MarkHidden("debug") viper.BindPFlag("debug", flags.Lookup("debug")) - flags.Bool("trace-queries", false, "Trace Database Queries") - flags.MarkHidden("trace-queries") + flags.Bool("db_trace-queries", false, "Trace Database Queries") + flags.MarkHidden("db_trace-queries") viper.SetDefault("db.host", "localhost") viper.SetDefault("db.port", "5432") @@ -75,6 +77,16 @@ func SetupCommand() { } logrus.Info("Loaded config from ", configFile) } + + if err := k.Load(posflag.ProviderWithFlag(cmd.Flags(), ".", k, func(f *pflag.Flag) (string, interface{}) { + if !f.Changed { + return "", "" + } + return strings.ReplaceAll(f.Name, "_", "."), posflag.FlagVal(cmd.Flags(), f) + }), nil); err != nil { + logrus.Fatalf("Unable to load flags: %v", err) + } + var cfg Config k.UnmarshalWithConf("", &cfg, koanf.UnmarshalConf{Tag: "koanf"}) @@ -85,7 +97,7 @@ func SetupCommand() { db.Config = viper.Sub("db") // TODO: Hack. flag bindings don't work in viper for nested keys - db.Config.BindPFlag("trace_queries", flags.Lookup("trace-queries")) + db.Config.BindPFlag("trace_queries", flags.Lookup("db_trace-queries")) storage.Config = viper.Sub("storage") storage.Config.BindPFlag("location", flags.Lookup("location")) } diff --git a/server/internal/command/config.go b/server/internal/command/config.go index 84bfb732..cb6b8f5c 100644 --- a/server/internal/command/config.go +++ b/server/internal/command/config.go @@ -1,7 +1,7 @@ package command var defaultConfig = Config{ - Database: DBConfig{ + DB: DBConfig{ Host: "localhost", Port: 5432, Username: "phylum", @@ -24,10 +24,10 @@ var defaultConfig = Config{ } type Config struct { - Debug bool `koanf:"debug"` - Database DBConfig `kaonf:"db"` - Storage StorageConfig `koanf:"storage"` - Server ServerConfig `koanf:"server"` + Debug bool `koanf:"debug"` + DB DBConfig `koanf:"db"` + Storage StorageConfig `koanf:"storage"` + Server ServerConfig `koanf:"server"` } type DBConfig struct { @@ -35,8 +35,8 @@ type DBConfig struct { Port int `koanf:"port"` Username string `koanf:"username"` Password string `koanf:"password"` - SkipMigration bool `koanf:"skip_migration"` - TraceQueries bool `koanf:"trace_queries"` + SkipMigration bool `koanf:"skip-migration"` + TraceQueries bool `koanf:"trace-queries"` } type ServerConfig struct {