Skip to content

Commit

Permalink
Add support for config file, issue #10
Browse files Browse the repository at this point in the history
  • Loading branch information
gen2brain committed Apr 20, 2022
1 parent 79d7ee7 commit b324267
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 18 deletions.
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,21 @@ Supports FreeRADIUS 3.0.x.

Name | Description
-------------------|------------
radius.addr | Address of [FreeRADIUS status server](https://wiki.freeradius.org/config/Status), defaults to `127.0.0.1:18121`.
radius.secret | FreeRADIUS client secret.
radius.address | Address of [FreeRADIUS status server](https://wiki.freeradius.org/config/Status), defaults to `127.0.0.1:18121`.
radius.secret | FreeRADIUS client secret, defaults to `adminsecret`.
radius.timeout | Timeout, in milliseconds, defaults to `5000`.
radius.homeservers | Addresses of home servers separated by comma, e.g. "172.28.1.2:1812,172.28.1.3:1812"
web.listen-address | Address to listen on for web interface and telemetry, defaults to `:9812`.
web.telemetry-path | Path under which to expose metrics, defaults to `/metrics`.
version | Display version information
config | Config file (optional)


### Environment Variables

Name | Description
-------------------|------------
RADIUS_ADDR | Address of [FreeRADIUS status server](https://wiki.freeradius.org/config/Status).
RADIUS_ADDRESS | Address of [FreeRADIUS status server](https://wiki.freeradius.org/config/Status).
RADIUS_SECRET | FreeRADIUS client secret.
RADIUS_TIMEOUT | Timeout, in milliseconds.
RADIUS_HOMESERVERS | Addresses of home servers separated by comma, e.g. "172.28.1.2:1812,172.28.1.3:1812"
6 changes: 6 additions & 0 deletions config.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"radius.address": "127.0.0.1:18121",
"radius.secret": "secret",
"radius.timeout": 10000,
"radius.homeservers": ""
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/bvantagelimited/freeradius_exporter
go 1.14

require (
github.com/peterbourgon/ff/v3 v3.1.2
github.com/prometheus/client_golang v1.12.1
github.com/prometheus/common v0.33.0 // indirect
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
github.com/peterbourgon/ff/v3 v3.1.2 h1:0GNhbRhO9yHA4CC27ymskOsuRpmX0YQxwxM9UPiP6JM=
github.com/peterbourgon/ff/v3 v3.1.2/go.mod h1:XNJLY8EIl6MjMVjBS4F0+G0LYoAqs0DTa4rmHHukKDE=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down
37 changes: 22 additions & 15 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"path/filepath"
"strings"

"github.com/peterbourgon/ff/v3"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"

Expand All @@ -19,15 +20,28 @@ import (
var version, commit, date string

func main() {
listenAddr := flag.String("web.listen-address", ":9812", "Address to listen on for web interface and telemetry.")
metricsPath := flag.String("web.telemetry-path", "/metrics", "A path under which to expose metrics.")
radiusTimeout := flag.Int("radius.timeout", 5000, "Timeout, in milliseconds.")
radiusAddr := flag.String("radius.address", getEnv("RADIUS_ADDR", "127.0.0.1:18121"), "Address of FreeRADIUS status server.")
homeServers := flag.String("radius.homeservers", getEnv("RADIUS_HOMESERVERS", ""), "List of FreeRADIUS home servers to check, e.g. '172.28.1.2:1812,172.28.1.3:1812'.")
radiusSecret := flag.String("radius.secret", getEnv("RADIUS_SECRET", "adminsecret"), "FreeRADIUS client secret.")
appVersion := flag.Bool("version", false, "Display version information")
fs := flag.NewFlagSet("freeradius_exporter", flag.ContinueOnError)
appHelp := fs.Bool("help", false, "Display help")
appVersion := fs.Bool("version", false, "Display version information")
_ = fs.String("config", "", "Config file (optional)")

flag.Parse()
listenAddr := fs.String("web.listen-address", ":9812", "Address to listen on for web interface and telemetry.")
metricsPath := fs.String("web.telemetry-path", "/metrics", "A path under which to expose metrics.")
radiusTimeout := fs.Int("radius.timeout", 5000, "Timeout, in milliseconds [RADIUS_TIMEOUT].")
radiusAddr := fs.String("radius.address", "127.0.0.1:18121", "Address of FreeRADIUS status server [RADIUS_ADDRESS].")
homeServers := fs.String("radius.homeservers", "", "List of FreeRADIUS home servers to check, e.g. '172.28.1.2:1812,172.28.1.3:1812' [RADIUS_HOMESERVERS].")
radiusSecret := fs.String("radius.secret", "adminsecret", "FreeRADIUS client secret [RADIUS_SECRET].")

err := ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithConfigFileFlag("config"), ff.WithConfigFileParser(ff.JSONParser))
if err != nil {
println(err.Error())
os.Exit(1)
}

if *appHelp {
fs.PrintDefaults()
os.Exit(0)
}

if *appVersion {
println(filepath.Base(os.Args[0]), version, commit, date)
Expand Down Expand Up @@ -65,10 +79,3 @@ func main() {
log.Printf("Providing metrics at %s%s", *listenAddr, *metricsPath)
log.Fatal(srv.Serve(listener))
}

func getEnv(key string, defaultVal string) string {
if envVal, ok := os.LookupEnv(key); ok {
return envVal
}
return defaultVal
}

0 comments on commit b324267

Please sign in to comment.