From 09a6698d26e759833bd952a5d07499ed38c57455 Mon Sep 17 00:00:00 2001 From: William Brawner Date: Mon, 23 May 2022 21:29:09 -0600 Subject: [PATCH] Use CLI flags in addition to env vars for config --- cmd/twigs/main.go | 91 ++++++++++++++++++++++++++++++++++++----------- go.mod | 6 ++++ go.sum | 17 +++++++++ 3 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 go.sum diff --git a/cmd/twigs/main.go b/cmd/twigs/main.go index e35a0d4..52efd99 100644 --- a/cmd/twigs/main.go +++ b/cmd/twigs/main.go @@ -8,28 +8,79 @@ import ( "os" "github.com/gorilla/mux" - _ "github.com/go-sql-driver/mysql" + _ "github.com/lib/pq" + "github.com/urfave/cli/v2" ) -func getEnvOrDefault(env string, defaultVal string) string { - envVal := os.Getenv(env) - if envVal == "" { - return defaultVal - } else { - return envVal - } -} +const ARG_PORT = "port" +const ARG_DB_NAME = "db-name" +const ARG_DB_USER = "db-user" +const ARG_DB_PASS = "db-pass" +const ARG_DB_HOST = "db-host" +const ARG_DB_PORT = "db-port" func main() { - dbName := getEnvOrDefault("TWIGS_DB_NAME", "budget") - dbUser := getEnvOrDefault("TWIGS_DB_USER", "budget") - dbPass := getEnvOrDefault("TWIGS_DB_PASS", "budget") - dbHost := getEnvOrDefault("TWIGS_DB_HOST", "localhost") - dbPort := getEnvOrDefault("TWIGS_DB_PORT", "3306") - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@%s:%s/%s", dbUser, dbPass, dbHost, dbPort, dbName)) - if err != nil { - log.Fatalf("Failed to connect to database %s on %s", dbName, dbHost) + app := &cli.App{ + Name: "twigs", + Usage: "personal/family finance app server", + Flags: []cli.Flag{ + &cli.IntFlag{ + Name: ARG_PORT, + Value: 8080, + Usage: "the `PORT` for the server to listen on", + Aliases: []string{"p"}, + EnvVars: []string{"TWIGS_PORT"}, + }, + &cli.StringFlag{ + Name: ARG_DB_NAME, + Value: "twigs", + Usage: "the `NAME` of the database to connect to", + EnvVars: []string{"TWIGS_DB_NAME"}, + }, + &cli.StringFlag{ + Name: ARG_DB_USER, + Value: "twigs", + Usage: "the `USERNAME` to use to connect to the database", + EnvVars: []string{"TWIGS_DB_USER"}, + }, + &cli.StringFlag{ + Name: ARG_DB_PASS, + Value: "twigs", + Usage: "the `PASSWORD` to use to connect to the database", + EnvVars: []string{"TWIGS_DB_PASS"}, + }, + &cli.StringFlag{ + Name: ARG_DB_HOST, + Value: "twigs", + Usage: "the `HOST` to use to connect to the database", + EnvVars: []string{"TWIGS_DB_HOST"}, + }, + &cli.IntFlag{ + Name: ARG_DB_PORT, + Value: 5432, + Usage: "the `PORT` to use to connect to the database", + EnvVars: []string{"TWIGS_DB_PORT"}, + }, + }, + Action: func(c *cli.Context) error { + _, err := sql.Open("postgres", fmt.Sprintf( + "%s:%s@%s:%d/%s", + c.String(ARG_DB_USER), + c.String(ARG_DB_PASS), + c.String(ARG_DB_HOST), + c.Int(ARG_DB_PORT), + c.String(ARG_DB_NAME), + )) + if err != nil { + log.Fatalf("Failed to connect to database %s on %s", c.String(ARG_DB_NAME), c.String(ARG_DB_HOST)) + } + _ = mux.NewRouter() + log.Fatal(http.ListenAndServe(":8080", nil)) + return nil + }, } - router := mux.NewRouter() - log.Fatal(http.ListenAndServe(":8080", nil)) -} \ No newline at end of file + err := app.Run(os.Args) + if err != nil { + log.Fatal(err) + } +} diff --git a/go.mod b/go.mod index dfa94be..471c423 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,9 @@ module wbrawner.com/twigs go 1.16 + +require ( + github.com/gorilla/mux v1.8.0 + github.com/lib/pq v1.10.6 + github.com/urfave/cli/v2 v2.8.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..2f4a924 --- /dev/null +++ b/go.sum @@ -0,0 +1,17 @@ +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0 h1:R/qAiUxFT3mNgQaNqJe0IVznjKRNm23ohAIh9lgtlzc= +github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0/go.mod h1:v3ZDlfVAL1OrkKHbGSFFK60k0/7hruHPDq2XMs9Gu6U= +github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/urfave/cli/v2 v2.8.0 h1:EZsAB20oRW4nHcB99TTL6PrXpBGIEujMEKdjwruY9KQ= +github.com/urfave/cli/v2 v2.8.0/go.mod h1:TYFbtzt/azQoJOrGH5mDfZtS0jIkl/OeFwlRWPR9KRM= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=