From c7e6d4db06a2d5da567313f06bafc4c369766d16 Mon Sep 17 00:00:00 2001
From: Luca Comellini <luca.com@gmail.com>
Date: Mon, 9 Sep 2024 17:20:13 -0700
Subject: [PATCH] Switch to slog

---
 .github/workflows/ci.yml |  6 ------
 .golangci.yml            |  9 +++++----
 .goreleaser.yml          |  4 ----
 Makefile                 |  2 +-
 collector/helper_test.go |  1 -
 collector/nginx.go       |  9 ++++-----
 collector/nginx_plus.go  | 23 +++++++++++------------
 exporter.go              | 39 +++++++++++++++++++--------------------
 exporter_test.go         |  2 --
 go.mod                   |  4 +---
 go.sum                   |  8 ++------
 11 files changed, 43 insertions(+), 64 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d622a3d2..23086bdf 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -62,11 +62,6 @@ jobs:
         with:
           go-version: stable
 
-      - name: Determine GOPATH
-        id: go
-        run: |
-          echo "go_path=$(go env GOPATH)" >> $GITHUB_OUTPUT
-
       - name: Setup QEMU
         uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0
         with:
@@ -183,7 +178,6 @@ jobs:
           args: ${{ github.ref_type == 'tag' && 'release' || 'build --snapshot' }} ${{ github.event_name == 'pull_request' && '--single-target' || '' }} --clean
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          GOPATH: ${{ steps.go.outputs.go_path }}
           NGINX_GITHUB_TOKEN: ${{ secrets.NGINX_PAT }}
           SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_COMMUNITY }}
           SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_LOGIN }}
diff --git a/.golangci.yml b/.golangci.yml
index 68cbf519..bbdd7b97 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -27,24 +27,24 @@ linters-settings:
       - name: unused-parameter
       - name: var-declaration
       - name: var-naming
-  errcheck:
-    exclude-functions:
-      - (github.com/go-kit/log.Logger).Log
   govet:
     enable-all: true
+  sloglint:
+    static-msg: true
+    key-naming-case: snake
 linters:
   enable:
     - asasalint
     - asciicheck
     - bidichk
     - contextcheck
+    - copyloopvar
     - dupword
     - durationcheck
     - errcheck
     - errchkjson
     - errname
     - errorlint
-    - exportloopref
     - fatcontext
     - forcetypeassert
     - gocheckcompilerdirectives
@@ -74,6 +74,7 @@ linters:
     - promlinter
     - reassign
     - revive
+    - sloglint
     - staticcheck
     - stylecheck
     - tagalign
diff --git a/.goreleaser.yml b/.goreleaser.yml
index 23a0cd3c..b4295c2e 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -30,10 +30,6 @@ builds:
         goarch: arm
     flags:
       - -trimpath
-    gcflags:
-      - all=-trimpath={{.Env.GOPATH}}
-    asmflags:
-      - all=-trimpath={{.Env.GOPATH}}
     ldflags:
       - "-s -w -X github.com/prometheus/common/version.Version={{.Version}} -X github.com/prometheus/common/version.BuildDate={{.Date}} -X github.com/prometheus/common/version.Branch={{.Branch}} -X github.com/prometheus/common/version.BuildUser=goreleaser"
 
diff --git a/Makefile b/Makefile
index 2c8e614c..d2f4071e 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ nginx-prometheus-exporter: ## Build nginx-prometheus-exporter binary
 .PHONY: build-goreleaser
 build-goreleaser: ## Build all binaries using GoReleaser
 	@goreleaser -v || (code=$$?; printf "\033[0;31mError\033[0m: there was a problem with GoReleaser. Follow the docs to install it https://goreleaser.com/install\n"; exit $$code)
-	GOPATH=$(shell go env GOPATH) goreleaser build --clean --snapshot
+	goreleaser build --clean --snapshot
 
 .PHONY: lint
 lint: ## Run linter
