mirror of
https://github.com/oneclickvirt/ecs.git
synced 2025-10-01 13:42:21 +08:00
221 lines
8.0 KiB
Go
221 lines
8.0 KiB
Go
package main
|
||
|
||
import (
|
||
"flag"
|
||
"fmt"
|
||
"github.com/oneclickvirt/UnlockTests/uts"
|
||
"github.com/oneclickvirt/basics/system"
|
||
"github.com/oneclickvirt/ecs/backtrace"
|
||
"github.com/oneclickvirt/ecs/commediatest"
|
||
"github.com/oneclickvirt/ecs/cputest"
|
||
"github.com/oneclickvirt/ecs/disktest"
|
||
"github.com/oneclickvirt/ecs/memorytest"
|
||
"github.com/oneclickvirt/ecs/ntrace"
|
||
"github.com/oneclickvirt/ecs/speedtest"
|
||
"github.com/oneclickvirt/ecs/unlocktest"
|
||
"github.com/oneclickvirt/portchecker/email"
|
||
"github.com/oneclickvirt/security/network"
|
||
"runtime"
|
||
"strings"
|
||
"sync"
|
||
"time"
|
||
"unicode/utf8"
|
||
)
|
||
|
||
var (
|
||
ecsVersion = "2024.06.30"
|
||
showVersion bool
|
||
language string
|
||
cpuTestMethod, cpuTestThreadMode string
|
||
memoryTestMethod string
|
||
diskTestMethod, diskTestPath string
|
||
diskMultiCheck bool
|
||
nt3CheckType, nt3Location string
|
||
spNum int
|
||
width = 84
|
||
)
|
||
|
||
func printCenteredTitle(title string, width int) {
|
||
titleLength := utf8.RuneCountInString(title) // 计算字符串的字符数
|
||
totalPadding := width - titleLength
|
||
padding := totalPadding / 2
|
||
paddingStr := strings.Repeat("-", padding)
|
||
fmt.Println(paddingStr + title + paddingStr + strings.Repeat("-", totalPadding%2))
|
||
}
|
||
|
||
func securityCheck() (string, string) {
|
||
var wgt sync.WaitGroup
|
||
var ipInfo, securityInfo, systemInfo string
|
||
var err error
|
||
wgt.Add(2)
|
||
go func() {
|
||
defer wgt.Done()
|
||
ipInfo, securityInfo, err = network.NetworkCheck("both", true, language)
|
||
if err != nil {
|
||
fmt.Println(err.Error())
|
||
}
|
||
}()
|
||
go func() {
|
||
defer wgt.Done()
|
||
systemInfo = system.CheckSystemInfo(language)
|
||
}()
|
||
wgt.Wait()
|
||
basicInfo := systemInfo + ipInfo
|
||
if strings.Contains(ipInfo, "IPV4") && strings.Contains(ipInfo, "IPV6") {
|
||
uts.IPV4 = true
|
||
uts.IPV6 = true
|
||
if nt3CheckType == "" {
|
||
nt3CheckType = "ipv4"
|
||
}
|
||
} else if strings.Contains(ipInfo, "IPV4") {
|
||
uts.IPV4 = true
|
||
uts.IPV6 = false
|
||
if nt3CheckType == "" {
|
||
nt3CheckType = "ipv4"
|
||
}
|
||
} else if strings.Contains(ipInfo, "IPV6") {
|
||
uts.IPV6 = true
|
||
uts.IPV4 = false
|
||
if nt3CheckType == "" {
|
||
nt3CheckType = "ipv6"
|
||
}
|
||
}
|
||
if nt3CheckType == "ipv4" && !strings.Contains(ipInfo, "IPV4") && strings.Contains(ipInfo, "IPV6") {
|
||
nt3CheckType = "ipv6"
|
||
} else if nt3CheckType == "ipv6" && !strings.Contains(ipInfo, "IPV6") && strings.Contains(ipInfo, "IPV4") {
|
||
nt3CheckType = "ipv4"
|
||
}
|
||
basicInfo = strings.ReplaceAll(basicInfo, "\n\n", "\n")
|
||
return basicInfo, securityInfo
|
||
}
|
||
|
||
func printHead() {
|
||
if language == "zh" {
|
||
printCenteredTitle("融合怪测试", width)
|
||
fmt.Printf("版本:%s\n", ecsVersion)
|
||
fmt.Println("测评频道: https://t.me/vps_reviews\n" +
|
||
"Go项目地址:https://github.com/oneclickvirt/ecs\n" +
|
||
"Shell项目地址:https://github.com/spiritLHLS/ecs")
|
||
} else {
|
||
printCenteredTitle("Fusion Monster Test", width)
|
||
fmt.Printf("Version: %s\n", ecsVersion)
|
||
fmt.Println("Review Channel: https://t.me/vps_reviews\n" +
|
||
"Go Project URL: https://github.com/oneclickvirt/ecs\n" +
|
||
"Shell Project URL: https://github.com/spiritLHLS/ecs")
|
||
}
|
||
}
|
||
|
||
func main() {
|
||
flag.BoolVar(&showVersion, "v", false, "Show version information")
|
||
flag.StringVar(&language, "l", "zh", "Specify language (supported: en, zh)")
|
||
flag.StringVar(&cpuTestMethod, "cpum", "sysbench", "Specify CPU test method (supported: sysbench, geekbench, winsat)")
|
||
flag.StringVar(&cpuTestThreadMode, "cput", "multi", "Specify CPU test thread mode (supported: single multi)")
|
||
flag.StringVar(&memoryTestMethod, "memorym", "dd", "Specify Memory test method (supported: sysbench, dd, winsat)")
|
||
flag.StringVar(&diskTestMethod, "diskm", "fio", "Specify Disk test method (supported: fio, dd, winsat)")
|
||
flag.StringVar(&diskTestPath, "diskp", "", "Specify Disk test path, example: -diskp /root")
|
||
flag.BoolVar(&diskMultiCheck, "diskmc", false, "Enable multiple disk checks, example: -diskmc=false")
|
||
flag.StringVar(&nt3Location, "nt3loc", "GZ", "指定三网回程路由检测的地址,支持 GZ, SH, BJ, CD 对应 广州,上海,北京,成都")
|
||
flag.StringVar(&nt3CheckType, "nt3t", "ipv4", "指定三网回程路由检测的类型,支持 both, ipv4, ipv6")
|
||
flag.IntVar(&spNum, "spnum", 2, "Specify speedtest each operator servers num")
|
||
flag.Parse()
|
||
if showVersion {
|
||
fmt.Println(ecsVersion)
|
||
return
|
||
}
|
||
startTime := time.Now()
|
||
var wg sync.WaitGroup
|
||
var basicInfo, securityInfo, emailInfo, mediaInfo string
|
||
if language == "zh" {
|
||
printHead()
|
||
printCenteredTitle("基础信息", width)
|
||
basicInfo, securityInfo = securityCheck()
|
||
fmt.Printf(basicInfo)
|
||
printCenteredTitle(fmt.Sprintf("CPU测试-通过%s测试", cpuTestMethod), width)
|
||
cputest.CpuTest(language, cpuTestMethod, cpuTestThreadMode)
|
||
printCenteredTitle(fmt.Sprintf("内存测试-通过%s测试", cpuTestMethod), width)
|
||
memorytest.MemoryTest(language, memoryTestMethod)
|
||
printCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", diskTestMethod), width)
|
||
disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck)
|
||
wg.Add(2)
|
||
go func() {
|
||
defer wg.Done()
|
||
emailInfo = email.EmailCheck()
|
||
}()
|
||
go func() {
|
||
defer wg.Done()
|
||
mediaInfo = unlocktest.MediaTest(language)
|
||
}()
|
||
printCenteredTitle("御三家流媒体解锁", width)
|
||
commediatest.ComMediaTest(language)
|
||
printCenteredTitle("跨国流媒体解锁", width)
|
||
wg.Wait()
|
||
fmt.Printf(mediaInfo)
|
||
printCenteredTitle("IP质量检测", width)
|
||
fmt.Printf(securityInfo)
|
||
printCenteredTitle("邮件端口检测", width)
|
||
fmt.Println(emailInfo)
|
||
printCenteredTitle("三网回程", width)
|
||
backtrace.BackTrace()
|
||
if runtime.GOOS != "windows" {
|
||
// nexttrace 在win上不支持检测,报错 bind: An invalid argument was supplied.
|
||
printCenteredTitle("路由检测", width)
|
||
ntrace.TraceRoute3(language, nt3Location, nt3CheckType)
|
||
}
|
||
printCenteredTitle("就近节点测速", width)
|
||
speedtest.ShowHead(language)
|
||
speedtest.NearbySP()
|
||
speedtest.CustomSP("net", "global", 4)
|
||
speedtest.CustomSP("net", "cu", spNum)
|
||
speedtest.CustomSP("net", "ct", spNum)
|
||
speedtest.CustomSP("net", "cmcc", spNum)
|
||
printCenteredTitle("", width)
|
||
endTime := time.Now()
|
||
duration := endTime.Sub(startTime)
|
||
minutes := int(duration.Minutes())
|
||
seconds := int(duration.Seconds()) % 60
|
||
fmt.Printf("花费 : %d 分 %d 秒\n", minutes, seconds)
|
||
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
||
fmt.Printf("时间 : %s\n", currentTime)
|
||
printCenteredTitle("", width)
|
||
} else if language == "en" {
|
||
printHead()
|
||
printCenteredTitle("Basic Information", width)
|
||
basicInfo, securityInfo = securityCheck()
|
||
fmt.Printf(basicInfo)
|
||
printCenteredTitle(fmt.Sprintf("CPU Test - %s Method", cpuTestMethod), width)
|
||
cputest.CpuTest(language, cpuTestMethod, cpuTestThreadMode)
|
||
printCenteredTitle(fmt.Sprintf("Memory Test - %s Method", memoryTestMethod), width)
|
||
memorytest.MemoryTest(language, memoryTestMethod)
|
||
printCenteredTitle(fmt.Sprintf("Disk Test - %s Method", diskTestMethod), width)
|
||
disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck)
|
||
wg.Add(1)
|
||
go func() {
|
||
defer wg.Done()
|
||
emailInfo = email.EmailCheck()
|
||
}()
|
||
printCenteredTitle("The Three Families Streaming Media Unlock", width)
|
||
commediatest.ComMediaTest(language)
|
||
printCenteredTitle("Cross-Border Streaming Media Unlock", width)
|
||
unlocktest.MediaTest(language)
|
||
printCenteredTitle("IP Quality Check", width)
|
||
fmt.Printf(securityInfo)
|
||
printCenteredTitle("Email Port Check", width)
|
||
wg.Wait()
|
||
fmt.Println(emailInfo)
|
||
//printCenteredTitle("Return Path Routing", width)
|
||
printCenteredTitle("Nearby Node Speed Test", width)
|
||
speedtest.ShowHead(language)
|
||
speedtest.NearbySP()
|
||
speedtest.CustomSP("net", "global", -1)
|
||
printCenteredTitle("", width)
|
||
endTime := time.Now()
|
||
duration := endTime.Sub(startTime)
|
||
minutes := int(duration.Minutes())
|
||
seconds := int(duration.Seconds()) % 60
|
||
fmt.Printf("Cost Time : %d 分 %d 秒\n", minutes, seconds)
|
||
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
||
fmt.Printf("Current Time : %s\n", currentTime)
|
||
printCenteredTitle("", width)
|
||
}
|
||
}
|