Skip to content

Commit 4df60c6

Browse files
authored
ddns: improve performance (#385)
1 parent 0501e12 commit 4df60c6

File tree

5 files changed

+33
-33
lines changed

5 files changed

+33
-33
lines changed

pkg/ddns/cloudflare.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ type ProviderCloudflare struct {
1313
Secret string
1414
}
1515

16-
func (provider ProviderCloudflare) UpdateDomain(domainConfig *DomainConfig) bool {
16+
func (provider *ProviderCloudflare) UpdateDomain(domainConfig *DomainConfig) bool {
1717
if domainConfig == nil {
1818
return false
1919
}
@@ -42,7 +42,7 @@ func (provider ProviderCloudflare) UpdateDomain(domainConfig *DomainConfig) bool
4242
return resultV4 && resultV6
4343
}
4444

45-
func (provider ProviderCloudflare) addDomainRecord(zoneID string, domainConfig *DomainConfig, isIpv4 bool) bool {
45+
func (provider *ProviderCloudflare) addDomainRecord(zoneID string, domainConfig *DomainConfig, isIpv4 bool) bool {
4646
record, err := provider.findDNSRecord(zoneID, domainConfig.FullDomain, isIpv4)
4747
if err != nil {
4848
log.Printf("查找 DNS 记录时出错: %s\n", err)
@@ -58,7 +58,7 @@ func (provider ProviderCloudflare) addDomainRecord(zoneID string, domainConfig *
5858
}
5959
}
6060

61-
func (provider ProviderCloudflare) getZoneID(domain string) (string, error) {
61+
func (provider *ProviderCloudflare) getZoneID(domain string) (string, error) {
6262
_, realDomain := SplitDomain(domain)
6363
url := fmt.Sprintf("https://api.cloudflare.com/client/v4/zones?name=%s", realDomain)
6464
body, err := provider.sendRequest("GET", url, nil)
@@ -81,7 +81,7 @@ func (provider ProviderCloudflare) getZoneID(domain string) (string, error) {
8181
return "", fmt.Errorf("找不到 Zone ID")
8282
}
8383

84-
func (provider ProviderCloudflare) findDNSRecord(zoneID string, domain string, isIPv4 bool) (map[string]interface{}, error) {
84+
func (provider *ProviderCloudflare) findDNSRecord(zoneID string, domain string, isIPv4 bool) (map[string]interface{}, error) {
8585
var ipType = "A"
8686
if !isIPv4 {
8787
ipType = "AAAA"
@@ -106,7 +106,7 @@ func (provider ProviderCloudflare) findDNSRecord(zoneID string, domain string, i
106106
return nil, nil // 没有找到 DNS 记录
107107
}
108108

109-
func (provider ProviderCloudflare) createDNSRecord(zoneID string, domainConfig *DomainConfig, isIPv4 bool) bool {
109+
func (provider *ProviderCloudflare) createDNSRecord(zoneID string, domainConfig *DomainConfig, isIPv4 bool) bool {
110110
var ipType = "A"
111111
var ipAddr = domainConfig.Ipv4Addr
112112
if !isIPv4 {
@@ -126,7 +126,7 @@ func (provider ProviderCloudflare) createDNSRecord(zoneID string, domainConfig *
126126
return err == nil
127127
}
128128

129-
func (provider ProviderCloudflare) updateDNSRecord(zoneID string, recordID string, domainConfig *DomainConfig, isIPv4 bool) bool {
129+
func (provider *ProviderCloudflare) updateDNSRecord(zoneID string, recordID string, domainConfig *DomainConfig, isIPv4 bool) bool {
130130
var ipType = "A"
131131
var ipAddr = domainConfig.Ipv4Addr
132132
if !isIPv4 {
@@ -147,7 +147,7 @@ func (provider ProviderCloudflare) updateDNSRecord(zoneID string, recordID strin
147147
}
148148

149149
// 以下为辅助方法,如发送 HTTP 请求等
150-
func (provider ProviderCloudflare) sendRequest(method string, url string, data []byte) ([]byte, error) {
150+
func (provider *ProviderCloudflare) sendRequest(method string, url string, data []byte) ([]byte, error) {
151151
client := &http.Client{}
152152
req, err := http.NewRequest(method, url, bytes.NewBuffer(data))
153153
if err != nil {

pkg/ddns/dummy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package ddns
22

33
type ProviderDummy struct{}
44

5-
func (provider ProviderDummy) UpdateDomain(domainConfig *DomainConfig) bool {
5+
func (provider *ProviderDummy) UpdateDomain(domainConfig *DomainConfig) bool {
66
return false
77
}

pkg/ddns/tencentcloud.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type ProviderTencentCloud struct {
2323
SecretKey string
2424
}
2525

26-
func (provider ProviderTencentCloud) UpdateDomain(domainConfig *DomainConfig) bool {
26+
func (provider *ProviderTencentCloud) UpdateDomain(domainConfig *DomainConfig) bool {
2727
if domainConfig == nil {
2828
return false
2929
}
@@ -46,7 +46,7 @@ func (provider ProviderTencentCloud) UpdateDomain(domainConfig *DomainConfig) bo
4646
return resultV4 && resultV6
4747
}
4848

49-
func (provider ProviderTencentCloud) addDomainRecord(domainConfig *DomainConfig, isIpv4 bool) bool {
49+
func (provider *ProviderTencentCloud) addDomainRecord(domainConfig *DomainConfig, isIpv4 bool) bool {
5050
record, err := provider.findDNSRecord(domainConfig.FullDomain, isIpv4)
5151
if err != nil {
5252
log.Printf("查找 DNS 记录时出错: %s\n", err)
@@ -66,7 +66,7 @@ func (provider ProviderTencentCloud) addDomainRecord(domainConfig *DomainConfig,
6666
return provider.updateDNSRecord(domainConfig.FullDomain, record["RecordList"].([]interface{})[0].(map[string]interface{})["RecordId"].(float64), domainConfig, isIpv4)
6767
}
6868

69-
func (provider ProviderTencentCloud) findDNSRecord(domain string, isIPv4 bool) (map[string]interface{}, error) {
69+
func (provider *ProviderTencentCloud) findDNSRecord(domain string, isIPv4 bool) (map[string]interface{}, error) {
7070
var ipType = "A"
7171
if !isIPv4 {
7272
ipType = "AAAA"
@@ -95,7 +95,7 @@ func (provider ProviderTencentCloud) findDNSRecord(domain string, isIPv4 bool) (
9595
return result, nil
9696
}
9797

98-
func (provider ProviderTencentCloud) createDNSRecord(domain string, domainConfig *DomainConfig, isIPv4 bool) bool {
98+
func (provider *ProviderTencentCloud) createDNSRecord(domain string, domainConfig *DomainConfig, isIPv4 bool) bool {
9999
var ipType = "A"
100100
var ipAddr = domainConfig.Ipv4Addr
101101
if !isIPv4 {
@@ -117,7 +117,7 @@ func (provider ProviderTencentCloud) createDNSRecord(domain string, domainConfig
117117
return err == nil
118118
}
119119

120-
func (provider ProviderTencentCloud) updateDNSRecord(domain string, recordID float64, domainConfig *DomainConfig, isIPv4 bool) bool {
120+
func (provider *ProviderTencentCloud) updateDNSRecord(domain string, recordID float64, domainConfig *DomainConfig, isIPv4 bool) bool {
121121
var ipType = "A"
122122
var ipAddr = domainConfig.Ipv4Addr
123123
if !isIPv4 {
@@ -141,7 +141,7 @@ func (provider ProviderTencentCloud) updateDNSRecord(domain string, recordID flo
141141
}
142142

143143
// 以下为辅助方法,如发送 HTTP 请求等
144-
func (provider ProviderTencentCloud) sendRequest(action string, data []byte) ([]byte, error) {
144+
func (provider *ProviderTencentCloud) sendRequest(action string, data []byte) ([]byte, error) {
145145
client := &http.Client{}
146146
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
147147
if err != nil {
@@ -173,18 +173,18 @@ func (provider ProviderTencentCloud) sendRequest(action string, data []byte) ([]
173173

174174
// https://github.com/jeessy2/ddns-go/blob/master/util/tencent_cloud_signer.go
175175

176-
func (provider ProviderTencentCloud) sha256hex(s string) string {
176+
func (provider *ProviderTencentCloud) sha256hex(s string) string {
177177
b := sha256.Sum256([]byte(s))
178178
return hex.EncodeToString(b[:])
179179
}
180180

181-
func (provider ProviderTencentCloud) hmacsha256(s, key string) string {
181+
func (provider *ProviderTencentCloud) hmacsha256(s, key string) string {
182182
hashed := hmac.New(sha256.New, []byte(key))
183183
hashed.Write([]byte(s))
184184
return string(hashed.Sum(nil))
185185
}
186186

187-
func (provider ProviderTencentCloud) WriteString(strs ...string) string {
187+
func (provider *ProviderTencentCloud) WriteString(strs ...string) string {
188188
var b strings.Builder
189189
for _, str := range strs {
190190
b.WriteString(str)
@@ -193,7 +193,7 @@ func (provider ProviderTencentCloud) WriteString(strs ...string) string {
193193
return b.String()
194194
}
195195

196-
func (provider ProviderTencentCloud) signRequest(secretId string, secretKey string, r *http.Request, action string, payload string) {
196+
func (provider *ProviderTencentCloud) signRequest(secretId string, secretKey string, r *http.Request, action string, payload string) {
197197
algorithm := "TC3-HMAC-SHA256"
198198
service := "dnspod"
199199
host := provider.WriteString(service, ".tencentcloudapi.com")

pkg/ddns/webhook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type ProviderWebHook struct {
1414
RequestHeader string
1515
}
1616

17-
func (provider ProviderWebHook) UpdateDomain(domainConfig *DomainConfig) bool {
17+
func (provider *ProviderWebHook) UpdateDomain(domainConfig *DomainConfig) bool {
1818
if domainConfig == nil {
1919
return false
2020
}

service/singleton/ddns.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package singleton
22

33
import (
4-
"errors"
54
"fmt"
6-
ddns2 "github.com/naiba/nezha/pkg/ddns"
75
"log"
6+
7+
ddns2 "github.com/naiba/nezha/pkg/ddns"
88
)
99

1010
func RetryableUpdateDomain(provider ddns2.Provider, config *ddns2.DomainConfig, maxRetries int) bool {
@@ -25,62 +25,62 @@ func RetryableUpdateDomain(provider ddns2.Provider, config *ddns2.DomainConfig,
2525
func GetDDNSProviderFromString(provider string) (ddns2.Provider, error) {
2626
switch provider {
2727
case "webhook":
28-
return ddns2.ProviderWebHook{
28+
return &ddns2.ProviderWebHook{
2929
URL: Conf.DDNS.WebhookURL,
3030
RequestMethod: Conf.DDNS.WebhookMethod,
3131
RequestBody: Conf.DDNS.WebhookRequestBody,
3232
RequestHeader: Conf.DDNS.WebhookHeaders,
3333
}, nil
3434
case "dummy":
35-
return ddns2.ProviderDummy{}, nil
35+
return &ddns2.ProviderDummy{}, nil
3636
case "cloudflare":
37-
return ddns2.ProviderCloudflare{
37+
return &ddns2.ProviderCloudflare{
3838
Secret: Conf.DDNS.AccessSecret,
3939
}, nil
4040
case "tencentcloud":
41-
return ddns2.ProviderTencentCloud{
41+
return &ddns2.ProviderTencentCloud{
4242
SecretID: Conf.DDNS.AccessID,
4343
SecretKey: Conf.DDNS.AccessSecret,
4444
}, nil
4545
}
46-
return ddns2.ProviderDummy{}, errors.New(fmt.Sprintf("无法找到配置的DDNS提供者%s", Conf.DDNS.Provider))
46+
return &ddns2.ProviderDummy{}, fmt.Errorf("无法找到配置的DDNS提供者%s", Conf.DDNS.Provider)
4747
}
4848

4949
func GetDDNSProviderFromProfile(profileName string) (ddns2.Provider, error) {
5050
profile, ok := Conf.DDNS.Profiles[profileName]
5151
if !ok {
52-
return ddns2.ProviderDummy{}, errors.New(fmt.Sprintf("未找到配置项 %s", profileName))
52+
return &ddns2.ProviderDummy{}, fmt.Errorf("未找到配置项 %s", profileName)
5353
}
5454

5555
switch profile.Provider {
5656
case "webhook":
57-
return ddns2.ProviderWebHook{
57+
return &ddns2.ProviderWebHook{
5858
URL: profile.WebhookURL,
5959
RequestMethod: profile.WebhookMethod,
6060
RequestBody: profile.WebhookRequestBody,
6161
RequestHeader: profile.WebhookHeaders,
6262
}, nil
6363
case "dummy":
64-
return ddns2.ProviderDummy{}, nil
64+
return &ddns2.ProviderDummy{}, nil
6565
case "cloudflare":
66-
return ddns2.ProviderCloudflare{
66+
return &ddns2.ProviderCloudflare{
6767
Secret: profile.AccessSecret,
6868
}, nil
6969
case "tencentcloud":
70-
return ddns2.ProviderTencentCloud{
70+
return &ddns2.ProviderTencentCloud{
7171
SecretID: profile.AccessID,
7272
SecretKey: profile.AccessSecret,
7373
}, nil
7474
}
75-
return ddns2.ProviderDummy{}, errors.New(fmt.Sprintf("无法找到配置的DDNS提供者%s", profile.Provider))
75+
return &ddns2.ProviderDummy{}, fmt.Errorf("无法找到配置的DDNS提供者%s", profile.Provider)
7676
}
7777

7878
func ValidateDDNSProvidersFromProfiles() error {
7979
validProviders := map[string]bool{"webhook": true, "dummy": true, "cloudflare": true, "tencentcloud": true}
8080
providers := make(map[string]string)
8181
for profileName, profile := range Conf.DDNS.Profiles {
8282
if _, ok := validProviders[profile.Provider]; !ok {
83-
return errors.New(fmt.Sprintf("无法找到配置的DDNS提供者%s", profile.Provider))
83+
return fmt.Errorf("无法找到配置的DDNS提供者%s", profile.Provider)
8484
}
8585
providers[profileName] = profile.Provider
8686
}

0 commit comments

Comments
 (0)