From ff9f9181b614c0283bcad80a71493f7013ef8015 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 21 Mar 2023 11:41:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96CNAME=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/const/vars.go | 19 +++++++++++++++ internal/utils/lookup.go | 32 ++++++++++++++++++-------- internal/utils/lookup_test.go | 12 ++++++++++ internal/utils/upgrade_manager_test.go | 2 +- web/views/@default/servers/index.js | 1 + 5 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 internal/utils/lookup_test.go diff --git a/internal/const/vars.go b/internal/const/vars.go index 5e80d002..fe62eb43 100644 --- a/internal/const/vars.go +++ b/internal/const/vars.go @@ -2,6 +2,11 @@ package teaconst +import ( + "os" + "strings" +) + var ( IsRecoverMode = false @@ -10,4 +15,18 @@ var ( NewVersionCode = "" // 有新的版本 NewVersionDownloadURL = "" // 新版本下载地址 + + IsMain = checkMain() ) + +// 检查是否为主程序 +func checkMain() bool { + if len(os.Args) == 1 || + (len(os.Args) >= 2 && os.Args[1] == "pprof") { + return true + } + exe, _ := os.Executable() + return strings.HasSuffix(exe, ".test") || + strings.HasSuffix(exe, ".test.exe") || + strings.Contains(exe, "___") +} diff --git a/internal/utils/lookup.go b/internal/utils/lookup.go index 8e6fb1ea..f35f996e 100644 --- a/internal/utils/lookup.go +++ b/internal/utils/lookup.go @@ -1,26 +1,40 @@ package utils import ( + teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/TeaOSLab/EdgeCommon/pkg/configutils" + "github.com/iwind/TeaGo/logs" "github.com/miekg/dns" ) -// LookupCNAME 获取CNAME -func LookupCNAME(host string) (string, error) { - config, err := dns.ClientConfigFromFile("/etc/resolv.conf") - if err != nil { - return "", err +var sharedDNSClient *dns.Client +var sharedDNSConfig *dns.ClientConfig + +func init() { + if !teaconst.IsMain { + return } - c := new(dns.Client) - m := new(dns.Msg) + config, err := dns.ClientConfigFromFile("/etc/resolv.conf") + if err != nil { + logs.Println("ERROR: configure dns client failed: " + err.Error()) + return + } + + sharedDNSConfig = config + sharedDNSClient = &dns.Client{} +} + +// LookupCNAME 获取CNAME +func LookupCNAME(host string) (string, error) { + var m = new(dns.Msg) m.SetQuestion(host+".", dns.TypeCNAME) m.RecursionDesired = true var lastErr error - for _, serverAddr := range config.Servers { - r, _, err := c.Exchange(m, configutils.QuoteIP(serverAddr)+":"+config.Port) + for _, serverAddr := range sharedDNSConfig.Servers { + r, _, err := sharedDNSClient.Exchange(m, configutils.QuoteIP(serverAddr)+":"+sharedDNSConfig.Port) if err != nil { lastErr = err continue diff --git a/internal/utils/lookup_test.go b/internal/utils/lookup_test.go new file mode 100644 index 00000000..54d1fd00 --- /dev/null +++ b/internal/utils/lookup_test.go @@ -0,0 +1,12 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package utils_test + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/utils" + "testing" +) + +func TestLookupCNAME(t *testing.T) { + t.Log(utils.LookupCNAME("www.yun4s.cn")) +} diff --git a/internal/utils/upgrade_manager_test.go b/internal/utils/upgrade_manager_test.go index a967530a..4c18dc6e 100644 --- a/internal/utils/upgrade_manager_test.go +++ b/internal/utils/upgrade_manager_test.go @@ -9,7 +9,7 @@ import ( ) func TestNewUpgradeManager(t *testing.T) { - var manager = utils.NewUpgradeManager("admin") + var manager = utils.NewUpgradeManager("admin", "") var ticker = time.NewTicker(2 * time.Second) go func() { diff --git a/web/views/@default/servers/index.js b/web/views/@default/servers/index.js index 9d455b2c..9d4f776b 100644 --- a/web/views/@default/servers/index.js +++ b/web/views/@default/servers/index.js @@ -28,6 +28,7 @@ Tea.context(function () { .params({ serverIds: serverIds }) + .timeout(300) .success(function (resp) { let status = resp.data.status this.servers.forEach(function (server) {