1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-03-17 03:04:46 +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,24 +209,38 @@ 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) {
if err != nil { defer wg.Done()
continue select {
} case <-ctx.Done():
var itemData dto.DiskInfo global.LOG.Errorf("load disk info from %s failed, err: timeout", mounts[index].Mount)
itemData.Path = mounts[i].Mount return
itemData.Type = mounts[i].Type default:
itemData.Device = mounts[i].Device state, err := disk.Usage(mounts[index].Mount)
itemData.Total = state.Total if err != nil {
itemData.Free = state.Free return
itemData.Used = state.Used }
itemData.UsedPercent = state.UsedPercent var itemData dto.DiskInfo
itemData.InodesTotal = state.InodesTotal itemData.Path = mounts[index].Mount
itemData.InodesUsed = state.InodesUsed itemData.Type = mounts[index].Type
itemData.InodesFree = state.InodesFree itemData.Device = mounts[index].Device
itemData.InodesUsedPercent = state.InodesUsedPercent itemData.Total = state.Total
datas = append(datas, itemData) itemData.Free = state.Free
itemData.Used = state.Used
itemData.UsedPercent = state.UsedPercent
itemData.InodesTotal = state.InodesTotal
itemData.InodesUsed = state.InodesUsed
itemData.InodesFree = state.InodesFree
itemData.InodesUsedPercent = state.InodesUsedPercent
datas = append(datas, itemData)
}
}(i)
} }
wg.Wait()
return datas return datas
} }