1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-03-17 11:14:44 +08:00

fix: 概览页磁盘信息获取增加超时时间 (#3074)

Refs #2825
This commit is contained in:
ssongliu 2023-11-27 17:42:08 +08:00 committed by wanghe-fit2cloud
parent e07b6bc050
commit 03774bbba6

View File

@ -1,9 +1,11 @@
package service package service
import ( import (
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"strings" "strings"
"sync"
"time" "time"
"github.com/1Panel-dev/1Panel/backend/app/dto" "github.com/1Panel-dev/1Panel/backend/app/dto"
@ -173,7 +175,7 @@ type diskInfo struct {
func loadDiskInfo() []dto.DiskInfo { func loadDiskInfo() []dto.DiskInfo {
var datas []dto.DiskInfo var datas []dto.DiskInfo
stdout, err := cmd.Exec("df -hT -P|grep '/'|grep -v tmpfs|grep -v 'snap/core'|grep -v udev") stdout, err := cmd.ExecWithTimeOut("df -hT -P|grep '/'|grep -v tmpfs|grep -v 'snap/core'|grep -v udev", 2*time.Second)
if err != nil { if err != nil {
return datas return datas
} }
@ -207,15 +209,26 @@ func loadDiskInfo() []dto.DiskInfo {
mounts = append(mounts, diskInfo{Type: fields[1], Device: fields[0], Mount: fields[6]}) 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++ { for i := 0; i < len(mounts); i++ {
state, err := disk.Usage(mounts[i].Mount) go func(index int) {
defer wg.Done()
select {
case <-ctx.Done():
global.LOG.Errorf("load disk info from %s failed, err: timeout", mounts[index].Mount)
return
default:
state, err := disk.Usage(mounts[index].Mount)
if err != nil { if err != nil {
continue return
} }
var itemData dto.DiskInfo var itemData dto.DiskInfo
itemData.Path = mounts[i].Mount itemData.Path = mounts[index].Mount
itemData.Type = mounts[i].Type itemData.Type = mounts[index].Type
itemData.Device = mounts[i].Device itemData.Device = mounts[index].Device
itemData.Total = state.Total itemData.Total = state.Total
itemData.Free = state.Free itemData.Free = state.Free
itemData.Used = state.Used itemData.Used = state.Used
@ -226,5 +239,8 @@ func loadDiskInfo() []dto.DiskInfo {
itemData.InodesUsedPercent = state.InodesUsedPercent itemData.InodesUsedPercent = state.InodesUsedPercent
datas = append(datas, itemData) datas = append(datas, itemData)
} }
}(i)
}
wg.Wait()
return datas return datas
} }