v1.1.9
1.优化即时刷新DDNS任务IP信息显示 2.优化Webhook触发机制 3.新增域名更新状态 暂停,用于标记获取IP失败 4.优化ddns任务执行时间间隔计算
This commit is contained in:
parent
a2ce54fef6
commit
a5b58811a3
|
@ -15,7 +15,9 @@ const (
|
|||
// UpdatedSuccess 更新成功
|
||||
UpdatedSuccess = "成功"
|
||||
// UpdateStop 暂停
|
||||
UpdateStop = "暂停"
|
||||
UpdateStop = "停止同步"
|
||||
//UpdatePause 暂停 获取IP失败时暂停
|
||||
UpdatePause = "暂停同步"
|
||||
// UpdateWaiting
|
||||
UpdateWaiting = "等待更新"
|
||||
)
|
||||
|
|
|
@ -23,7 +23,7 @@ func (d *DDNSTask) ExecWebhook(domains *DomainsState) {
|
|||
|
||||
tryUpdate := hasDomainTryToUpdate(domains.Domains)
|
||||
|
||||
if d.WebhookURL != "" && tryUpdate {
|
||||
if d.WebhookURL != "" && (tryUpdate || (domains.IpAddr == "" && d.WebhookCallOnGetIPfail)) {
|
||||
|
||||
//log.Printf("DDNS任务【%s】触发Webhook", d.TaskName)
|
||||
|
||||
|
@ -66,6 +66,8 @@ func WebhookTest(d *DDNSTask, url, method, WebhookRequestBody, proxy, addr, user
|
|||
url = replaceWebhookTestPara(url, nowTime)
|
||||
requestBody := replaceWebhookTestPara(WebhookRequestBody, nowTime)
|
||||
|
||||
//log.Printf("requestBody:\n%s", requestBody)
|
||||
|
||||
//headersStr := cb.task.DNS.Callback.Headers
|
||||
var headerStrList []string
|
||||
for i := range headerList {
|
||||
|
@ -205,8 +207,15 @@ func hasDomainTryToUpdate(domains []*Domain) bool {
|
|||
// replaceWebhookTestPara WebhookTest替换参数 #{successDomains},#{failedDomains}
|
||||
func replaceWebhookTestPara(orgPara, nowTime string) (newPara string) {
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{ipAddr}", "66.66.66.66")
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{successDomains}", "baidu.com,google.com")
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{failedDomains}", "weibo.com,github.com")
|
||||
|
||||
successDomains := "www1.google.com,www2.google.com,www3.google.com,www4.google.com"
|
||||
failedDomains := "www1.github.com,www2.github.com,www3.github.com,www4.github.com"
|
||||
successDomainsLine := strings.Replace(successDomains, ",", `\n`, -1)
|
||||
failedDomainsLine := strings.Replace(failedDomains, ",", `\n`, -1)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{successDomains}", successDomains)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{failedDomains}", failedDomains)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{successDomainsLine}", successDomainsLine)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{failedDomainsLine}", failedDomainsLine)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{time}", nowTime)
|
||||
return orgPara
|
||||
}
|
||||
|
@ -214,13 +223,23 @@ func replaceWebhookTestPara(orgPara, nowTime string) (newPara string) {
|
|||
// replacePara 替换参数 #{successDomains},#{failedDomains}
|
||||
func replaceWebhookPara(d *DomainsState, nowTime, orgPara string) (newPara string) {
|
||||
ipAddrText := d.IpAddr
|
||||
|
||||
successDomains, failedDomains := getDomainsStr(d.Domains)
|
||||
if ipAddrText == "" {
|
||||
ipAddrText = "获取IP失败"
|
||||
successDomains = ""
|
||||
failedDomains = ""
|
||||
}
|
||||
|
||||
successDomainsLine := strings.Replace(successDomains, ",", `\n`, -1)
|
||||
failedDomainsLine := strings.Replace(failedDomains, ",", `\n`, -1)
|
||||
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{ipAddr}", ipAddrText)
|
||||
successDomains, failedDomains := getDomainsStr(d.Domains)
|
||||
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{successDomains}", successDomains)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{failedDomains}", failedDomains)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{successDomainsLine}", successDomainsLine)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{failedDomainsLine}", failedDomainsLine)
|
||||
orgPara = strings.ReplaceAll(orgPara, "#{time}", nowTime)
|
||||
return orgPara
|
||||
}
|
||||
|
|
11
ddns/ddns.go
11
ddns/ddns.go
|
@ -34,6 +34,8 @@ func syncAllDomainsOnce(params ...any) {
|
|||
config.CleanIPUrlAddrMap()
|
||||
ddnsConf := config.GetDDNSConfigure()
|
||||
|
||||
taskBeginTime := time.Now()
|
||||
|
||||
for index := range ddnsTaskList {
|
||||
|
||||
task := ddnsTaskList[index]
|
||||
|
@ -60,8 +62,14 @@ func syncAllDomainsOnce(params ...any) {
|
|||
}
|
||||
wg.Wait()
|
||||
|
||||
taskEndTime := time.Now()
|
||||
|
||||
usedTime := taskEndTime.Sub(taskBeginTime)
|
||||
|
||||
nextTaskTimer := time.Second*time.Duration(ddnsConf.Intervals) - usedTime
|
||||
|
||||
//log.Printf("syncAllDomainsOnce 任务完成")
|
||||
DDNSService.Timer = time.NewTimer(time.Second * time.Duration(ddnsConf.Intervals))
|
||||
DDNSService.Timer = time.NewTimer(nextTaskTimer)
|
||||
}
|
||||
|
||||
func syncTaskDomainsOnce(params ...any) {
|
||||
|
@ -71,6 +79,7 @@ func syncTaskDomainsOnce(params ...any) {
|
|||
case "syncDDNSTask":
|
||||
{
|
||||
//log.Printf("syncTaskDomainsOnce 单DDNS任务更新:%s", taskKey)
|
||||
config.CleanIPUrlAddrMap()
|
||||
task := config.GetDDNSTaskByKey(taskKey)
|
||||
syncDDNSTask(task)
|
||||
}
|
||||
|
|
|
@ -38,11 +38,12 @@ func (d *DNSCommon) AddUpdateDomainRecords() string {
|
|||
|
||||
func (d *DNSCommon) addUpdateDomainRecords(recordType string) string {
|
||||
ipAddr, change, domains := d.task.DomainsState.CheckIPChange(recordType, d.task.TaskKey, d.task.GetIpAddr)
|
||||
|
||||
d.task.DomainsState.SetIPAddr(ipAddr)
|
||||
//及时刷新IP地址显示
|
||||
config.DDNSTaskListFlushDomainsDetails(d.task.TaskKey, &d.task.DomainsState)
|
||||
|
||||
if ipAddr == "" {
|
||||
d.task.DomainsState.SetDomainUpdateStatus(config.UpdatedFailed, "获取公网IP失败")
|
||||
d.task.DomainsState.SetDomainUpdateStatus(config.UpdatePause, "获取公网IP失败")
|
||||
return ipAddr
|
||||
}
|
||||
|
||||
|
@ -88,9 +89,14 @@ sync:
|
|||
|
||||
if d.task.DNS.ResolverDoaminCheck {
|
||||
domainResolverIPaddr, _ := ResolveDomainAtServerList(recordType, domain.String(), d.task.DNS.DNSServerList)
|
||||
//log.Printf("domain:%s domainResolverIPaddr:%s ,ipaddr:%s", domain.String(), domainResolverIPaddr, ipAddr)
|
||||
|
||||
if domainResolverIPaddr == ipAddr {
|
||||
domain.SetDomainUpdateStatus(config.UpdatedNothing, "")
|
||||
if domain.UpdateStatus == config.UpdatedFailed {
|
||||
domain.SetDomainUpdateStatus(config.UpdatedSuccess, "")
|
||||
} else {
|
||||
domain.SetDomainUpdateStatus(config.UpdatedNothing, "")
|
||||
}
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -8,8 +8,8 @@
|
|||
|
||||
|
||||
<title>Lucky(大吉)</title>
|
||||
<script type="module" crossorigin src="/assets/index.2a9c070f.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index.c6f60373.css">
|
||||
<script type="module" crossorigin src="/assets/index.85a8bea4.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index.c38c8b21.css">
|
||||
</head>
|
||||
<body style="margin:0">
|
||||
<div id="app"></div>
|
||||
|
|
|
@ -825,8 +825,11 @@
|
|||
<el-tooltip class="box-item" effect="dark" content="">
|
||||
<template #content>支持的变量 <br />
|
||||
#{ipAddr} : 当前公网IP<br />
|
||||
#{successDomains} : 更新/添加成功的域名列表<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表</template>
|
||||
#{time} : 触发Webhook的时间 <br />
|
||||
#{successDomains} : 更新/添加成功的域名列表,域名之间用,号分隔<br />
|
||||
#{successDomainsLine} : 更新/添加成功的域名列表,域名之间用'\n'分隔<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表,域名之间用,号分隔<br />
|
||||
#{failedDomainsLine} : 更新/添加失败的域名列表,域名之间用'\n'分隔</template>
|
||||
<el-form-item label="接口地址" label-width="auto">
|
||||
<el-input v-model="DDNSForm.WebhookURL" autocomplete="off" />
|
||||
</el-form-item>
|
||||
|
@ -849,8 +852,10 @@
|
|||
支持的变量 :<br />
|
||||
#{time} : 触发Webhook的时间 <br />
|
||||
#{ipAddr} : 当前公网IP <br />
|
||||
#{successDomains} : 更新/添加成功的域名列表<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表<br />
|
||||
#{successDomains} : 更新/添加成功的域名列表,域名之间用,号分隔<br />
|
||||
#{successDomainsLine} : 更新/添加成功的域名列表,域名之间用'\n'分隔<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表,域名之间用,号分隔<br />
|
||||
#{failedDomainsLine} : 更新/添加失败的域名列表,域名之间用'\n'分隔<br />
|
||||
如果需要使用BasicAuth,请使用下面两行Header设置BasicAuth的账号和密码<br />
|
||||
BasicAuthUserName:你的账号<br />
|
||||
BasicAuthPassword:你的密码</template>
|
||||
|
@ -868,8 +873,10 @@
|
|||
<template #content>支持的变量<br />
|
||||
#{time} : 触发Webhook的时间 <br />
|
||||
#{ipAddr} : 当前公网IP<br />
|
||||
#{successDomains} : 更新/添加成功的域名列表<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表</template>
|
||||
#{successDomains} : 更新/添加成功的域名列表,域名之间用,号分隔<br />
|
||||
#{successDomainsLine} : 更新/添加成功的域名列表,域名之间用'\n'分隔<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表,域名之间用,号分隔<br />
|
||||
#{failedDomainsLine} : 更新/添加失败的域名列表,域名之间用'\n'分隔</template>
|
||||
<el-form-item label="RequestBody" label-width="auto"
|
||||
v-show="DDNSForm.WebhookMethod == 'get' ? false : true">
|
||||
<el-input v-model="DDNSForm.WebhookRequestBody" type="textarea" rows="5"
|
||||
|
@ -884,8 +891,10 @@
|
|||
多种表示成功的不同字符串请分多行写<br />
|
||||
支持的变量 <br />
|
||||
#{ipAddr} : 当前公网IP<br />
|
||||
#{successDomains} : 更新/添加成功的域名列表<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表</template>
|
||||
#{successDomains} : 更新/添加成功的域名列表,域名之间用,号分隔<br />
|
||||
#{successDomainsLine} : 更新/添加成功的域名列表,域名之间用'\n'分隔<br />
|
||||
#{failedDomains} : 更新/添加失败的域名列表,域名之间用,号分隔<br />
|
||||
#{failedDomainsLine} : 更新/添加失败的域名列表,域名之间用'\n'分隔</template>
|
||||
<el-form-item label="接口调用成功包含的字符串" label-width="auto">
|
||||
<el-input v-model="DDNSFormWebhookSuccessContentArea"
|
||||
:autosize="{ minRows: 3, maxRows: 5 }" type="textarea" autocomplete="off"
|
||||
|
@ -1306,8 +1315,8 @@ const WebhookServerSelectChange = (server : string)=>{
|
|||
let dingding_msg = {
|
||||
msgtype:"markdown",
|
||||
markdown:{
|
||||
title:"你的公网IP变了",
|
||||
text:'#### 你的公网IP变了 \n - IP地址:#{ipAddr} \n - 域名更新成功列表:#{successDomains}\n - 域名更新失败列表:#{failedDomains}\n - Webhook触发时间:#{time}'
|
||||
title:"DDNS域名同步反馈",
|
||||
text:'#### DDNS域名同步反馈 \n - IP地址:#{ipAddr} \n - 域名更新成功列表:#{successDomainsLine}\n - 域名更新失败列表:#{failedDomainsLine}\n - Webhook触发时间: \n #{time}'
|
||||
},
|
||||
}
|
||||
WebhookServerListArea.value = JSON.stringify(dingding_msg,null,2);
|
||||
|
@ -1318,12 +1327,12 @@ const WebhookServerSelectChange = (server : string)=>{
|
|||
content:{
|
||||
post:{
|
||||
zh_cn:{
|
||||
title:"你的公网IP变了",
|
||||
title:"DDNS域名同步反馈",
|
||||
content:[
|
||||
[{tag:"text",text:"IP地址:#{ipAddr}"}],
|
||||
[{tag:"text",text:"域名更新成功列表:#{successDomains}"}],
|
||||
[{tag:"text",text:"域名更新失败列表:#{failedDomains}"}],
|
||||
[{tag:"text",text:"Webhook触发时间: #{time}"}],
|
||||
[{tag:"text",text:"域名更新成功列表:#{successDomainsLine}"}],
|
||||
[{tag:"text",text:"域名更新失败列表:#{successDomainsLine}"}],
|
||||
[{tag:"text",text:"Webhook触发时间: \n#{time}"}],
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1335,7 +1344,7 @@ const WebhookServerSelectChange = (server : string)=>{
|
|||
let weixin_msg = {
|
||||
msgtype:"markdown",
|
||||
markdown:{
|
||||
content:'#### 你的公网IP变了 \n - IP地址:#{ipAddr} \n - 域名更新成功列表:#{successDomains}\n - 域名更新失败列表:#{failedDomains}\n - Webhook触发时间:#{time}'
|
||||
content:'#### DDNS域名同步反馈 \n##### IP地址:\n#{ipAddr} \n##### 域名更新成功列表:\n#{successDomainsLine}\n##### 域名更新失败列表:\n#{failedDomainsLine}\n##### Webhook触发时间: \n#{time}'
|
||||
}
|
||||
}
|
||||
WebhookServerListArea.value= JSON.stringify(weixin_msg,null,2)
|
||||
|
|
Loading…
Reference in New Issue