From 768406668975d2c2e3efca654dfdc6f6c8c9c056 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Mon, 6 May 2024 13:51:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=A4=A7=E5=B0=8F=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=9B=9E=E6=94=B6=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#4866)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs https://github.com/1Panel-dev/1Panel/issues/4867 --- backend/app/service/file.go | 25 +++++++++++++++++++++++-- backend/utils/files/file_op.go | 27 +++++++++++++-------------- backend/utils/files/utils.go | 19 ------------------- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/backend/app/service/file.go b/backend/app/service/file.go index 0f188aa95..3fa701579 100644 --- a/backend/app/service/file.go +++ b/backend/app/service/file.go @@ -4,6 +4,7 @@ import ( "fmt" "io/fs" "os" + "os/exec" "path" "path/filepath" "strings" @@ -312,12 +313,32 @@ func (f *FileService) FileDownload(d request.FileDownload) (string, error) { } func (f *FileService) DirSize(req request.DirSizeReq) (response.DirSizeRes, error) { + var ( + res response.DirSizeRes + ) + if req.Path == "/proc" { + return res, nil + } + cmd := exec.Command("du", "-s", req.Path) + output, err := cmd.Output() + if err == nil { + fields := strings.Fields(string(output)) + if len(fields) == 2 { + var cmdSize int64 + _, err = fmt.Sscanf(fields[0], "%d", &cmdSize) + if err == nil { + res.Size = float64(cmdSize * 1024) + return res, nil + } + } + } fo := files.NewFileOp() size, err := fo.GetDirSize(req.Path) if err != nil { - return response.DirSizeRes{}, err + return res, err } - return response.DirSizeRes{Size: size}, nil + res.Size = size + return res, nil } func (f *FileService) ReadLogByLine(req request.FileReadByLineReq) (*response.FileLineContent, error) { diff --git a/backend/utils/files/file_op.go b/backend/utils/files/file_op.go index 7355d1708..9b92ef49c 100644 --- a/backend/utils/files/file_op.go +++ b/backend/utils/files/file_op.go @@ -15,7 +15,6 @@ import ( "path/filepath" "strconv" "strings" - "sync" "time" "github.com/1Panel-dev/1Panel/backend/utils/cmd" @@ -436,20 +435,20 @@ func (f FileOp) CopyFile(src, dst string) error { } func (f FileOp) GetDirSize(path string) (float64, error) { - var m sync.Map - var wg sync.WaitGroup - - wg.Add(1) - go ScanDir(f.Fs, path, &m, &wg) - wg.Wait() - - var dirSize float64 - m.Range(func(k, v interface{}) bool { - dirSize = dirSize + v.(float64) - return true + var size int64 + err := filepath.Walk(path, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + size += info.Size() + } + return nil }) - - return dirSize, nil + if err != nil { + return 0, err + } + return float64(size), nil } func getFormat(cType CompressType) archiver.CompressedArchive { diff --git a/backend/utils/files/utils.go b/backend/utils/files/utils.go index 6dfbd4c4e..c8cc6218c 100644 --- a/backend/utils/files/utils.go +++ b/backend/utils/files/utils.go @@ -10,9 +10,6 @@ import ( "path/filepath" "strconv" "strings" - "sync" - - "github.com/spf13/afero" ) func IsSymlink(mode os.FileMode) bool { @@ -63,22 +60,6 @@ func GetGroup(gid uint32) string { return usr.Name } -func ScanDir(fs afero.Fs, path string, dirMap *sync.Map, wg *sync.WaitGroup) { - afs := &afero.Afero{Fs: fs} - files, _ := afs.ReadDir(path) - for _, f := range files { - if f.IsDir() { - wg.Add(1) - go ScanDir(fs, filepath.Join(path, f.Name()), dirMap, wg) - } else { - if f.Size() > 0 { - dirMap.Store(filepath.Join(path, f.Name()), float64(f.Size())) - } - } - } - defer wg.Done() -} - const dotCharacter = 46 func IsHidden(path string) bool {