mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-02 14:00:25 +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