From 97cad0fb2b2fc1e5e56c59d2c8dfa999f953b605 Mon Sep 17 00:00:00 2001 From: cubixle Date: Wed, 20 Apr 2022 21:57:59 +0100 Subject: [PATCH] adds ability to override defaults with env vars, adds debug to config and updates readme. --- README.md | 5 ++++- cmd/groxy/main.go | 25 +++++++++++++++++++------ internal/logging/logging.go | 10 +++++----- internal/reverseproxy/reverseproxy.go | 1 + 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index ac45984..6e44dc1 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,14 @@ Groxy is a lightweight, simple HTTP reverse proxy written in golang. -Groxy was built to run in a docker container so is setup by default to listen on port 80. +Groxy was built to run on port 8080 by default. This can be changed with the the `GROXY_PORT` environment variable. ## Config The config for groxy is very simple and will hopefully always be simple. ```yaml +debug: false endpoints: - addr: pihole.test remote_addr: "192.168.1.2:8017" @@ -16,6 +17,8 @@ endpoints: remote_addr: "192.168.1.2:9091" ``` +By Default groxy will try and read a `groxy.yml` file from its current working directory. To override this you can use the environment variable `GROXY_CONFIG_FILE`. + ## Metrics There are a bunch of different metrics that can be found on port 9090. diff --git a/cmd/groxy/main.go b/cmd/groxy/main.go index b2bce1f..ad23a4e 100644 --- a/cmd/groxy/main.go +++ b/cmd/groxy/main.go @@ -14,7 +14,9 @@ import ( ) func main() { - data, err := os.ReadFile("./groxy.yml") + cfgFile := getEnvVar("GROXY_CONFIG_FILE", "./groxy.yml") + + data, err := os.ReadFile(cfgFile) if err != nil { log.Fatal(err) } @@ -26,19 +28,30 @@ func main() { log.Fatal(err) } - logger := logging.Logger() + logger := logging.Logger(eps.Debug) defer logger.Sync() handler := reverseproxy.NewReverseProxy(eps.Endpoints, logger) go func() { - logger.Debug("starting metrics server") - if err := http.ListenAndServe("localhost:9090", promhttp.Handler()); err != nil { + logger.Info("starting metrics server") + port := getEnvVar("GROXY_METRICS_PORT", "9090") + if err := http.ListenAndServe(":"+port, promhttp.Handler()); err != nil { log.Fatal(err) } }() - logger.Debug("starting reverse proxy") - if err := http.ListenAndServe("localhost:8080", handler); err != nil { + port := getEnvVar("GROXY_PORT", "8080") + logger.Info("starting reverse proxy") + if err := http.ListenAndServe(":"+port, handler); err != nil { log.Fatal("ListenAndServe:", err) } } + +func getEnvVar(name, defaultValue string) string { + v := os.Getenv(name) + if v == "" { + return defaultValue + } + + return v +} diff --git a/internal/logging/logging.go b/internal/logging/logging.go index 6297e79..4f4bebc 100644 --- a/internal/logging/logging.go +++ b/internal/logging/logging.go @@ -7,11 +7,11 @@ import ( "go.uber.org/zap/zapcore" ) -func Logger() *zap.Logger { - // info level enabler - level := zap.LevelEnablerFunc(func(level zapcore.Level) bool { - return level == zapcore.DebugLevel - }) +func Logger(debug bool) *zap.Logger { + level := zapcore.InfoLevel + if debug { + level = zapcore.DebugLevel + } // write syncers stdoutSyncer := zapcore.Lock(os.Stdout) diff --git a/internal/reverseproxy/reverseproxy.go b/internal/reverseproxy/reverseproxy.go index e238db1..71583a2 100644 --- a/internal/reverseproxy/reverseproxy.go +++ b/internal/reverseproxy/reverseproxy.go @@ -19,6 +19,7 @@ type Proxy struct { } type File struct { + Debug bool `yaml:"debug"` Endpoints []Endpoint `yaml:"endpoints"` }