diff --git a/disk/disk_windows.go b/disk/disk_windows.go index 5fb9b5b..b7f0c51 100644 --- a/disk/disk_windows.go +++ b/disk/disk_windows.go @@ -80,6 +80,9 @@ func UsageWithContext(ctx context.Context, path string) (*UsageStat, error) { } func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) { + warnings := common.Warnings{ + Verbose: true, + } var ret []PartitionStat lpBuffer := make([]byte, 254) diskret, _, err := procGetLogicalDriveStringsW.Call( @@ -94,7 +97,9 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro typepath, _ := windows.UTF16PtrFromString(path) typeret, _, _ := procGetDriveType.Call(uintptr(unsafe.Pointer(typepath))) if typeret == 0 { - return ret, windows.GetLastError() + err := windows.GetLastError() + warnings.Add(err) + continue } // 2: DRIVE_REMOVABLE 3: DRIVE_FIXED 4: DRIVE_REMOTE 5: DRIVE_CDROM @@ -118,7 +123,8 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro if typeret == 5 || typeret == 2 { continue // device is not ready will happen if there is no disk in the drive } - return ret, err + warnings.Add(err) + continue } opts := []string{"rw"} if lpFileSystemFlags&fileReadOnlyVolume != 0 { @@ -138,7 +144,7 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro } } } - return ret, nil + return ret, warnings.Reference() } func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOCountersStat, error) { diff --git a/host/host_linux.go b/host/host_linux.go index 940415c..a6bb3fc 100644 --- a/host/host_linux.go +++ b/host/host_linux.go @@ -395,7 +395,7 @@ func SensorsTemperaturesWithContext(ctx context.Context) ([]TemperatureStat, err } } - var warns Warnings + var warns common.Warnings if len(files) == 0 { // handle distributions without hwmon, like raspbian #391, parse legacy thermal_zone files files, err = filepath.Glob(common.HostSys("/class/thermal/thermal_zone*/")) diff --git a/host/types.go b/internal/common/warnings.go similarity index 59% rename from host/types.go rename to internal/common/warnings.go index c2e7c0b..a4aaada 100644 --- a/host/types.go +++ b/internal/common/warnings.go @@ -1,11 +1,10 @@ -package host +package common -import ( - "fmt" -) +import "fmt" type Warnings struct { - List []error + List []error + Verbose bool } func (w *Warnings) Add(err error) { @@ -20,5 +19,12 @@ func (w *Warnings) Reference() error { } func (w *Warnings) Error() string { + if w.Verbose { + str := "" + for i, e := range w.List { + str += fmt.Sprintf("\tError %d: %s\n", i, e.Error()) + } + return str + } return fmt.Sprintf("Number of warnings: %v", len(w.List)) }