diff --git a/collector/helper_test.go b/collector/helper_test.go
index 26780952..331fc934 100644
--- a/collector/helper_test.go
+++ b/collector/helper_test.go
@@ -34,7 +34,6 @@ func TestMergeLabels(t *testing.T) {
 		},
 	}
 	for _, tt := range tests {
-		tt := tt
 		t.Run(tt.name, func(t *testing.T) {
 			t.Parallel()
 			if got := MergeLabels(tt.mapA, tt.mapB); !reflect.DeepEqual(got, tt.want) {
diff --git a/collector/nginx.go b/collector/nginx.go
index 1b1b0d16..aada8b61 100644
--- a/collector/nginx.go
+++ b/collector/nginx.go
@@ -1,10 +1,9 @@
 package collector
 
 import (
+	"log/slog"
 	"sync"
 
-	"github.com/go-kit/log"
-	"github.com/go-kit/log/level"
 	"github.com/nginxinc/nginx-prometheus-exporter/client"
 	"github.com/prometheus/client_golang/prometheus"
 )
@@ -12,14 +11,14 @@ import (
 // NginxCollector collects NGINX metrics. It implements prometheus.Collector interface.
 type NginxCollector struct {
 	upMetric    prometheus.Gauge
-	logger      log.Logger
+	logger      *slog.Logger
 	nginxClient *client.NginxClient
 	metrics     map[string]*prometheus.Desc
 	mutex       sync.Mutex
 }
 
 // NewNginxCollector creates an NginxCollector.
-func NewNginxCollector(nginxClient *client.NginxClient, namespace string, constLabels map[string]string, logger log.Logger) *NginxCollector {
+func NewNginxCollector(nginxClient *client.NginxClient, namespace string, constLabels map[string]string, logger *slog.Logger) *NginxCollector {
 	return &NginxCollector{
 		nginxClient: nginxClient,
 		logger:      logger,
@@ -55,7 +54,7 @@ func (c *NginxCollector) Collect(ch chan<- prometheus.Metric) {
 	if err != nil {
 		c.upMetric.Set(nginxDown)
 		ch <- c.upMetric
-		level.Error(c.logger).Log("msg", "Error getting stats", "error", err.Error())
+		c.logger.Error("error getting stats", "error", err.Error())
 		return
 	}
 
diff --git a/collector/nginx_plus.go b/collector/nginx_plus.go
index d44d86e9..d6baab09 100644
--- a/collector/nginx_plus.go
+++ b/collector/nginx_plus.go
@@ -2,11 +2,10 @@ package collector
 
 import (
 	"fmt"
+	"log/slog"
 	"strconv"
 	"sync"
 
-	"github.com/go-kit/log"
-	"github.com/go-kit/log/level"
 	plusclient "github.com/nginxinc/nginx-plus-go-client/client"
 	"github.com/prometheus/client_golang/prometheus"
 )
@@ -32,7 +31,7 @@ type LabelUpdater interface {
 // NginxPlusCollector collects NGINX Plus metrics. It implements prometheus.Collector interface.
 type NginxPlusCollector struct {
 	upMetric                       prometheus.Gauge
-	logger                         log.Logger
+	logger                         *slog.Logger
 	cacheZoneMetrics               map[string]*prometheus.Desc
 	workerMetrics                  map[string]*prometheus.Desc
 	nginxClient                    *plusclient.NginxClient
@@ -256,7 +255,7 @@ func NewVariableLabelNames(upstreamServerVariableLabelNames []string, serverZone
 }
 
 // NewNginxPlusCollector creates an NginxPlusCollector.
-func NewNginxPlusCollector(nginxClient *plusclient.NginxClient, namespace string, variableLabelNames VariableLabelNames, constLabels map[string]string, logger log.Logger) *NginxPlusCollector {
+func NewNginxPlusCollector(nginxClient *plusclient.NginxClient, namespace string, variableLabelNames VariableLabelNames, constLabels map[string]string, logger *slog.Logger) *NginxPlusCollector {
 	upstreamServerVariableLabelNames := variableLabelNames.UpstreamServerVariableLabelNames
 	streamUpstreamServerVariableLabelNames := variableLabelNames.StreamUpstreamServerVariableLabelNames
 
@@ -627,7 +626,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 	if err != nil {
 		c.upMetric.Set(nginxDown)
 		ch <- c.upMetric
-		level.Warn(c.logger).Log("msg", "Error getting stats", "error", err.Error())
+		c.logger.Warn("error getting stats", "error", err.Error())
 		return
 	}
 
@@ -658,7 +657,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 		varLabelValues := c.getServerZoneLabelValues(name)
 
 		if c.variableLabelNames.ServerZoneVariableLabelNames != nil && len(varLabelValues) != len(c.variableLabelNames.ServerZoneVariableLabelNames) {
-			level.Warn(c.logger).Log("msg", "wrong number of labels for http zone, empty labels will be used instead", "zone", name, "expected", len(c.variableLabelNames.ServerZoneVariableLabelNames), "got", len(varLabelValues))
+			c.logger.Warn("wrong number of labels for http zone, empty labels will be used instead", "zone", name, "expected", len(c.variableLabelNames.ServerZoneVariableLabelNames), "got", len(varLabelValues))
 			for range c.variableLabelNames.ServerZoneVariableLabelNames {
 				labelValues = append(labelValues, "")
 			}
@@ -779,7 +778,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 		varLabelValues := c.getStreamServerZoneLabelValues(name)
 
 		if c.variableLabelNames.StreamServerZoneVariableLabelNames != nil && len(varLabelValues) != len(c.variableLabelNames.StreamServerZoneVariableLabelNames) {
-			level.Warn(c.logger).Log("msg", "wrong number of labels for stream server zone, empty labels will be used instead", "zone", name, "expected", len(c.variableLabelNames.StreamServerZoneVariableLabelNames), "got", len(varLabelValues))
+			c.logger.Warn("wrong number of labels for stream server zone, empty labels will be used instead", "zone", name, "expected", len(c.variableLabelNames.StreamServerZoneVariableLabelNames), "got", len(varLabelValues))
 			for range c.variableLabelNames.StreamServerZoneVariableLabelNames {
 				labelValues = append(labelValues, "")
 			}
@@ -816,7 +815,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 			varLabelValues := c.getUpstreamServerLabelValues(name)
 
 			if c.variableLabelNames.UpstreamServerVariableLabelNames != nil && len(varLabelValues) != len(c.variableLabelNames.UpstreamServerVariableLabelNames) {
-				level.Warn(c.logger).Log("msg", "wrong number of labels for upstream, empty labels will be used instead", "upstream", name, "expected", len(c.variableLabelNames.UpstreamServerVariableLabelNames), "got", len(varLabelValues))
+				c.logger.Warn("wrong number of labels for upstream, empty labels will be used instead", "upstream", name, "expected", len(c.variableLabelNames.UpstreamServerVariableLabelNames), "got", len(varLabelValues))
 				for range c.variableLabelNames.UpstreamServerVariableLabelNames {
 					labelValues = append(labelValues, "")
 				}
@@ -827,7 +826,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 			upstreamServer := fmt.Sprintf("%v/%v", name, peer.Server)
 			varPeerLabelValues := c.getUpstreamServerPeerLabelValues(upstreamServer)
 			if c.variableLabelNames.UpstreamServerPeerVariableLabelNames != nil && len(varPeerLabelValues) != len(c.variableLabelNames.UpstreamServerPeerVariableLabelNames) {
-				level.Warn(c.logger).Log("msg", "wrong number of labels for upstream peer, empty labels will be used instead", "upstream", name, "peer", peer.Server, "expected", len(c.variableLabelNames.UpstreamServerPeerVariableLabelNames), "got", len(varPeerLabelValues))
+				c.logger.Warn("wrong number of labels for upstream peer, empty labels will be used instead", "upstream", name, "peer", peer.Server, "expected", len(c.variableLabelNames.UpstreamServerPeerVariableLabelNames), "got", len(varPeerLabelValues))
 				for range c.variableLabelNames.UpstreamServerPeerVariableLabelNames {
 					labelValues = append(labelValues, "")
 				}
@@ -973,7 +972,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 			varLabelValues := c.getStreamUpstreamServerLabelValues(name)
 
 			if c.variableLabelNames.StreamUpstreamServerVariableLabelNames != nil && len(varLabelValues) != len(c.variableLabelNames.StreamUpstreamServerVariableLabelNames) {
-				level.Warn(c.logger).Log("msg", "wrong number of labels for stream server, empty labels will be used instead", "server", name, "labels", c.variableLabelNames.StreamUpstreamServerVariableLabelNames, "values", varLabelValues)
+				c.logger.Warn("wrong number of labels for stream server, empty labels will be used instead", "server", name, "labels", c.variableLabelNames.StreamUpstreamServerVariableLabelNames, "values", varLabelValues)
 				for range c.variableLabelNames.StreamUpstreamServerVariableLabelNames {
 					labelValues = append(labelValues, "")
 				}
@@ -984,7 +983,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 			upstreamServer := fmt.Sprintf("%v/%v", name, peer.Server)
 			varPeerLabelValues := c.getStreamUpstreamServerPeerLabelValues(upstreamServer)
 			if c.variableLabelNames.StreamUpstreamServerPeerVariableLabelNames != nil && len(varPeerLabelValues) != len(c.variableLabelNames.StreamUpstreamServerPeerVariableLabelNames) {
-				level.Warn(c.logger).Log("msg", "wrong number of labels for stream upstream peer, empty labels will be used instead", "server", upstreamServer, "labels", c.variableLabelNames.StreamUpstreamServerPeerVariableLabelNames, "values", varPeerLabelValues)
+				c.logger.Warn("wrong number of labels for stream upstream peer, empty labels will be used instead", "server", upstreamServer, "labels", c.variableLabelNames.StreamUpstreamServerPeerVariableLabelNames, "values", varPeerLabelValues)
 				for range c.variableLabelNames.StreamUpstreamServerPeerVariableLabelNames {
 					labelValues = append(labelValues, "")
 				}
@@ -1204,7 +1203,7 @@ func (c *NginxPlusCollector) Collect(ch chan<- prometheus.Metric) {
 		varLabelValues := c.getCacheZoneLabelValues(name)
 
 		if c.variableLabelNames.CacheZoneVariableLabelNames != nil && len(varLabelValues) != len(c.variableLabelNames.CacheZoneVariableLabelNames) {
-			level.Warn(c.logger).Log("msg", "wrong number of labels for cache zone, empty labels will be used instead", "zone", name, "labels", c.variableLabelNames.CacheZoneVariableLabelNames, "values", varLabelValues)
+			c.logger.Warn("wrong number of labels for cache zone, empty labels will be used instead", "zone", name, "labels", c.variableLabelNames.CacheZoneVariableLabelNames, "values", varLabelValues)
 			for range c.variableLabelNames.CacheZoneVariableLabelNames {
 				labelValues = append(labelValues, "")
 			}
diff --git a/exporter.go b/exporter.go
index b776bc59..88950983 100644
--- a/exporter.go
+++ b/exporter.go
@@ -6,6 +6,7 @@ import (
 	"crypto/x509"
 	"errors"
 	"fmt"
+	"log/slog"
 	"maps"
 	"net"
 	"net/http"
@@ -20,13 +21,11 @@ import (
 	"github.com/nginxinc/nginx-prometheus-exporter/collector"
 
 	"github.com/alecthomas/kingpin/v2"
-	"github.com/go-kit/log"
-	"github.com/go-kit/log/level"
 	"github.com/prometheus/client_golang/prometheus"
 	"github.com/prometheus/client_golang/prometheus/collectors/version"
 	"github.com/prometheus/client_golang/prometheus/promhttp"
-	"github.com/prometheus/common/promlog"
-	"github.com/prometheus/common/promlog/flag"
+	"github.com/prometheus/common/promslog"
+	"github.com/prometheus/common/promslog/flag"
 	common_version "github.com/prometheus/common/version"
 
 	"github.com/prometheus/exporter-toolkit/web"
@@ -110,24 +109,24 @@ func main() {
 		}
 	}
 
-	promlogConfig := &promlog.Config{}
+	config := &promslog.Config{}
 
-	flag.AddFlags(kingpin.CommandLine, promlogConfig)
+	flag.AddFlags(kingpin.CommandLine, config)
 	kingpin.Version(common_version.Print(exporterName))
 	kingpin.HelpFlag.Short('h')
 
 	addMissingEnvironmentFlags(kingpin.CommandLine)
 
 	kingpin.Parse()
-	logger := promlog.New(promlogConfig)
+	logger := promslog.New(config)
 
-	level.Info(logger).Log("msg", "Starting nginx-prometheus-exporter", "version", common_version.Info())
-	level.Info(logger).Log("msg", "Build context", "build_context", common_version.BuildContext())
+	logger.Info("nginx-prometheus-exporter", "version", common_version.Info())
+	logger.Info("build context", "build_context", common_version.BuildContext())
 
 	prometheus.MustRegister(version.NewCollector(exporterName))
 
 	if len(*scrapeURIs) == 0 {
-		level.Error(logger).Log("msg", "No scrape addresses provided")
+		logger.Error("no scrape addresses provided")
 		os.Exit(1)
 	}
 
@@ -136,13 +135,13 @@ func main() {
 	if *sslCaCert != "" {
 		caCert, err := os.ReadFile(*sslCaCert)
 		if err != nil {
-			level.Error(logger).Log("msg", "Loading CA cert failed", "err", err.Error())
+			logger.Error("loading CA cert failed", "err", err.Error())
 			os.Exit(1)
 		}
 		sslCaCertPool := x509.NewCertPool()
 		ok := sslCaCertPool.AppendCertsFromPEM(caCert)
 		if !ok {
-			level.Error(logger).Log("msg", "Parsing CA cert file failed.")
+			logger.Error("parsing CA cert file failed.")
 			os.Exit(1)
 		}
 		sslConfig.RootCAs = sslCaCertPool
@@ -151,7 +150,7 @@ func main() {
 	if *sslClientCert != "" && *sslClientKey != "" {
 		clientCert, err := tls.LoadX509KeyPair(*sslClientCert, *sslClientKey)
 		if err != nil {
-			level.Error(logger).Log("msg", "Loading client certificate failed", "error", err.Error())
+			logger.Error("loading client certificate failed", "error", err.Error())
 			os.Exit(1)
 		}
 		sslConfig.Certificates = []tls.Certificate{clientCert}
@@ -190,7 +189,7 @@ func main() {
 		}
 		landingPage, err := web.NewLandingPage(landingConfig)
 		if err != nil {
-			level.Error(logger).Log("err", err)
+			logger.Error("failed to create landing page", "error", err.Error())
 			os.Exit(1)
 		}
 		http.Handle("/", landingPage)
@@ -206,28 +205,28 @@ func main() {
 	go func() {
 		if err := web.ListenAndServe(srv, webConfig, logger); err != nil {
 			if errors.Is(err, http.ErrServerClosed) {
-				level.Info(logger).Log("msg", "HTTP server closed")
+				logger.Info("HTTP server closed", "error", err.Error())
 				os.Exit(0)
 			}
-			level.Error(logger).Log("err", err)
+			logger.Error("HTTP server failed", "error", err.Error())
 			os.Exit(1)
 		}
 	}()
 
 	<-ctx.Done()
-	level.Info(logger).Log("msg", "Shutting down")
+	logger.Info("shutting down")
 	srvCtx, srvCancel := context.WithTimeout(context.Background(), 5*time.Second)
 	defer srvCancel()
 	_ = srv.Shutdown(srvCtx)
 }
 
-func registerCollector(logger log.Logger, transport *http.Transport,
+func registerCollector(logger *slog.Logger, transport *http.Transport,
 	addr string, labels map[string]string,
 ) {
 	if strings.HasPrefix(addr, "unix:") {
 		socketPath, requestPath, err := parseUnixSocketAddress(addr)
 		if err != nil {
-			level.Error(logger).Log("msg", "Parsing unix domain socket scrape address failed", "uri", addr, "error", err.Error())
+			logger.Error("parsing unix domain socket scrape address failed", "uri", addr, "error", err.Error())
 			os.Exit(1)
 		}
 
@@ -250,7 +249,7 @@ func registerCollector(logger log.Logger, transport *http.Transport,
 	if *nginxPlus {
 		plusClient, err := plusclient.NewNginxClient(addr, plusclient.WithHTTPClient(httpClient))
 		if err != nil {
-			level.Error(logger).Log("msg", "Could not create Nginx Plus Client", "error", err.Error())
+			logger.Error("could not create Nginx Plus Client", "error", err.Error())
 			os.Exit(1)
 		}
 		variableLabelNames := collector.NewVariableLabelNames(nil, nil, nil, nil, nil, nil, nil)
diff --git a/exporter_test.go b/exporter_test.go
index b71bc7fa..7b248ebe 100644
--- a/exporter_test.go
+++ b/exporter_test.go
@@ -38,7 +38,6 @@ func TestParsePositiveDuration(t *testing.T) {
 		},
 	}
 	for _, tt := range tests {
-		tt := tt
 		t.Run(tt.name, func(t *testing.T) {
 			t.Parallel()
 			got, err := parsePositiveDuration(tt.testInput)
@@ -93,7 +92,6 @@ func TestParseUnixSocketAddress(t *testing.T) {
 		},
 	}
 	for _, tt := range tests {
-		tt := tt
 		t.Run(tt.name, func(t *testing.T) {
 			t.Parallel()
 			socketPath, requestPath, err := parseUnixSocketAddress(tt.testInput)
diff --git a/go.mod b/go.mod
index 255139fd..3b271f49 100644
--- a/go.mod
+++ b/go.mod
@@ -4,11 +4,10 @@ go 1.22.6
 
 require (
 	github.com/alecthomas/kingpin/v2 v2.4.0
-	github.com/go-kit/log v0.2.1
 	github.com/nginxinc/nginx-plus-go-client v1.3.0
 	github.com/prometheus/client_golang v1.20.3
 	github.com/prometheus/common v0.59.1
-	github.com/prometheus/exporter-toolkit v0.12.0
+	github.com/prometheus/exporter-toolkit v0.13.0
 )
 
 require (
@@ -16,7 +15,6 @@ require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
-	github.com/go-logfmt/logfmt v0.5.1 // indirect
 	github.com/jpillora/backoff v1.0.0 // indirect
 	github.com/klauspost/compress v1.17.9 // indirect
 	github.com/mdlayher/socket v0.4.1 // indirect
diff --git a/go.sum b/go.sum
index 26dbc2a9..ee488c54 100644
--- a/go.sum
+++ b/go.sum
@@ -11,10 +11,6 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -46,8 +42,8 @@ github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p
 github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
 github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0=
 github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0=
-github.com/prometheus/exporter-toolkit v0.12.0 h1:DkE5RcEZR3lQA2QD5JLVQIf41dFKNsVMXFhgqcif7fo=
-github.com/prometheus/exporter-toolkit v0.12.0/go.mod h1:fQH0KtTn0yrrS0S82kqppRjDDiwMfIQUwT+RBRRhwUc=
+github.com/prometheus/exporter-toolkit v0.13.0 h1:lmA0Q+8IaXgmFRKw09RldZmZdnvu9wwcDLIXGmTPw1c=
+github.com/prometheus/exporter-toolkit v0.13.0/go.mod h1:2uop99EZl80KdXhv/MxVI2181fMcwlsumFOqBecGkG0=
 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
 github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=