mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	如果已经有足够的硬盘写入速度测试数据,则不再执行测试
This commit is contained in:
		@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user