adds ability to override defaults with env vars, adds debug to config and updates readme.

This commit is contained in:
cubixle
2022-04-20 21:57:59 +01:00
parent d76f4562dd
commit 97cad0fb2b
4 changed files with 29 additions and 12 deletions

View File

@@ -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.

View File

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

View File

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

View File

@@ -19,6 +19,7 @@ type Proxy struct {
}
type File struct {
Debug bool `yaml:"debug"`
Endpoints []Endpoint `yaml:"endpoints"`
}