mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-10 12:36:37 +00:00
tcp: relax metrics collectos on error (#2041)
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
package udp
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
@@ -107,19 +108,21 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
|
||||
nil,
|
||||
)
|
||||
|
||||
errs := make([]error, 0)
|
||||
|
||||
var err error
|
||||
|
||||
c.perfDataCollector4, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "UDPv4", nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create UDPv4 collector: %w", err)
|
||||
errs = append(errs, fmt.Errorf("failed to create UDPv4 collector: %w", err))
|
||||
}
|
||||
|
||||
c.perfDataCollector6, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "UDPv6", nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create UDPv6 collector: %w", err)
|
||||
errs = append(errs, fmt.Errorf("failed to create UDPv6 collector: %w", err))
|
||||
}
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
// Collect sends the metric values for each metric
|
||||
@@ -129,46 +132,50 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
||||
err := c.perfDataCollector4.Collect(&c.perfDataObject4)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect UDPv4 metrics: %w", err)
|
||||
errs := make([]error, 0)
|
||||
|
||||
if err := c.perfDataCollector4.Collect(&c.perfDataObject4); err != nil {
|
||||
errs = append(errs, fmt.Errorf("failed to collect UDPv4 metrics: %w", err))
|
||||
} else if len(c.perfDataObject4) == 0 {
|
||||
errs = append(errs, fmt.Errorf("failed to collect UDPv4 metrics: %w", types.ErrNoDataUnexpected))
|
||||
} else {
|
||||
c.writeUDPCounters(ch, c.perfDataObject4, "ipv4")
|
||||
}
|
||||
|
||||
c.writeUDPCounters(ch, c.perfDataObject4, []string{"ipv4"})
|
||||
|
||||
err = c.perfDataCollector6.Collect(&c.perfDataObject6)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect UDPv6 metrics: %w", err)
|
||||
if err := c.perfDataCollector6.Collect(&c.perfDataObject6); err != nil {
|
||||
errs = append(errs, fmt.Errorf("failed to collect UDPv6 metrics: %w", err))
|
||||
} else if len(c.perfDataObject6) == 0 {
|
||||
errs = append(errs, fmt.Errorf("failed to collect UDPv6 metrics: %w", types.ErrNoDataUnexpected))
|
||||
} else {
|
||||
c.writeUDPCounters(ch, c.perfDataObject6, "ipv6")
|
||||
}
|
||||
|
||||
c.writeUDPCounters(ch, c.perfDataObject6, []string{"ipv6"})
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) writeUDPCounters(ch chan<- prometheus.Metric, metrics []perfDataCounterValues, labels []string) {
|
||||
func (c *Collector) writeUDPCounters(ch chan<- prometheus.Metric, metrics []perfDataCounterValues, af string) {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.datagramsNoPortTotal,
|
||||
prometheus.CounterValue,
|
||||
metrics[0].DatagramsNoPortPerSec,
|
||||
labels...,
|
||||
af,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.datagramsReceivedErrorsTotal,
|
||||
prometheus.CounterValue,
|
||||
metrics[0].DatagramsReceivedErrors,
|
||||
labels...,
|
||||
af,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.datagramsReceivedTotal,
|
||||
prometheus.GaugeValue,
|
||||
metrics[0].DatagramsReceivedPerSec,
|
||||
labels...,
|
||||
af,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.datagramsSentTotal,
|
||||
prometheus.CounterValue,
|
||||
metrics[0].DatagramsSentPerSec,
|
||||
labels...,
|
||||
af,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user