Compare commits

..

6 Commits

Author SHA1 Message Date
spiritysdx
35e183b640 update 2024-07-01 13:14:49 +08:00
spiritysdx
a684052966 update 2024-07-01 12:29:18 +08:00
spiritysdx
2beb74c319 update 2024-07-01 12:22:39 +08:00
spiritysdx
5218c95162 update 2024-07-01 12:10:56 +08:00
spiritysdx
83be2066c8 update 2024-07-01 12:00:52 +08:00
spiritysdx
975bcbfc00 update 2024-07-01 11:51:35 +08:00
5 changed files with 37 additions and 90 deletions

2
go.mod
View File

@@ -11,6 +11,7 @@ require (
github.com/oneclickvirt/cputest v0.0.7-20240701020012
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
github.com/oneclickvirt/disktest v0.0.3-20240629152513
github.com/oneclickvirt/gostun v0.0.2-20240625025941
github.com/oneclickvirt/memorytest v0.0.1-20240624151629
github.com/oneclickvirt/nt3 v0.0.2-20240630152642
github.com/oneclickvirt/portchecker v0.0.1-20240624155429
@@ -47,7 +48,6 @@ require (
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/nxtrace/NTrace-core v1.3.1 // indirect
github.com/oneclickvirt/gostun v0.0.2-20240625025941 // indirect
github.com/onsi/ginkgo/v2 v2.19.0 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect

2
go.sum
View File

@@ -83,8 +83,6 @@ github.com/oneclickvirt/backtrace v0.0.4-20240624090335 h1:0LP5KyA6GLlqQAtOF0uyB
github.com/oneclickvirt/backtrace v0.0.4-20240624090335/go.mod h1:zvsC7xY/WZqs5KL2JB967OVnuqjNbxu9bW6wXRLo5h8=
github.com/oneclickvirt/basics v0.0.3-20240625075226 h1:K9VriCHIYnXPZXBSn9PRQX+jBS6AIFH8tBVb/i8VGAw=
github.com/oneclickvirt/basics v0.0.3-20240625075226/go.mod h1:dTB+/oyFQYfTYX55rFJVWatum5F9g62zjfmHCM6Vj1s=
github.com/oneclickvirt/cputest v0.0.6-20240630144058 h1:bFOM4MS+uaU7slFaZR91/bJ57AFM23RWPEik+GTFS2w=
github.com/oneclickvirt/cputest v0.0.6-20240630144058/go.mod h1:MmaHN9+XMntI3rLycwj8Ne31fG18IfNoa8N2utDK1CY=
github.com/oneclickvirt/cputest v0.0.7-20240701020012 h1:U5cCI+6ZU3pudoAlmb1b3yB9IQNm5AnDXi1TQAZJCIA=
github.com/oneclickvirt/cputest v0.0.7-20240701020012/go.mod h1:MmaHN9+XMntI3rLycwj8Ne31fG18IfNoa8N2utDK1CY=
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=

View File

@@ -1,7 +1,6 @@
package main
import (
"bufio"
"flag"
"fmt"
"github.com/oneclickvirt/CommonMediaTests/commediatests"
@@ -20,17 +19,19 @@ import (
"github.com/oneclickvirt/portchecker/email"
speedtestmodel "github.com/oneclickvirt/speedtest/model"
"os"
"os/signal"
"regexp"
"runtime"
"strings"
"sync"
"syscall"
"time"
)
var (
ecsVersion = "2024.07.01.1"
ecsVersion = "v0.0.19"
menuMode bool
choice string
input, choice string
showVersion bool
enableLogger bool
language string
@@ -44,6 +45,8 @@ var (
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus bool
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus bool
backtraceStatus, nt3Status, speedTestStatus bool
filePath = "goecs.txt"
enabelUpload = true
)
func main() {
@@ -72,6 +75,8 @@ func main() {
flag.IntVar(&spNum, "spnum", 2, "Set the number of servers per operator for speed test")
flag.BoolVar(&enableLogger, "log", false, "Enable/Disable logging in the current path")
flag.Parse()
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
if showVersion {
fmt.Println(ecsVersion)
return
@@ -87,9 +92,6 @@ func main() {
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus = false, false, false, false
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus = false, false, false, false
backtraceStatus, nt3Status, speedTestStatus = false, false, false
// 正则表达式匹配纯数字
re := regexp.MustCompile(`^\d+$`)
reader := bufio.NewReader(os.Stdin)
switch language {
case "zh":
fmt.Println("1. 融合怪完全体")
@@ -113,10 +115,13 @@ func main() {
fmt.Println("8. Hardware-Only Test (Basic System Info + CPU + Memory + dd Disk Test + fio Disk Test)")
fmt.Println("9. IP Quality Test (IP Test with 15 Databases + Email Port Test)")
}
Loop:
for {
fmt.Print("请输入选项 / Please enter your choice: ")
input, _ := reader.ReadString('\n')
fmt.Scanln(&input)
input = strings.TrimSpace(input)
input = strings.TrimRight(input, "\n")
re := regexp.MustCompile(`^\d+$`) // 正则表达式匹配纯数字
if re.MatchString(input) {
choice = input
switch choice {
@@ -132,14 +137,14 @@ func main() {
backtraceStatus = true
nt3Status = true
speedTestStatus = true
break
break Loop
case "2":
basicStatus = true
cpuTestStatus = true
memoryTestStatus = true
diskTestStatus = true
speedTestStatus = true
break
break Loop
case "3":
basicStatus = true
cpuTestStatus = true
@@ -151,7 +156,7 @@ func main() {
backtraceStatus = true
nt3Status = true
speedTestStatus = true
break
break Loop
case "4":
basicStatus = true
cpuTestStatus = true
@@ -160,7 +165,7 @@ func main() {
backtraceStatus = true
nt3Status = true
speedTestStatus = true
break
break Loop
case "5":
basicStatus = true
cpuTestStatus = true
@@ -168,30 +173,30 @@ func main() {
diskTestStatus = true
securityTestStatus = true
speedTestStatus = true
break
break Loop
case "6":
speedTestStatus = true
backtraceStatus = true
nt3Status = true
break
break Loop
case "7":
securityTestStatus = true
commTestStatus = true
break
break Loop
case "8":
basicStatus = true
cpuTestStatus = true
memoryTestStatus = true
diskTestStatus = true
break
break Loop
case "9":
emailTestStatus = true
break
break Loop
case "10":
backtraceStatus = true
nt3Status = true
speedTestStatus = true
break
break Loop
default:
if language == "zh" {
fmt.Println("无效的选项")
@@ -214,10 +219,17 @@ func main() {
}
startTime := time.Now()
var (
wg1, wg2, wg3 sync.WaitGroup
basicInfo, securityInfo, emailInfo, mediaInfo, backtraceInfo string
output, tempOutput string
wg1, wg2 sync.WaitGroup
basicInfo, securityInfo, emailInfo, mediaInfo string
output, tempOutput string
)
// 启动一个goroutine来等待信号
go func() {
// 等待信号
<-sig
utils.ProcessAndUpload(output, filePath, enabelUpload)
os.Exit(1) // 使用非零状态码退出,表示意外退出
}()
output = utils.PrintAndCapture(func() {
switch language {
case "zh":
@@ -246,7 +258,7 @@ func main() {
if emailTestStatus {
wg2.Add(1)
go func() {
defer wg1.Done()
defer wg2.Done()
emailInfo = email.EmailCheck()
}()
}
@@ -257,17 +269,6 @@ func main() {
mediaInfo = unlocktest.MediaTest(language)
}()
}
if runtime.GOOS == "windows" {
if backtraceStatus {
wg3.Add(1)
go func() {
defer wg3.Done()
backtraceInfo = utils.GetCaptureOutput(func() {
backtrace.BackTrace()
})
}()
}
}
if commTestStatus {
utils.PrintCenteredTitle("御三家流媒体解锁", width)
commediatest.ComMediaTest(language)
@@ -289,8 +290,7 @@ func main() {
if runtime.GOOS != "windows" {
if backtraceStatus {
utils.PrintCenteredTitle("三网回程", width)
wg3.Wait()
fmt.Printf(backtraceInfo)
backtrace.BackTrace()
}
// nexttrace 在win上不支持检测报错 bind: An invalid argument was supplied.
if nt3Status {
@@ -386,6 +386,5 @@ func main() {
fmt.Println("Unsupported language")
}
}, tempOutput, output)
filePath := "goecs.txt"
utils.ProcessAndUpload(output, filePath, true)
utils.ProcessAndUpload(output, filePath, enabelUpload)
}

View File

@@ -61,7 +61,7 @@ goecs_check() {
# 检测原始goecs命令是否存在若存在则升级不存在则安装
version_output=$(goecs -v || ./goecs -v)
if [ $? -eq 0 ]; then
extracted_version=$(echo "$version_output" | grep -oP '^v\d+(\.\d+)+')
extracted_version=$(echo "${version_output//v/}")
if [ -n "$extracted_version" ]; then
current_version=$(echo "$extracted_version" | cut -c 2-)
ecs_version=$ECS_VERSION

View File

@@ -91,56 +91,6 @@ func SecurityCheck(language, nt3CheckType string, securtyCheckStatus bool) (stri
return basicInfo, securityInfo, nt3CheckType
}
// GetCaptureOutput 仅捕获输出不实时输出
func GetCaptureOutput(f func()) string {
// 保存旧的 stdout 和 stderr
oldStdout := os.Stdout
oldStderr := os.Stderr
// 创建管道
stdoutPipeR, stdoutPipeW, err := os.Pipe()
if err != nil {
return "Error creating stdout pipe"
}
stderrPipeR, stderrPipeW, err := os.Pipe()
if err != nil {
stdoutPipeW.Close()
stdoutPipeR.Close()
return "Error creating stderr pipe"
}
// 替换标准输出和标准错误输出为管道写入端
os.Stdout = stdoutPipeW
os.Stderr = stderrPipeW
// 恢复标准输出和标准错误输出
defer func() {
os.Stdout = oldStdout
os.Stderr = oldStderr
stdoutPipeW.Close()
stderrPipeW.Close()
}()
// 缓冲区
var stdoutBuf, stderrBuf bytes.Buffer
// 并发读取 stdout 和 stderr
done := make(chan struct{})
go func() {
io.Copy(&stdoutBuf, stdoutPipeR)
done <- struct{}{}
}()
go func() {
io.Copy(&stderrBuf, stderrPipeR)
done <- struct{}{}
}()
// 执行函数
f()
// 关闭管道写入端,让管道读取端可以读取所有数据
stdoutPipeW.Close()
stderrPipeW.Close()
// 等待两个 goroutine 完成
<-done
<-done
// 返回捕获的输出字符串
return stdoutBuf.String() + stderrBuf.String()
}
// CaptureOutput 捕获函数输出和错误输出,实时输出,并返回字符串
func CaptureOutput(f func()) string {
// 保存旧的 stdout 和 stderr