diff --git a/cfg/cfg.go b/cfg/cfg.go index 9628632..56ab3d5 100644 --- a/cfg/cfg.go +++ b/cfg/cfg.go @@ -11,6 +11,7 @@ import ( var cliStruct struct { VersionMode bool `name:"version" short:"v" help:"Show version info and exit"` + DryRunMode bool `name:"dry-run" help:"Attempt to connect to the fail2ban socket then exit before starting the server"` ServerAddress string `name:"web.listen-address" env:"F2B_WEB_LISTEN_ADDRESS" help:"Address to use for the metrics server" default:"${default_address}"` F2bSocketPath string `name:"collector.f2b.socket" env:"F2B_COLLECTOR_SOCKET" help:"Path to the fail2ban server socket" default:"${default_socket}"` ExitOnSocketError bool `name:"collector.f2b.exit-on-socket-connection-error" env:"F2B_EXIT_ON_SOCKET_CONN_ERROR" help:"When set to true the exporter will immediately exit on a fail2ban socket connection error"` @@ -34,6 +35,7 @@ func Parse() *AppSettings { validateFlags(ctx) settings := &AppSettings{ VersionMode: cliStruct.VersionMode, + DryRunMode: cliStruct.DryRunMode, MetricsAddress: cliStruct.ServerAddress, Fail2BanSocketPath: cliStruct.F2bSocketPath, FileCollectorPath: cliStruct.TextFileExporterPath, diff --git a/cfg/settings.go b/cfg/settings.go index 519f8e0..8ecf998 100644 --- a/cfg/settings.go +++ b/cfg/settings.go @@ -4,6 +4,7 @@ import "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/auth" type AppSettings struct { VersionMode bool + DryRunMode bool MetricsAddress string Fail2BanSocketPath string FileCollectorPath string diff --git a/exporter.go b/exporter.go index e3947c9..6e7ae25 100644 --- a/exporter.go +++ b/exporter.go @@ -30,20 +30,25 @@ func main() { appSettings := cfg.Parse() if appSettings.VersionMode { printAppVersion() - } else { - handleGracefulShutdown() - log.Printf("fail2ban exporter version %s", version) - log.Printf("starting server at %s", appSettings.MetricsAddress) + return + } - f2bCollector := f2b.NewExporter(appSettings, version) - prometheus.MustRegister(f2bCollector) + handleGracefulShutdown() + log.Printf("fail2ban exporter version %s", version) + log.Printf("starting server at %s", appSettings.MetricsAddress) - textFileCollector := textfile.NewCollector(appSettings) - prometheus.MustRegister(textFileCollector) + f2bCollector := f2b.NewExporter(appSettings, version) + prometheus.MustRegister(f2bCollector) + textFileCollector := textfile.NewCollector(appSettings) + prometheus.MustRegister(textFileCollector) + + if !appSettings.DryRunMode { svrErr := server.StartServer(appSettings, textFileCollector) err := <-svrErr log.Fatal(err) + } else { + log.Print("running in dry-run mode - exiting") } }