diff --git a/backend/app/service/dashboard.go b/backend/app/service/dashboard.go index e2bc21d58..49a67ec7e 100644 --- a/backend/app/service/dashboard.go +++ b/backend/app/service/dashboard.go @@ -2,9 +2,11 @@ package service import ( "encoding/json" + "strings" "time" "github.com/1Panel-dev/1Panel/backend/app/dto" + "github.com/1Panel-dev/1Panel/backend/utils/cmd" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/host" @@ -141,29 +143,54 @@ func (u *DashboardService) LoadCurrentInfo(ioOption string, netOption string) *d return ¤tInfo } +type diskInfo struct { + Type string + Mount string + Device string +} + func loadDiskInfo() []dto.DiskInfo { var datas []dto.DiskInfo - parts, err := disk.Partitions(false) + stdout, err := cmd.Exec("df -hT -P|grep '/'|grep -v tmpfs|grep -v 'snap/core'|grep -v udev") if err != nil { return datas } + lines := strings.Split(stdout, "\n") + + var mounts []diskInfo var excludes = []string{"/mnt/cdrom", "/boot", "/boot/efi", "/dev", "/dev/shm", "/run/lock", "/run", "/run/shm", "/run/user"} - for i := 0; i < len(parts); i++ { + for _, line := range lines { + fields := strings.Fields(line) + if len(fields) < 7 { + continue + } + if fields[1] == "tmpfs" { + continue + } + if strings.Contains(fields[2], "M") || strings.Contains(fields[2], "K") { + continue + } + if strings.Contains(fields[6], "docker") { + continue + } isExclude := false for _, exclude := range excludes { - if parts[i].Mountpoint == exclude { + if exclude == fields[6] { isExclude = true - break } } if isExclude { continue } - state, _ := disk.Usage(parts[i].Mountpoint) + mounts = append(mounts, diskInfo{Type: fields[1], Device: fields[0], Mount: fields[6]}) + } + + for i := 0; i < len(mounts); i++ { + state, _ := disk.Usage(mounts[i].Mount) var itemData dto.DiskInfo - itemData.Path = parts[i].Mountpoint - itemData.Type = parts[i].Fstype - itemData.Device = parts[i].Device + itemData.Path = mounts[i].Mount + itemData.Type = mounts[i].Type + itemData.Device = mounts[i].Device itemData.Total = state.Total itemData.Free = state.Free itemData.Used = state.Used