如果已经有足够的硬盘写入速度测试数据,则不再执行测试

This commit is contained in:
GoEdgeLab
2024-05-02 11:49:51 +08:00
parent cb455b8a84
commit 30f2b29f64
4 changed files with 77 additions and 21 deletions

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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
}
}
}
}