mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-08-20 18:33:52 -07:00
Update procfs+ (#36)
* update dependencies * fix mountstats * Fix the rest of mountstats * update golangci-lint version * appease linter
This commit is contained in:
parent
6300fab821
commit
612bdf9540
4
.github/workflows/golangci-lint.yml
vendored
4
.github/workflows/golangci-lint.yml
vendored
|
@ -25,7 +25,7 @@ jobs:
|
|||
- name: Install Go
|
||||
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
|
||||
with:
|
||||
go-version: 1.23.x
|
||||
go-version: 1.24.x
|
||||
- name: Install snmp_exporter/generator dependencies
|
||||
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
|
||||
if: github.repository == 'prometheus/snmp_exporter'
|
||||
|
@ -33,4 +33,4 @@ jobs:
|
|||
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
|
||||
with:
|
||||
args: --verbose
|
||||
version: v1.62.0
|
||||
version: v1.64.2
|
|
@ -7,10 +7,7 @@ linters:
|
|||
# positives when build tags disable certain files[2]
|
||||
# 1: https://github.com/golangci/golangci-lint/issues/1841
|
||||
# 2: https://github.com/prometheus/node_exporter/issues/1545
|
||||
- deadcode
|
||||
- unused
|
||||
- structcheck
|
||||
- varcheck
|
||||
|
||||
issues:
|
||||
exclude-rules:
|
||||
|
|
|
@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_
|
|||
SKIP_GOLANGCI_LINT :=
|
||||
GOLANGCI_LINT :=
|
||||
GOLANGCI_LINT_OPTS ?=
|
||||
GOLANGCI_LINT_VERSION ?= v1.54.2
|
||||
GOLANGCI_LINT_VERSION ?= v1.64.2
|
||||
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64.
|
||||
# windows isn't included here because of the path separator being different.
|
||||
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
|
||||
|
|
|
@ -432,7 +432,7 @@ func (c *ethtoolCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
}
|
||||
}
|
||||
|
||||
if stats == nil || len(stats) < 1 {
|
||||
if len(stats) < 1 {
|
||||
// No stats returned; device does not support ethtool stats.
|
||||
continue
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/node_exporter/collector/utils"
|
||||
"github.com/prometheus/procfs/sysfs"
|
||||
)
|
||||
|
||||
|
@ -125,23 +126,24 @@ func (c *fibrechannelCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
infoValue := 1.0
|
||||
|
||||
// First push the Host values
|
||||
ch <- prometheus.MustNewConstMetric(infoDesc, prometheus.GaugeValue, infoValue, host.Name, host.Speed, host.PortState, host.PortType, host.PortID, host.PortName, host.FabricName, host.SymbolicName, host.SupportedClasses, host.SupportedSpeeds, host.DevLossTMO)
|
||||
ch <- prometheus.MustNewConstMetric(infoDesc, prometheus.GaugeValue, infoValue,
|
||||
utils.SafeDereference(host.Name, host.Speed, host.PortState, host.PortType, host.PortID, host.PortName, host.FabricName, host.SymbolicName, host.SupportedClasses, host.SupportedSpeeds, host.DevLossTMO)...)
|
||||
|
||||
// Then the counters
|
||||
c.pushCounter(ch, "dumped_frames_total", host.Counters.DumpedFrames, host.Name)
|
||||
c.pushCounter(ch, "error_frames_total", host.Counters.ErrorFrames, host.Name)
|
||||
c.pushCounter(ch, "invalid_crc_total", host.Counters.InvalidCRCCount, host.Name)
|
||||
c.pushCounter(ch, "rx_frames_total", host.Counters.RXFrames, host.Name)
|
||||
c.pushCounter(ch, "rx_words_total", host.Counters.RXWords, host.Name)
|
||||
c.pushCounter(ch, "tx_frames_total", host.Counters.TXFrames, host.Name)
|
||||
c.pushCounter(ch, "tx_words_total", host.Counters.TXWords, host.Name)
|
||||
c.pushCounter(ch, "seconds_since_last_reset_total", host.Counters.SecondsSinceLastReset, host.Name)
|
||||
c.pushCounter(ch, "invalid_tx_words_total", host.Counters.InvalidTXWordCount, host.Name)
|
||||
c.pushCounter(ch, "link_failure_total", host.Counters.LinkFailureCount, host.Name)
|
||||
c.pushCounter(ch, "loss_of_sync_total", host.Counters.LossOfSyncCount, host.Name)
|
||||
c.pushCounter(ch, "loss_of_signal_total", host.Counters.LossOfSignalCount, host.Name)
|
||||
c.pushCounter(ch, "nos_total", host.Counters.NosCount, host.Name)
|
||||
c.pushCounter(ch, "fcp_packet_aborts_total", host.Counters.FCPPacketAborts, host.Name)
|
||||
c.pushCounter(ch, "dumped_frames_total", *host.Counters.DumpedFrames, *host.Name)
|
||||
c.pushCounter(ch, "error_frames_total", *host.Counters.ErrorFrames, *host.Name)
|
||||
c.pushCounter(ch, "invalid_crc_total", *host.Counters.InvalidCRCCount, *host.Name)
|
||||
c.pushCounter(ch, "rx_frames_total", *host.Counters.RXFrames, *host.Name)
|
||||
c.pushCounter(ch, "rx_words_total", *host.Counters.RXWords, *host.Name)
|
||||
c.pushCounter(ch, "tx_frames_total", *host.Counters.TXFrames, *host.Name)
|
||||
c.pushCounter(ch, "tx_words_total", *host.Counters.TXWords, *host.Name)
|
||||
c.pushCounter(ch, "seconds_since_last_reset_total", *host.Counters.SecondsSinceLastReset, *host.Name)
|
||||
c.pushCounter(ch, "invalid_tx_words_total", *host.Counters.InvalidTXWordCount, *host.Name)
|
||||
c.pushCounter(ch, "link_failure_total", *host.Counters.LinkFailureCount, *host.Name)
|
||||
c.pushCounter(ch, "loss_of_sync_total", *host.Counters.LossOfSyncCount, *host.Name)
|
||||
c.pushCounter(ch, "loss_of_signal_total", *host.Counters.LossOfSignalCount, *host.Name)
|
||||
c.pushCounter(ch, "nos_total", *host.Counters.NosCount, *host.Name)
|
||||
c.pushCounter(ch, "fcp_packet_aborts_total", *host.Counters.FCPPacketAborts, *host.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -536,16 +536,17 @@ func (c *mountStatsCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
miStats := mountsInfo[idx]
|
||||
mountAddress = miStats.SuperOptions["addr"]
|
||||
}
|
||||
for _, transport := range stats.Transport {
|
||||
deviceIdentifier := nfsDeviceIdentifier{m.Device, transport.Protocol, mountAddress}
|
||||
i := deviceList[deviceIdentifier]
|
||||
if i {
|
||||
c.logger.Debug("Skipping duplicate device entry", "device", deviceIdentifier)
|
||||
continue
|
||||
}
|
||||
|
||||
deviceIdentifier := nfsDeviceIdentifier{m.Device, stats.Transport.Protocol, mountAddress}
|
||||
i := deviceList[deviceIdentifier]
|
||||
if i {
|
||||
c.logger.Debug("Skipping duplicate device entry", "device", deviceIdentifier)
|
||||
continue
|
||||
deviceList[deviceIdentifier] = true
|
||||
c.updateNFSStats(ch, stats, m.Device, transport.Protocol, mountAddress)
|
||||
}
|
||||
|
||||
deviceList[deviceIdentifier] = true
|
||||
c.updateNFSStats(ch, stats, m.Device, stats.Transport.Protocol, mountAddress)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -616,76 +617,77 @@ func (c *mountStatsCollector) updateNFSStats(ch chan<- prometheus.Metric, s *pro
|
|||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBindTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.Bind),
|
||||
labelValues...,
|
||||
)
|
||||
for _, transport := range s.Transport {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBindTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.Bind),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportConnectTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.Connect),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportConnectTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.Connect),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportIdleTimeSeconds,
|
||||
prometheus.GaugeValue,
|
||||
float64(s.Transport.IdleTimeSeconds%float64Mantissa),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportIdleTimeSeconds,
|
||||
prometheus.GaugeValue,
|
||||
float64(transport.IdleTimeSeconds%float64Mantissa),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportSendsTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.Sends),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportSendsTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.Sends),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportReceivesTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.Receives),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportReceivesTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.Receives),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBadTransactionIDsTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.BadTransactionIDs),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBadTransactionIDsTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.BadTransactionIDs),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBacklogQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.CumulativeBacklog),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportBacklogQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.CumulativeBacklog),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportMaximumRPCSlots,
|
||||
prometheus.GaugeValue,
|
||||
float64(s.Transport.MaximumRPCSlotsUsed),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportMaximumRPCSlots,
|
||||
prometheus.GaugeValue,
|
||||
float64(transport.MaximumRPCSlotsUsed),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportSendingQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.CumulativeSendingQueue),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportPendingQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(s.Transport.CumulativePendingQueue),
|
||||
labelValues...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportSendingQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.CumulativeSendingQueue),
|
||||
labelValues...,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NFSTransportPendingQueueTotal,
|
||||
prometheus.CounterValue,
|
||||
float64(transport.CumulativePendingQueue),
|
||||
labelValues...,
|
||||
)
|
||||
}
|
||||
for _, op := range s.Operations {
|
||||
opLabelValues := []string{export, protocol, mountAddress, op.Operation}
|
||||
|
||||
|
|
47
collector/utils/utils.go
Normal file
47
collector/utils/utils.go
Normal file
|
@ -0,0 +1,47 @@
|
|||
// Copyright 2024 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func SafeDereference[T any](s ...*T) []T {
|
||||
var resolved []T
|
||||
for _, v := range s {
|
||||
if v != nil {
|
||||
resolved = append(resolved, *v)
|
||||
} else {
|
||||
var zeroValue T
|
||||
resolved = append(resolved, zeroValue)
|
||||
}
|
||||
}
|
||||
return resolved
|
||||
}
|
||||
|
||||
// SafeBytesToString takes a slice of bytes and sanitizes it for Prometheus label
|
||||
// values.
|
||||
// * Terminate the string at the first null byte.
|
||||
// * Convert any invalid UTF-8 to "<22>".
|
||||
func SafeBytesToString(b []byte) string {
|
||||
var s string
|
||||
zeroIndex := bytes.IndexByte(b, 0)
|
||||
if zeroIndex == -1 {
|
||||
s = string(b)
|
||||
} else {
|
||||
s = string(b[:zeroIndex])
|
||||
}
|
||||
return strings.ToValidUTF8(s, "<22>")
|
||||
}
|
30
collector/utils/utils_test.go
Normal file
30
collector/utils/utils_test.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2025 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file ewcept in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSafeBytesToString(t *testing.T) {
|
||||
foo := []byte("foo\x00")
|
||||
if want, got := SafeBytesToString(foo), "foo"; want != got {
|
||||
t.Errorf("Expected: %s, Got: %s", want, got)
|
||||
}
|
||||
|
||||
foo = []byte{115, 97, 110, 101, 253, 190, 214}
|
||||
if want, got := SafeBytesToString(foo), "sane<6E>"; want != got {
|
||||
t.Errorf("Expected: %s, Got: %s", want, got)
|
||||
}
|
||||
}
|
19
go.mod
19
go.mod
|
@ -1,8 +1,8 @@
|
|||
module github.com/prometheus/node_exporter
|
||||
|
||||
go 1.22
|
||||
go 1.23.0
|
||||
|
||||
toolchain go1.23.5
|
||||
toolchain go1.24.1
|
||||
|
||||
require (
|
||||
github.com/alecthomas/kingpin/v2 v2.4.0
|
||||
|
@ -23,14 +23,14 @@ require (
|
|||
github.com/mdlayher/wifi v0.1.0
|
||||
github.com/opencontainers/selinux v1.11.0
|
||||
github.com/prometheus-community/go-runit v0.1.0
|
||||
github.com/prometheus/client_golang v1.20.5
|
||||
github.com/prometheus/client_golang v1.22.0
|
||||
github.com/prometheus/client_model v0.6.1
|
||||
github.com/prometheus/common v0.62.0
|
||||
github.com/prometheus/exporter-toolkit v0.14.0
|
||||
github.com/prometheus/procfs v0.15.1
|
||||
github.com/prometheus/procfs v0.16.1
|
||||
github.com/safchain/ethtool v0.3.0
|
||||
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
|
||||
golang.org/x/sys v0.29.0
|
||||
golang.org/x/sys v0.32.0
|
||||
howett.net/plist v1.0.0
|
||||
)
|
||||
|
||||
|
@ -39,9 +39,8 @@ require (
|
|||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dennwc/ioctl v1.0.0 // indirect
|
||||
github.com/google/go-cmp v0.6.0 // indirect
|
||||
github.com/google/go-cmp v0.7.0 // indirect
|
||||
github.com/jpillora/backoff v1.0.0 // indirect
|
||||
github.com/klauspost/compress v1.17.9 // indirect
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
github.com/mdlayher/genetlink v1.3.2 // indirect
|
||||
github.com/mdlayher/socket v0.4.1 // indirect
|
||||
|
@ -55,10 +54,8 @@ require (
|
|||
golang.org/x/crypto v0.32.0 // indirect
|
||||
golang.org/x/net v0.33.0 // indirect
|
||||
golang.org/x/oauth2 v0.24.0 // indirect
|
||||
golang.org/x/sync v0.10.0 // indirect
|
||||
golang.org/x/sync v0.13.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
google.golang.org/protobuf v1.36.1 // indirect
|
||||
google.golang.org/protobuf v1.36.5 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/prometheus/procfs => github.com/prometheus/procfs v0.12.0
|
||||
|
|
28
go.sum
28
go.sum
|
@ -24,8 +24,8 @@ github.com/ema/qdisc v1.0.0/go.mod h1:FhIc0fLYi7f+lK5maMsesDqwYojIOh3VfRs8EVd5YJ
|
|||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
||||
github.com/godbus/dbus/v5 v5.1.0/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=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/hashicorp/go-envparse v0.1.0 h1:bE++6bhIsNCPLvgDZkYqo3nA+/PFI51pkrHdmPSDFPY=
|
||||
github.com/hashicorp/go-envparse v0.1.0/go.mod h1:OHheN1GoygLlAkTlXLXvAdnXdZxy8JUweQ1rAXx1xnc=
|
||||
github.com/hodgesds/perf-utils v0.7.0 h1:7KlHGMuig4FRH5fNw68PV6xLmgTe7jKs9hgAcEAbioU=
|
||||
|
@ -39,8 +39,8 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E
|
|||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/jsimonetti/rtnetlink v1.3.5 h1:hVlNQNRlLDGZz31gBPicsG7Q53rnlsz1l1Ix/9XlpVA=
|
||||
github.com/jsimonetti/rtnetlink v1.3.5/go.mod h1:0LFedyiTkebnd43tE4YAkWGIq9jQphow4CcwxaT2Y00=
|
||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
||||
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
|
@ -73,16 +73,16 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus-community/go-runit v0.1.0 h1:uTWEj/Fn2RoLdfg/etSqwzgYNOYPrARx1BHUN052tGA=
|
||||
github.com/prometheus-community/go-runit v0.1.0/go.mod h1:AvJ9Jo3gAFu2lbM4+qfjdpq30FfiLDJZKbQ015u08IQ=
|
||||
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
|
||||
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
||||
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
|
||||
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
|
||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
||||
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
|
||||
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
|
||||
github.com/prometheus/exporter-toolkit v0.14.0 h1:NMlswfibpcZZ+H0sZBiTjrA3/aBFHkNZqE+iCj5EmRg=
|
||||
github.com/prometheus/exporter-toolkit v0.14.0/go.mod h1:Gu5LnVvt7Nr/oqTBUC23WILZepW0nffNo10XdhQcwWA=
|
||||
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
|
||||
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||
github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0=
|
||||
|
@ -128,8 +128,8 @@ golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbht
|
|||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
|
||||
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
@ -141,8 +141,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
|
@ -161,8 +161,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
|||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
||||
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
|
||||
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
|
|
Loading…
Reference in a new issue