diff --git a/mysqld_exporter.go b/mysqld_exporter.go index e5c70cad..11a1cf0a 100644 --- a/mysqld_exporter.go +++ b/mysqld_exporter.go @@ -216,7 +216,16 @@ func init() { } func newHandler(cfg *webAuth, db *sql.DB, metrics collector.Metrics, scrapers []collector.Scraper, defaultGatherer bool) http.HandlerFunc { + processing := false return func(w http.ResponseWriter, r *http.Request) { + if processing { + log.Info("Received metrics request while previous still in progress: returning 429 Too Many Requests") + http.Error(w, "429 Too Many Requests", http.StatusTooManyRequests) + return + } + processing = true + defer func() { processing = false }() + filteredScrapers := scrapers params := r.URL.Query()["collect[]"] // Use request context for cancellation when connection gets closed.