mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-11-10 07:34:09 -08:00
20b551ab2b
Remove all hardcoded references to `/proc`. For all collectors that do not use `github.com/prometheus/procfs` yet, provide a wrapper to generate the full paths. Reformulate help strings, errors and comments to remove absolute references to `/proc`. This is a breaking change: the `-collector.ipvs.procfs` flag is removed in favor of the general flag. Since it only affected that collector it was only useful for development, so this should not cause many issues.
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
// +build !nofilesystem
|
|
|
|
package collector
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"syscall"
|
|
|
|
"github.com/prometheus/log"
|
|
)
|
|
|
|
const (
|
|
defIgnoredMountPoints = "^/(sys|proc|dev)($|/)"
|
|
)
|
|
|
|
var (
|
|
filesystemLabelNames = []string{"device", "mountpoint", "fstype"}
|
|
)
|
|
|
|
type filesystemDetails struct {
|
|
device string
|
|
mountPoint string
|
|
fsType string
|
|
}
|
|
|
|
// Expose filesystem fullness.
|
|
func (c *filesystemCollector) GetStats() (stats []filesystemStats, err error) {
|
|
mpds, err := mountPointDetails()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
stats = []filesystemStats{}
|
|
for _, mpd := range mpds {
|
|
if c.ignoredMountPointsPattern.MatchString(mpd.mountPoint) {
|
|
log.Debugf("Ignoring mount point: %s", mpd.mountPoint)
|
|
continue
|
|
}
|
|
buf := new(syscall.Statfs_t)
|
|
err := syscall.Statfs(mpd.mountPoint, buf)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Statfs on %s returned %s",
|
|
mpd.mountPoint, err)
|
|
}
|
|
|
|
labelValues := []string{mpd.device, mpd.mountPoint, mpd.fsType}
|
|
stats = append(stats, filesystemStats{
|
|
labelValues: labelValues,
|
|
size: float64(buf.Blocks) * float64(buf.Bsize),
|
|
free: float64(buf.Bfree) * float64(buf.Bsize),
|
|
avail: float64(buf.Bavail) * float64(buf.Bsize),
|
|
files: float64(buf.Files),
|
|
filesFree: float64(buf.Ffree),
|
|
})
|
|
}
|
|
return stats, nil
|
|
}
|
|
|
|
func mountPointDetails() ([]filesystemDetails, error) {
|
|
file, err := os.Open(procFilePath("mounts"))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer file.Close()
|
|
|
|
filesystems := []filesystemDetails{}
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
parts := strings.Fields(scanner.Text())
|
|
filesystems = append(filesystems, filesystemDetails{parts[0], parts[1], parts[2]})
|
|
}
|
|
return filesystems, nil
|
|
}
|