You've already forked prometheus-fail2ban-exporter
							
							This commit is contained in:
		
							
								
								
									
										76
									
								
								collector/f2b/collector.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								collector/f2b/collector.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| package f2b | ||||
|  | ||||
| import ( | ||||
| 	"log" | ||||
| 	"os" | ||||
|  | ||||
| 	"git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter/cfg" | ||||
| 	"git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter/socket" | ||||
| 	"github.com/prometheus/client_golang/prometheus" | ||||
| ) | ||||
|  | ||||
| type Collector struct { | ||||
| 	socketPath                 string | ||||
| 	exporterVersion            string | ||||
| 	lastError                  error | ||||
| 	socketConnectionErrorCount int | ||||
| 	socketRequestErrorCount    int | ||||
| 	exitOnSocketConnError      bool | ||||
| } | ||||
|  | ||||
| func NewExporter(appSettings *cfg.AppSettings, exporterVersion string) *Collector { | ||||
| 	log.Printf("reading fail2ban metrics from socket file: %s", appSettings.Fail2BanSocketPath) | ||||
| 	printFail2BanServerVersion(appSettings.Fail2BanSocketPath) | ||||
| 	return &Collector{ | ||||
| 		socketPath:                 appSettings.Fail2BanSocketPath, | ||||
| 		exporterVersion:            exporterVersion, | ||||
| 		lastError:                  nil, | ||||
| 		socketConnectionErrorCount: 0, | ||||
| 		socketRequestErrorCount:    0, | ||||
| 		exitOnSocketConnError:      appSettings.ExitOnSocketConnError, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *Collector) Describe(ch chan<- *prometheus.Desc) { | ||||
| 	ch <- metricServerUp | ||||
| 	ch <- metricJailCount | ||||
| 	ch <- metricJailFailedCurrent | ||||
| 	ch <- metricJailFailedTotal | ||||
| 	ch <- metricJailBannedCurrent | ||||
| 	ch <- metricJailBannedTotal | ||||
| 	ch <- metricErrorCount | ||||
| } | ||||
|  | ||||
| func (c *Collector) Collect(ch chan<- prometheus.Metric) { | ||||
| 	s, err := socket.ConnectToSocket(c.socketPath) | ||||
| 	if err != nil { | ||||
| 		log.Printf("error opening socket: %v", err) | ||||
| 		c.socketConnectionErrorCount++ | ||||
| 		if c.exitOnSocketConnError { | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	} else { | ||||
| 		defer s.Close() | ||||
| 	} | ||||
|  | ||||
| 	c.collectServerUpMetric(ch, s) | ||||
| 	if err == nil && s != nil { | ||||
| 		c.collectJailMetrics(ch, s) | ||||
| 		c.collectVersionMetric(ch, s) | ||||
| 	} | ||||
| 	c.collectErrorCountMetric(ch) | ||||
| } | ||||
|  | ||||
| func printFail2BanServerVersion(socketPath string) { | ||||
| 	s, err := socket.ConnectToSocket(socketPath) | ||||
| 	if err != nil { | ||||
| 		log.Printf("error connecting to socket: %v", err) | ||||
| 	} else { | ||||
| 		version, err := s.GetServerVersion() | ||||
| 		if err != nil { | ||||
| 			log.Printf("error interacting with socket: %v", err) | ||||
| 		} else { | ||||
| 			log.Printf("successfully connected to fail2ban socket! fail2ban version: %s", version) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user