GetStats returns filesystem stats.
()
| 32 | |
| 33 | // GetStats returns filesystem stats. |
| 34 | func (c *filesystemCollector) GetStats() ([]filesystemStats, error) { |
| 35 | mps, err := mountPointDetails() |
| 36 | if err != nil { |
| 37 | return nil, err |
| 38 | } |
| 39 | stats := []filesystemStats{} |
| 40 | for _, labels := range mps { |
| 41 | if c.ignoredMountPointsPattern.MatchString(labels.mountPoint) { |
| 42 | log.Debugf("ignoring mount point: %s", labels.mountPoint) |
| 43 | continue |
| 44 | } |
| 45 | if c.ignoredFSTypesPattern.MatchString(labels.fsType) { |
| 46 | log.Debugf("ignoring fs type: %s", labels.fsType) |
| 47 | continue |
| 48 | } |
| 49 | |
| 50 | buf := new(syscall.Statfs_t) |
| 51 | err := syscall.Statfs(labels.mountPoint, buf) |
| 52 | if err != nil { |
| 53 | stats = append(stats, filesystemStats{ |
| 54 | labels: labels, |
| 55 | deviceError: 1, |
| 56 | }) |
| 57 | log.Debugf("error on statfs() system call for %q: %s", labels.mountPoint, err) |
| 58 | continue |
| 59 | } |
| 60 | |
| 61 | var ro float64 |
| 62 | if (buf.Flags & readOnly) != 0 { |
| 63 | ro = 1 |
| 64 | } |
| 65 | |
| 66 | stats = append(stats, filesystemStats{ |
| 67 | labels: labels, |
| 68 | size: float64(buf.Blocks) * float64(buf.Bsize), |
| 69 | free: float64(buf.Bfree) * float64(buf.Bsize), |
| 70 | avail: float64(buf.Bavail) * float64(buf.Bsize), |
| 71 | files: float64(buf.Files), |
| 72 | filesFree: float64(buf.Ffree), |
| 73 | ro: ro, |
| 74 | }) |
| 75 | } |
| 76 | return stats, nil |
| 77 | } |
| 78 | |
| 79 | func mountPointDetails() ([]filesystemLabels, error) { |
| 80 | file, err := os.Open(procFilePath("mounts")) |
nothing calls this directly
no test coverage detected