mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 23:20:25 +08:00
如果已经有足够的硬盘写入速度测试数据,则不再执行测试
This commit is contained in:
@@ -14,8 +14,9 @@ import (
|
|||||||
const diskSpeedDataFile = "disk.speed.json"
|
const diskSpeedDataFile = "disk.speed.json"
|
||||||
|
|
||||||
type DiskSpeedCache struct {
|
type DiskSpeedCache struct {
|
||||||
Speed Speed `json:"speed"`
|
Speed Speed `json:"speed"`
|
||||||
SpeedMB float64 `json:"speedMB"`
|
SpeedMB float64 `json:"speedMB"`
|
||||||
|
CountTests int `json:"countTests"` // test times
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckDiskWritingSpeed test disk writing speed
|
// CheckDiskWritingSpeed test disk writing speed
|
||||||
@@ -76,6 +77,30 @@ func CheckDiskIsFast() (speedMB float64, isFast bool, err error) {
|
|||||||
return
|
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
|
isFast = speedMB > 150
|
||||||
|
|
||||||
if speedMB <= DiskSpeedMB {
|
if speedMB <= DiskSpeedMB {
|
||||||
@@ -94,14 +119,8 @@ func CheckDiskIsFast() (speedMB float64, isFast bool, err error) {
|
|||||||
|
|
||||||
DiskSpeedMB = speedMB
|
DiskSpeedMB = speedMB
|
||||||
|
|
||||||
// write to local file
|
cacheInfo.Speed = DiskSpeed
|
||||||
cacheData, jsonErr := json.Marshal(&DiskSpeedCache{
|
cacheInfo.SpeedMB = DiskSpeedMB
|
||||||
Speed: DiskSpeed,
|
|
||||||
SpeedMB: DiskSpeedMB,
|
|
||||||
})
|
|
||||||
if jsonErr == nil {
|
|
||||||
_ = os.WriteFile(Tea.Root+"/data/"+diskSpeedDataFile, cacheData, 0666)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,3 +54,15 @@ func Open(name string) (f *os.File, err error) {
|
|||||||
ReaderLimiter.Release()
|
ReaderLimiter.Release()
|
||||||
return
|
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 (
|
import (
|
||||||
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
|
"github.com/iwind/TeaGo/assert"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
@@ -15,3 +16,23 @@ func TestOpenFile(t *testing.T) {
|
|||||||
}
|
}
|
||||||
_ = f.Close()
|
_ = 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
|
// test disk
|
||||||
goman.New(func() {
|
goman.New(func() {
|
||||||
// load last result from local disk
|
// load last result from local disk
|
||||||
|
var countTests int
|
||||||
cacheData, cacheErr := os.ReadFile(Tea.Root + "/data/" + diskSpeedDataFile)
|
cacheData, cacheErr := os.ReadFile(Tea.Root + "/data/" + diskSpeedDataFile)
|
||||||
if cacheErr == nil {
|
if cacheErr == nil {
|
||||||
var cache = &DiskSpeedCache{}
|
var cache = &DiskSpeedCache{}
|
||||||
@@ -63,21 +64,24 @@ func init() {
|
|||||||
if err == nil && cache.SpeedMB > 0 {
|
if err == nil && cache.SpeedMB > 0 {
|
||||||
DiskSpeedMB = cache.SpeedMB
|
DiskSpeedMB = cache.SpeedMB
|
||||||
DiskSpeed = cache.Speed
|
DiskSpeed = cache.Speed
|
||||||
|
countTests = cache.CountTests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// initial check
|
if countTests < 12 {
|
||||||
_, _, _ = CheckDiskIsFast()
|
// initial check
|
||||||
|
_, _, _ = CheckDiskIsFast()
|
||||||
|
|
||||||
// check every one hour
|
// check every one hour
|
||||||
var ticker = time.NewTicker(1 * time.Hour)
|
var ticker = time.NewTicker(1 * time.Hour)
|
||||||
var count = 0
|
var count = 0
|
||||||
for range ticker.C {
|
for range ticker.C {
|
||||||
_, _, err := CheckDiskIsFast()
|
_, _, err := CheckDiskIsFast()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
count++
|
count++
|
||||||
if count > 24 {
|
if count > 24 {
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user