diff --git a/src/cfg/cfg.go b/src/cfg/cfg.go index 842e12a..2e78d8e 100644 --- a/src/cfg/cfg.go +++ b/src/cfg/cfg.go @@ -7,19 +7,21 @@ import ( ) const ( - socketEnvName = "F2B_COLLECTOR_SOCKET" - fileCollectorPathEnvName = "F2B_COLLECTOR_TEXT_PATH" - addressEnvName = "F2B_WEB_LISTEN_ADDRESS" - basicAuthUserEnvName = "F2B_WEB_BASICAUTH_USER" - basicAuthPassEnvName = "F2B_WEB_BASICAUTH_PASS" + socketEnvName = "F2B_COLLECTOR_SOCKET" + fileCollectorPathEnvName = "F2B_COLLECTOR_TEXT_PATH" + addressEnvName = "F2B_WEB_LISTEN_ADDRESS" + basicAuthUserEnvName = "F2B_WEB_BASICAUTH_USER" + basicAuthPassEnvName = "F2B_WEB_BASICAUTH_PASS" + exitOnSocketConnErrorEnvName = "F2B_EXIT_ON_SOCKET_ERROR" ) type AppSettings struct { - VersionMode bool - MetricsAddress string - Fail2BanSocketPath string - FileCollectorPath string - BasicAuthProvider *hashedBasicAuth + VersionMode bool + MetricsAddress string + Fail2BanSocketPath string + FileCollectorPath string + BasicAuthProvider *hashedBasicAuth + ExitOnSocketConnError bool } func init() { @@ -64,6 +66,11 @@ func readParamsFromCli(settings *AppSettings) { Default(""). Envar(basicAuthPassEnvName). String() + rawExitOnSocketConnError := kingpin. + Flag("collector.f2b.exit-on-socket-connection-error", "when set to true the exporter will immediately exit on a fail2ban socket connection error"). + Default("false"). + Envar(exitOnSocketConnErrorEnvName). + Bool() kingpin.Parse() @@ -72,6 +79,7 @@ func readParamsFromCli(settings *AppSettings) { settings.Fail2BanSocketPath = *socketPath settings.FileCollectorPath = *fileCollectorPath settings.setBasicAuthValues(*rawBasicAuthUsername, *rawBasicAuthPassword) + settings.ExitOnSocketConnError = *rawExitOnSocketConnError } func (settings *AppSettings) setBasicAuthValues(rawUsername, rawPassword string) { diff --git a/src/collector/f2b/collector.go b/src/collector/f2b/collector.go index 2b502d6..95f9bd0 100644 --- a/src/collector/f2b/collector.go +++ b/src/collector/f2b/collector.go @@ -5,6 +5,7 @@ import ( "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/cfg" "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/socket" "log" + "os" ) type Collector struct { @@ -13,6 +14,7 @@ type Collector struct { lastError error socketConnectionErrorCount int socketRequestErrorCount int + exitOnSocketConnError bool } func NewExporter(appSettings *cfg.AppSettings, exporterVersion string) *Collector { @@ -23,6 +25,7 @@ func NewExporter(appSettings *cfg.AppSettings, exporterVersion string) *Collecto lastError: nil, socketConnectionErrorCount: 0, socketRequestErrorCount: 0, + exitOnSocketConnError: appSettings.ExitOnSocketConnError, } } @@ -41,6 +44,9 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) { if err != nil { log.Printf("error opening socket: %v", err) c.socketConnectionErrorCount++ + if c.exitOnSocketConnError { + os.Exit(1) + } } else { defer s.Close() }