From 29d46be1d3f0c6e9cdc5643a4b7572ac18018bde Mon Sep 17 00:00:00 2001 From: Hector Date: Wed, 21 Jun 2023 11:37:42 +0100 Subject: [PATCH] move server code to new package --- exporter.go | 42 +----------------------------------------- server/handler.go | 33 +++++++++++++++++++++++++++++++++ server/server.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 server/handler.go create mode 100644 server/server.go diff --git a/exporter.go b/exporter.go index 6bc0126..e3947c9 100644 --- a/exporter.go +++ b/exporter.go @@ -3,23 +3,17 @@ package main import ( "fmt" "log" - "net/http" "os" "os/signal" "syscall" "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/cfg" "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/collector/f2b" "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/collector/textfile" "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/server" ) -const ( - metricsPath = "/metrics" -) - var ( version = "dev" commit = "none" @@ -32,26 +26,6 @@ func printAppVersion() { fmt.Printf(" build date: %s\r\n commit hash: %s\r\n built by: %s\r\n", date, commit, builtBy) } -func rootHtmlHandler(w http.ResponseWriter, r *http.Request) { - _, err := w.Write([]byte( - ` - Fail2Ban Exporter - -

Fail2Ban Exporter

-

Metrics

- - `)) - if err != nil { - log.Printf("error handling root url: %v", err) - w.WriteHeader(http.StatusInternalServerError) - } -} - -func metricHandler(w http.ResponseWriter, r *http.Request, collector *textfile.Collector) { - promhttp.Handler().ServeHTTP(w, r) - collector.WriteTextFileMetrics(w, r) -} - func main() { appSettings := cfg.Parse() if appSettings.VersionMode { @@ -67,21 +41,7 @@ func main() { textFileCollector := textfile.NewCollector(appSettings) prometheus.MustRegister(textFileCollector) - http.HandleFunc("/", server.BasicAuthMiddleware(rootHtmlHandler, appSettings.AuthProvider)) - http.HandleFunc(metricsPath, server.BasicAuthMiddleware( - func(w http.ResponseWriter, r *http.Request) { - metricHandler(w, r, textFileCollector) - }, - appSettings.AuthProvider, - )) - log.Printf("metrics available at '%s'", metricsPath) - - svrErr := make(chan error) - go func() { - svrErr <- http.ListenAndServe(appSettings.MetricsAddress, nil) - }() - log.Print("ready") - + svrErr := server.StartServer(appSettings, textFileCollector) err := <-svrErr log.Fatal(err) } diff --git a/server/handler.go b/server/handler.go new file mode 100644 index 0000000..a0d8bf2 --- /dev/null +++ b/server/handler.go @@ -0,0 +1,33 @@ +package server + +import ( + "log" + "net/http" + + "github.com/prometheus/client_golang/prometheus/promhttp" + "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/collector/textfile" +) + +const ( + metricsPath = "/metrics" +) + +func rootHtmlHandler(w http.ResponseWriter, r *http.Request) { + _, err := w.Write([]byte( + ` + Fail2Ban Exporter + +

Fail2Ban Exporter

+

Metrics

+ + `)) + if err != nil { + log.Printf("error handling root url: %v", err) + w.WriteHeader(http.StatusInternalServerError) + } +} + +func metricHandler(w http.ResponseWriter, r *http.Request, collector *textfile.Collector) { + promhttp.Handler().ServeHTTP(w, r) + collector.WriteTextFileMetrics(w, r) +} diff --git a/server/server.go b/server/server.go new file mode 100644 index 0000000..70599a4 --- /dev/null +++ b/server/server.go @@ -0,0 +1,33 @@ +package server + +import ( + "log" + "net/http" + + "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/cfg" + "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/collector/textfile" +) + +func StartServer( + appSettings *cfg.AppSettings, + textFileCollector *textfile.Collector, +) chan error { + http.HandleFunc("/", BasicAuthMiddleware( + rootHtmlHandler, + appSettings.AuthProvider, + )) + http.HandleFunc(metricsPath, BasicAuthMiddleware( + func(w http.ResponseWriter, r *http.Request) { + metricHandler(w, r, textFileCollector) + }, + appSettings.AuthProvider, + )) + log.Printf("metrics available at '%s'", metricsPath) + + svrErr := make(chan error) + go func() { + svrErr <- http.ListenAndServe(appSettings.MetricsAddress, nil) + }() + log.Print("ready") + return svrErr +}