From 30f2b29f647cacdfbb6f5c8ef5d579470fd8c5db Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Thu, 2 May 2024 11:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=B7=B2=E7=BB=8F=E6=9C=89?= =?UTF-8?q?=E8=B6=B3=E5=A4=9F=E7=9A=84=E7=A1=AC=E7=9B=98=E5=86=99=E5=85=A5?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E6=B5=8B=E8=AF=95=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E4=B8=8D=E5=86=8D=E6=89=A7=E8=A1=8C=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/utils/fs/disk.go | 39 +++++++++++++++++++++++++++--------- internal/utils/fs/os.go | 12 +++++++++++ internal/utils/fs/os_test.go | 21 +++++++++++++++++++ internal/utils/fs/status.go | 26 ++++++++++++++---------- 4 files changed, 77 insertions(+), 21 deletions(-) diff --git a/internal/utils/fs/disk.go b/internal/utils/fs/disk.go index 13ab3eb..91f2595 100644 --- a/internal/utils/fs/disk.go +++ b/internal/utils/fs/disk.go @@ -14,8 +14,9 @@ import ( const diskSpeedDataFile = "disk.speed.json" type DiskSpeedCache struct { - Speed Speed `json:"speed"` - SpeedMB float64 `json:"speedMB"` + Speed Speed `json:"speed"` + SpeedMB float64 `json:"speedMB"` + CountTests int `json:"countTests"` // test times } // CheckDiskWritingSpeed test disk writing speed @@ -76,6 +77,30 @@ func CheckDiskIsFast() (speedMB float64, isFast bool, err error) { return } + // read old cached info + var cacheFile = Tea.Root + "/data/" + diskSpeedDataFile + var cacheInfo = &DiskSpeedCache{} + { + cacheData, cacheErr := os.ReadFile(cacheFile) + if cacheErr == nil { + var oldCacheInfo = &DiskSpeedCache{} + cacheErr = json.Unmarshal(cacheData, oldCacheInfo) + if cacheErr == nil { + cacheInfo = oldCacheInfo + } + } + } + + cacheInfo.CountTests++ + + defer func() { + // write to local file + cacheData, jsonErr := json.Marshal(cacheInfo) + if jsonErr == nil { + _ = os.WriteFile(cacheFile, cacheData, 0666) + } + }() + isFast = speedMB > 150 if speedMB <= DiskSpeedMB { @@ -94,14 +119,8 @@ func CheckDiskIsFast() (speedMB float64, isFast bool, err error) { DiskSpeedMB = speedMB - // write to local file - cacheData, jsonErr := json.Marshal(&DiskSpeedCache{ - Speed: DiskSpeed, - SpeedMB: DiskSpeedMB, - }) - if jsonErr == nil { - _ = os.WriteFile(Tea.Root+"/data/"+diskSpeedDataFile, cacheData, 0666) - } + cacheInfo.Speed = DiskSpeed + cacheInfo.SpeedMB = DiskSpeedMB return } diff --git a/internal/utils/fs/os.go b/internal/utils/fs/os.go index 79c06c6..1dab308 100644 --- a/internal/utils/fs/os.go +++ b/internal/utils/fs/os.go @@ -54,3 +54,15 @@ func Open(name string) (f *os.File, err error) { ReaderLimiter.Release() return } + +// ExistFile 检查文件是否存在 +func ExistFile(path string) (bool, error) { + stat, err := os.Stat(path) + if err != nil { + if os.IsNotExist(err) { + return false, nil + } + return false, err + } + return !stat.IsDir(), nil +} diff --git a/internal/utils/fs/os_test.go b/internal/utils/fs/os_test.go index 3de6d82..c54259b 100644 --- a/internal/utils/fs/os_test.go +++ b/internal/utils/fs/os_test.go @@ -4,6 +4,7 @@ package fsutils_test import ( fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs" + "github.com/iwind/TeaGo/assert" "os" "testing" ) @@ -15,3 +16,23 @@ func TestOpenFile(t *testing.T) { } _ = f.Close() } + +func TestExistFile(t *testing.T) { + var a = assert.NewAssertion(t) + + { + b, err := fsutils.ExistFile("./os_test.go") + if err != nil { + t.Fatal(err) + } + a.IsTrue(b) + } + + { + b, err := fsutils.ExistFile("./os_test2.go") + if err != nil { + t.Fatal(err) + } + a.IsFalse(b) + } +} diff --git a/internal/utils/fs/status.go b/internal/utils/fs/status.go index 4c50e69..d0e3dd6 100644 --- a/internal/utils/fs/status.go +++ b/internal/utils/fs/status.go @@ -56,6 +56,7 @@ func init() { // test disk goman.New(func() { // load last result from local disk + var countTests int cacheData, cacheErr := os.ReadFile(Tea.Root + "/data/" + diskSpeedDataFile) if cacheErr == nil { var cache = &DiskSpeedCache{} @@ -63,21 +64,24 @@ func init() { if err == nil && cache.SpeedMB > 0 { DiskSpeedMB = cache.SpeedMB DiskSpeed = cache.Speed + countTests = cache.CountTests } } - // initial check - _, _, _ = CheckDiskIsFast() + if countTests < 12 { + // initial check + _, _, _ = CheckDiskIsFast() - // check every one hour - var ticker = time.NewTicker(1 * time.Hour) - var count = 0 - for range ticker.C { - _, _, err := CheckDiskIsFast() - if err == nil { - count++ - if count > 24 { - return + // check every one hour + var ticker = time.NewTicker(1 * time.Hour) + var count = 0 + for range ticker.C { + _, _, err := CheckDiskIsFast() + if err == nil { + count++ + if count > 24 { + return + } } } }