mirror of
https://github.com/replicatedhq/troubleshoot.git
synced 2026-04-15 07:16:34 +00:00
diskUsage host collector traverse file tree for directory exists
This commit is contained in:
@@ -3,6 +3,8 @@ package collect
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
@@ -20,9 +22,14 @@ func HostDiskUsage(c *HostCollector) (map[string][]byte, error) {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
du, err := disk.Usage(c.Collect.DiskUsage.Path)
|
||||
pathExists, err := traverseFiletreeDirExists(c.Collect.DiskUsage.Path)
|
||||
if err != nil {
|
||||
return result, errors.Wrapf(err, "collect disk usage for %s", c.Collect.DiskUsage.Path)
|
||||
return result, errors.Wrap(err, "traverse file tree")
|
||||
}
|
||||
|
||||
du, err := disk.Usage(pathExists)
|
||||
if err != nil {
|
||||
return result, errors.Wrapf(err, "collect disk usage for %s", pathExists)
|
||||
}
|
||||
diskSpaceInfo := DiskUsageInfo{
|
||||
TotalBytes: du.Total,
|
||||
@@ -41,3 +48,21 @@ func HostDiskUsage(c *HostCollector) (map[string][]byte, error) {
|
||||
func HostDiskUsageKey(name string) string {
|
||||
return fmt.Sprintf("diskUsage/%s.json", name)
|
||||
}
|
||||
|
||||
func traverseFiletreeDirExists(filename string) (string, error) {
|
||||
filename = filepath.Clean(filename)
|
||||
for i := 0; i < 50; i++ {
|
||||
_, err := os.Stat(filename)
|
||||
if err == nil {
|
||||
return filename, nil
|
||||
} else if os.IsNotExist(err) {
|
||||
filename = filepath.Dir(filename)
|
||||
if filename == "/" {
|
||||
return filename, nil
|
||||
}
|
||||
} else {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return "", errors.New("max recursion exceeded")
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ func HostFilesystemPerformance(c *HostCollector) (map[string][]byte, error) {
|
||||
if c.Collect.FilesystemPerformance.Directory == "" {
|
||||
return nil, errors.New("Directory is required to collect filesystem performance info")
|
||||
}
|
||||
// TODO: clean up this directory if its created
|
||||
if err := os.MkdirAll(c.Collect.FilesystemPerformance.Directory, 0700); err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to mkdir %q", c.Collect.FilesystemPerformance.Directory)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user