|
|
|
@ -1,9 +1,9 @@
|
|
|
|
|
package service |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"context" |
|
|
|
|
"encoding/json" |
|
|
|
|
"fmt" |
|
|
|
|
"sort" |
|
|
|
|
"strings" |
|
|
|
|
"sync" |
|
|
|
|
"time" |
|
|
|
@ -209,26 +209,25 @@ func loadDiskInfo() []dto.DiskInfo {
|
|
|
|
|
mounts = append(mounts, diskInfo{Type: fields[1], Device: fields[0], Mount: fields[6]}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) |
|
|
|
|
defer cancel() |
|
|
|
|
var wg sync.WaitGroup |
|
|
|
|
wg.Add(len(mounts)) |
|
|
|
|
for i := 0; i < len(mounts); i++ { |
|
|
|
|
go func(index int) { |
|
|
|
|
go func(timeoutCh <-chan time.Time, mount diskInfo) { |
|
|
|
|
defer wg.Done() |
|
|
|
|
|
|
|
|
|
var itemData dto.DiskInfo |
|
|
|
|
itemData.Path = mount.Mount |
|
|
|
|
itemData.Type = mount.Type |
|
|
|
|
itemData.Device = mount.Device |
|
|
|
|
select { |
|
|
|
|
case <-ctx.Done(): |
|
|
|
|
global.LOG.Errorf("load disk info from %s failed, err: timeout", mounts[index].Mount) |
|
|
|
|
return |
|
|
|
|
case <-timeoutCh: |
|
|
|
|
datas = append(datas, itemData) |
|
|
|
|
global.LOG.Errorf("load disk info from %s failed, err: timeout", mount.Mount) |
|
|
|
|
default: |
|
|
|
|
state, err := disk.Usage(mounts[index].Mount) |
|
|
|
|
state, err := disk.Usage(mount.Mount) |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
var itemData dto.DiskInfo |
|
|
|
|
itemData.Path = mounts[index].Mount |
|
|
|
|
itemData.Type = mounts[index].Type |
|
|
|
|
itemData.Device = mounts[index].Device |
|
|
|
|
itemData.Total = state.Total |
|
|
|
|
itemData.Free = state.Free |
|
|
|
|
itemData.Used = state.Used |
|
|
|
@ -239,8 +238,12 @@ func loadDiskInfo() []dto.DiskInfo {
|
|
|
|
|
itemData.InodesUsedPercent = state.InodesUsedPercent |
|
|
|
|
datas = append(datas, itemData) |
|
|
|
|
} |
|
|
|
|
}(i) |
|
|
|
|
}(time.After(5*time.Second), mounts[i]) |
|
|
|
|
} |
|
|
|
|
wg.Wait() |
|
|
|
|
|
|
|
|
|
sort.Slice(datas, func(i, j int) bool { |
|
|
|
|
return datas[i].Path < datas[j].Path |
|
|
|
|
}) |
|
|
|
|
return datas |
|
|
|
|
} |
|
|
|
|