From 8b93f7ee212d9e78b3a7260d0f7ae550e454795f Mon Sep 17 00:00:00 2001 From: exterr2f Date: Wed, 19 Feb 2025 00:50:13 +0100 Subject: [PATCH] add exclude_device for iostatMetric --- collectors/iostatMetric.go | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/collectors/iostatMetric.go b/collectors/iostatMetric.go index 8715d7e..5df0469 100644 --- a/collectors/iostatMetric.go +++ b/collectors/iostatMetric.go @@ -2,24 +2,24 @@ package collectors import ( "bufio" - "os" - - cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" - - // "log" "encoding/json" "errors" + "os" "strconv" "strings" "time" + + cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" + lp "github.com/ClusterCockpit/cc-lib/ccMessage" ) +// Konstante für den Pfad zu /proc/diskstats const IOSTATFILE = `/proc/diskstats` -const IOSTAT_SYSFSPATH = `/sys/block` type IOstatCollectorConfig struct { ExcludeMetrics []string `json:"exclude_metrics,omitempty"` + // Neues Feld zum Ausschließen von Devices per JSON-Konfiguration + ExcludeDevices []string `json:"exclude_devices,omitempty"` } type IOstatCollectorEntry struct { @@ -76,7 +76,7 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { if len(m.matches) == 0 { return errors.New("no metrics to collect") } - file, err := os.Open(string(IOSTATFILE)) + file, err := os.Open(IOSTATFILE) if err != nil { cclog.ComponentError(m.name, err.Error()) return err @@ -87,17 +87,24 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { for scanner.Scan() { line := scanner.Text() linefields := strings.Fields(line) + if len(linefields) < 3 { + continue + } device := linefields[2] + if strings.Contains(device, "loop") { continue } + if _, skip := stringArrayContains(m.config.ExcludeDevices, device); skip { + continue + } values := make(map[string]int64) for m := range m.matches { values[m] = 0 } m.devices[device] = IOstatCollectorEntry{ tags: map[string]string{ - "device": linefields[2], + "device": device, "type": "node", }, lastValues: values, @@ -112,7 +119,7 @@ func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMessage) return } - file, err := os.Open(string(IOSTATFILE)) + file, err := os.Open(IOSTATFILE) if err != nil { cclog.ComponentError(m.name, err.Error()) return @@ -126,10 +133,16 @@ func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMessage) continue } linefields := strings.Fields(line) + if len(linefields) < 3 { + continue + } device := linefields[2] if strings.Contains(device, "loop") { continue } + if _, skip := stringArrayContains(m.config.ExcludeDevices, device); skip { + continue + } if _, ok := m.devices[device]; !ok { continue }