Simplify system.DiskUsage() (#2630)

This commit is contained in:
Nikolay Denev
2017-04-18 19:42:58 +01:00
committed by Daniel Nelson
parent 018bb9d742
commit cc44150054
8 changed files with 212 additions and 28 deletions

View File

@@ -23,6 +23,13 @@ type PS interface {
NetConnections() ([]net.ConnectionStat, error)
}
type PSDiskDeps interface {
Partitions(all bool) ([]disk.PartitionStat, error)
OSGetenv(key string) string
OSStat(name string) (os.FileInfo, error)
PSDiskUsage(path string) (*disk.UsageStat, error)
}
func add(acc telegraf.Accumulator,
name string, val float64, tags map[string]string) {
if val >= 0 {
@@ -30,7 +37,15 @@ func add(acc telegraf.Accumulator,
}
}
type systemPS struct{}
func newSystemPS() *systemPS {
return &systemPS{&systemPSDisk{}}
}
type systemPS struct {
PSDiskDeps
}
type systemPSDisk struct{}
func (s *systemPS) CPUTimes(perCPU, totalCPU bool) ([]cpu.TimesStat, error) {
var cpuTimes []cpu.TimesStat
@@ -55,7 +70,7 @@ func (s *systemPS) DiskUsage(
mountPointFilter []string,
fstypeExclude []string,
) ([]*disk.UsageStat, []*disk.PartitionStat, error) {
parts, err := disk.Partitions(true)
parts, err := s.Partitions(true)
if err != nil {
return nil, nil, err
}
@@ -74,35 +89,34 @@ func (s *systemPS) DiskUsage(
var partitions []*disk.PartitionStat
for i := range parts {
p := parts[i]
if len(mountPointFilter) > 0 {
// If the mount point is not a member of the filter set,
// don't gather info on it.
_, ok := mountPointFilterSet[p.Mountpoint]
if !ok {
if _, ok := mountPointFilterSet[p.Mountpoint]; !ok {
continue
}
}
mountpoint := os.Getenv("HOST_MOUNT_PREFIX") + p.Mountpoint
if _, err := os.Stat(mountpoint); err == nil {
du, err := disk.Usage(mountpoint)
if err != nil {
return nil, nil, err
}
du.Path = p.Mountpoint
// If the mount point is a member of the exclude set,
// don't gather info on it.
_, ok := fstypeExcludeSet[p.Fstype]
if ok {
continue
}
du.Fstype = p.Fstype
usage = append(usage, du)
partitions = append(partitions, &p)
// If the mount point is a member of the exclude set,
// don't gather info on it.
if _, ok := fstypeExcludeSet[p.Fstype]; ok {
continue
}
mountpoint := s.OSGetenv("HOST_MOUNT_PREFIX") + p.Mountpoint
if _, err := s.OSStat(mountpoint); err != nil {
continue
}
du, err := s.PSDiskUsage(mountpoint)
if err != nil {
continue
}
du.Path = p.Mountpoint
du.Fstype = p.Fstype
usage = append(usage, du)
partitions = append(partitions, &p)
}
return usage, partitions, nil
@@ -136,3 +150,19 @@ func (s *systemPS) VMStat() (*mem.VirtualMemoryStat, error) {
func (s *systemPS) SwapStat() (*mem.SwapMemoryStat, error) {
return mem.SwapMemory()
}
func (s *systemPSDisk) Partitions(all bool) ([]disk.PartitionStat, error) {
return disk.Partitions(all)
}
func (s *systemPSDisk) OSGetenv(key string) string {
return os.Getenv(key)
}
func (s *systemPSDisk) OSStat(name string) (os.FileInfo, error) {
return os.Stat(name)
}
func (s *systemPSDisk) PSDiskUsage(path string) (*disk.UsageStat, error) {
return disk.Usage(path)
}