code review

pull/1347/head
Antoine Toulme 2 years ago
parent 6b2bfe408d
commit dbc0f20fe3

@ -79,21 +79,10 @@ func UsageWithContext(ctx context.Context, path string) (*UsageStat, error) {
return ret, nil return ret, nil
} }
type errorCollector []error
func (c *errorCollector) collect(e error) { *c = append(*c, e) }
func (c *errorCollector) Error() (err string) {
err = ""
for i, e := range *c {
err += fmt.Sprintf("\tError %d: %s\n", i, e.Error())
}
return err
}
func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) { func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) {
collector := new(errorCollector) warnings := common.Warnings{
Verbose: true,
}
var ret []PartitionStat var ret []PartitionStat
lpBuffer := make([]byte, 254) lpBuffer := make([]byte, 254)
diskret, _, err := procGetLogicalDriveStringsW.Call( diskret, _, err := procGetLogicalDriveStringsW.Call(
@ -109,7 +98,7 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro
typeret, _, _ := procGetDriveType.Call(uintptr(unsafe.Pointer(typepath))) typeret, _, _ := procGetDriveType.Call(uintptr(unsafe.Pointer(typepath)))
if typeret == 0 { if typeret == 0 {
err := windows.GetLastError() err := windows.GetLastError()
collector.collect(err) warnings.Add(err)
continue continue
} }
// 2: DRIVE_REMOVABLE 3: DRIVE_FIXED 4: DRIVE_REMOTE 5: DRIVE_CDROM // 2: DRIVE_REMOVABLE 3: DRIVE_FIXED 4: DRIVE_REMOTE 5: DRIVE_CDROM
@ -134,7 +123,7 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro
if typeret == 5 || typeret == 2 { if typeret == 5 || typeret == 2 {
continue // device is not ready will happen if there is no disk in the drive continue // device is not ready will happen if there is no disk in the drive
} }
collector.collect(err) warnings.Add(err)
continue continue
} }
opts := []string{"rw"} opts := []string{"rw"}
@ -155,11 +144,7 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro
} }
} }
} }
if len(*collector) == 0 { return ret, warnings.Reference()
return ret, nil
} else {
return ret, collector
}
} }
func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOCountersStat, error) { func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOCountersStat, error) {

@ -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 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*/")) files, err = filepath.Glob(common.HostSys("/class/thermal/thermal_zone*/"))

@ -1,11 +1,10 @@
package host package common
import ( import "fmt"
"fmt"
)
type Warnings struct { type Warnings struct {
List []error List []error
Verbose bool
} }
func (w *Warnings) Add(err error) { func (w *Warnings) Add(err error) {
@ -20,5 +19,12 @@ func (w *Warnings) Reference() error {
} }
func (w *Warnings) Error() string { 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)) return fmt.Sprintf("Number of warnings: %v", len(w.List))
} }
Loading…
Cancel
Save