parent
8fff2f7c67
commit
0a2a54ff2d
@ -0,0 +1,65 @@ |
||||
// Copyright 2024 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build !nofilesystem
|
||||
// +build !nofilesystem
|
||||
|
||||
package collector |
||||
|
||||
import ( |
||||
"github.com/power-devops/perfstat" |
||||
) |
||||
|
||||
const ( |
||||
defMountPointsExcluded = "^/(dev|aha)($|/)" |
||||
defFSTypesExcluded = "^procfs$" |
||||
) |
||||
|
||||
// Expose filesystem fullness.
|
||||
func (c *filesystemCollector) GetStats() (stats []filesystemStats, err error) { |
||||
fsStat, err := perfstat.FileSystemStat() |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
for _, stat := range fsStat { |
||||
if c.excludedMountPointsPattern.MatchString(stat.MountPoint) { |
||||
c.logger.Debug("Ignoring mount point", "mountpoint", stat.MountPoint) |
||||
continue |
||||
} |
||||
fstype := stat.TypeString() |
||||
if c.excludedFSTypesPattern.MatchString(fstype) { |
||||
c.logger.Debug("Ignoring fs type", "type", fstype) |
||||
continue |
||||
} |
||||
|
||||
ro := 0.0 |
||||
if stat.Flags&perfstat.VFS_READONLY != 0 { |
||||
ro = 1.0 |
||||
} |
||||
|
||||
stats = append(stats, filesystemStats{ |
||||
labels: filesystemLabels{ |
||||
device: stat.Device, |
||||
mountPoint: stat.MountPoint, |
||||
fsType: fstype, |
||||
}, |
||||
size: float64(stat.TotalBlocks / 512.0), |
||||
free: float64(stat.FreeBlocks / 512.0), |
||||
avail: float64(stat.FreeBlocks / 512.0), // AIX doesn't distinguish between free and available blocks.
|
||||
files: float64(stat.TotalInodes), |
||||
filesFree: float64(stat.FreeInodes), |
||||
ro: ro, |
||||
}) |
||||
} |
||||
return stats, nil |
||||
} |
||||
Loading…
Reference in new issue