diff --git a/collectors/cpufreqCpuinfoMetric.go b/collectors/cpufreqCpuinfoMetric.go index 4163436..369eb29 100644 --- a/collectors/cpufreqCpuinfoMetric.go +++ b/collectors/cpufreqCpuinfoMetric.go @@ -116,6 +116,9 @@ func (m *CPUFreqCpuInfoCollector) Init(_ json.RawMessage) error { physicalPackageID = "" } } + if err := scanner.Err(); err != nil { + return fmt.Errorf("%s Init(): Call to scanner.Err failed: %w", m.name, err) + } if err := file.Close(); err != nil { return fmt.Errorf("%s Init(): Call to file.Close() failed: %w", m.name, err) @@ -179,6 +182,9 @@ func (m *CPUFreqCpuInfoCollector) Read(interval time.Duration, output chan lp.CC } } } + if err := scanner.Err(); err != nil { + cclog.ComponentErrorf(m.name, "Read(): Call to scanner.Err failed: %s", err.Error()) + } } func (m *CPUFreqCpuInfoCollector) Close() { diff --git a/collectors/cpustatMetric.go b/collectors/cpustatMetric.go index 1045f51..7861497 100644 --- a/collectors/cpustatMetric.go +++ b/collectors/cpustatMetric.go @@ -44,7 +44,7 @@ type CpustatCollector struct { func (m *CpustatCollector) Init(config json.RawMessage) error { m.name = "CpustatCollector" if err := m.setup(); err != nil { - return fmt.Errorf("%s Init(): setup() call failed: %w", m.name, err) + return fmt.Errorf("%s Init(): setup() call failed: %s", m.name, err.Error()) } m.parallel = true m.meta = map[string]string{ @@ -58,7 +58,7 @@ func (m *CpustatCollector) Init(config json.RawMessage) error { d := json.NewDecoder(bytes.NewReader(config)) d.DisallowUnknownFields() if err := d.Decode(&m.config); err != nil { - return fmt.Errorf("%s Init(): Error decoding JSON config: %w", m.name, err) + return fmt.Errorf("%s Init(): Error decoding JSON config: %s", m.name, err.Error()) } } matches := map[string]int{ @@ -85,7 +85,7 @@ func (m *CpustatCollector) Init(config json.RawMessage) error { // Check input file file, err := os.Open(CPUSTATFILE) if err != nil { - return fmt.Errorf("%s Init(): Failed to open file '%s': %w", m.name, CPUSTATFILE, err) + return fmt.Errorf("%s Init(): Failed to open file '%s': %s", m.name, CPUSTATFILE, err.Error()) } // Pre-generate tags for all CPUs @@ -117,10 +117,13 @@ func (m *CpustatCollector) Init(config json.RawMessage) error { num_cpus++ } } + if err := scanner.Err(); err != nil { + return fmt.Errorf("%s Init(): Call to scanner.Err failed: %s", m.name, err.Error()) + } // Close file if err := file.Close(); err != nil { - return fmt.Errorf("%s Init(): Failed to close file '%s': %w", m.name, CPUSTATFILE, err) + return fmt.Errorf("%s Init(): Failed to close file '%s': %s", m.name, CPUSTATFILE, err.Error()) } m.lastTimestamp = time.Now() @@ -173,13 +176,13 @@ func (m *CpustatCollector) Read(interval time.Duration, output chan lp.CCMessage if err != nil { cclog.ComponentError( m.name, - fmt.Sprintf("Read(): Failed to open file '%s': %v", CPUSTATFILE, err)) + fmt.Sprintf("Read(): Failed to open file '%s': %v", CPUSTATFILE, err.Error())) } defer func() { if err := file.Close(); err != nil { cclog.ComponentError( m.name, - fmt.Sprintf("Read(): Failed to close file '%s': %v", string(CPUSTATFILE), err)) + fmt.Sprintf("Read(): Failed to close file '%s': %v", string(CPUSTATFILE), err.Error())) } }() @@ -194,6 +197,9 @@ func (m *CpustatCollector) Read(interval time.Duration, output chan lp.CCMessage num_cpus++ } } + if err := scanner.Err(); err != nil { + cclog.ComponentErrorf(m.name, "Init(): Call to scanner.Err failed: %s", err.Error()) + } if !m.config.excludeNumCPUs { if num_cpus_metric, err := lp.NewMetric("num_cpus", m.nodetags, m.meta, num_cpus, now); err == nil { diff --git a/collectors/diskstatMetric.go b/collectors/diskstatMetric.go index 5f133b7..6a7f577 100644 --- a/collectors/diskstatMetric.go +++ b/collectors/diskstatMetric.go @@ -147,6 +147,11 @@ mountLoop: } } } + if err := scanner.Err(); err != nil { + cclog.ComponentErrorf( + m.name, + "Read(): Call to scanner.Err failed: %s", err.Error()) + } if m.allowedMetrics["part_max_used"] { y, err := lp.NewMetric("part_max_used", map[string]string{"type": "node"}, m.meta, int(part_max_used), time.Now()) if err == nil { diff --git a/collectors/iostatMetric.go b/collectors/iostatMetric.go index a71f9b3..a0eb9f6 100644 --- a/collectors/iostatMetric.go +++ b/collectors/iostatMetric.go @@ -48,13 +48,13 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { m.parallel = true m.meta = map[string]string{"source": m.name, "group": "Disk"} if err := m.setup(); err != nil { - return fmt.Errorf("%s Init(): setup() call failed: %w", m.name, err) + return fmt.Errorf("%s Init(): setup() call failed: %s", m.name, err.Error()) } if len(config) > 0 { d := json.NewDecoder(bytes.NewReader(config)) d.DisallowUnknownFields() if err := d.Decode(&m.config); err != nil { - return fmt.Errorf("%s Init(): Error decoding JSON config: %w", m.name, err) + return fmt.Errorf("%s Init(): Error decoding JSON config: %s", m.name, err.Error()) } } // https://www.kernel.org/doc/html/latest/admin-guide/iostats.html @@ -89,7 +89,7 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { } file, err := os.Open(IOSTATFILE) if err != nil { - return fmt.Errorf("%s Init(): Failed to open file \"%s\": %w", m.name, IOSTATFILE, err) + return fmt.Errorf("%s Init(): Failed to open file \"%s\": %s", m.name, IOSTATFILE, err.Error()) } scanner := bufio.NewScanner(file) @@ -130,8 +130,11 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { lastValues: lastValues, } } + if err := scanner.Err(); err != nil { + return fmt.Errorf("%s Init(): Failed to scan content of file %q: %s", m.name, IOSTATFILE, err.Error()) + } if err := file.Close(); err != nil { - return fmt.Errorf("%s Init(): Failed to close file \"%s\": %w", m.name, IOSTATFILE, err) + return fmt.Errorf("%s Init(): Failed to close file \"%s\": %s", m.name, IOSTATFILE, err.Error()) } m.init = true @@ -147,14 +150,14 @@ func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMessage) if err != nil { cclog.ComponentError( m.name, - fmt.Sprintf("Read(): Failed to open file '%s': %v", IOSTATFILE, err)) + fmt.Sprintf("Read(): Failed to open file '%s': %s", IOSTATFILE, err.Error())) return } defer func() { if err := file.Close(); err != nil { cclog.ComponentError( m.name, - fmt.Sprintf("Read(): Failed to close file '%s': %v", IOSTATFILE, err)) + fmt.Sprintf("Read(): Failed to close file '%s': %s", IOSTATFILE, err.Error())) } }() @@ -198,6 +201,11 @@ func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMessage) } m.devices[device] = entry } + if err := scanner.Err(); err != nil { + cclog.ComponentErrorf( + m.name, + "Read(): Failed to scan content of file %q: %s", IOSTATFILE, err.Error()) + } } func (m *IOstatCollector) Close() { diff --git a/collectors/ipmiMetric.go b/collectors/ipmiMetric.go index 3740f4c..82fdb2b 100644 --- a/collectors/ipmiMetric.go +++ b/collectors/ipmiMetric.go @@ -165,6 +165,9 @@ func (m *IpmiCollector) readIpmiTool(output chan lp.CCMessage) error { y.AddMeta("unit", unit) output <- y } + if err := scanner.Err(); err != nil { + return fmt.Errorf("failed to scan output of command: %s", err.Error()) + } // Wait for command end if err := command.Wait(); err != nil {