🐛修复CPU负载过高
All checks were successful
continuous-integration/drone/tag Build is passing

This commit is contained in:
coward 2024-06-14 08:45:16 +08:00
parent a424a5e0b3
commit 8dab976cba
2 changed files with 45 additions and 48 deletions

View File

@ -13,53 +13,51 @@ import (
// offlineMonitoring // offlineMonitoring
// @description: 离线监听任务 // @description: 离线监听任务
func offlineMonitoring() { func offlineMonitoring() {
for { devices, err := client.WireguardClient.Devices()
devices, err := client.WireguardClient.Devices() if err != nil {
if err != nil { time.Sleep(5 * time.Minute) // 休眠五分钟再执行
time.Sleep(5 * time.Minute) // 休眠五分钟再执行 offlineMonitoring()
offlineMonitoring() return
continue }
}
// 遍历客户端数据,并渲染数据信息
for _, d := range devices {
for _, p := range d.Peers {
clientInfo, err := repository.Client().GetByPublicKey(p.PublicKey.String())
if err != nil {
continue
}
// 没有启用离线监听时,即使客户端已经离线则也不执行
if clientInfo.OfflineMonitoring == nil || *clientInfo.OfflineMonitoring != 1 || clientInfo.Email == "" {
continue
}
var ipAllocation string
for _, iaip := range p.AllowedIPs {
ipAllocation += iaip.String() + ","
}
ipAllocation = strings.TrimRight(ipAllocation, ",")
isOnline := time.Since(p.LastHandshakeTime).Minutes() < 3
// 未离线
if !isOnline {
continue
}
content := fmt.Sprintf("客户端:%s\r\n", clientInfo.Name)
content += fmt.Sprintf("客户端IP%s\r\n", ipAllocation)
content += fmt.Sprintf("端点IP%s", p.Endpoint.String())
content += fmt.Sprintf("最后握手时间:%s\r\n", p.LastHandshakeTime.Format("2006-01-02 15:04:05"))
content += fmt.Sprintf("离线时间:%s\r\n", time.Now().Format("2006-01-02 15:04:05"))
// 离线并且配置了邮箱,准备发送邮件
err = utils.Mail().SendMail(clientInfo.Email, fmt.Sprintf("客户端离线通知"), content, "")
if err != nil {
log.Errorf("发送离线通知邮件失败: %v", err.Error())
continue
}
// 遍历客户端数据,并渲染数据信息
for _, d := range devices {
for _, p := range d.Peers {
clientInfo, err := repository.Client().GetByPublicKey(p.PublicKey.String())
if err != nil {
continue
} }
// 没有启用离线监听时,即使客户端已经离线则也不执行
if clientInfo.OfflineMonitoring == nil || *clientInfo.OfflineMonitoring != 1 || clientInfo.Email == "" {
continue
}
var ipAllocation string
for _, iaip := range p.AllowedIPs {
ipAllocation += iaip.String() + ","
}
ipAllocation = strings.TrimRight(ipAllocation, ",")
isOnline := time.Since(p.LastHandshakeTime).Minutes() < 3
// 未离线
if !isOnline {
continue
}
content := fmt.Sprintf("客户端:%s\r\n", clientInfo.Name)
content += fmt.Sprintf("客户端IP%s\r\n", ipAllocation)
content += fmt.Sprintf("端点IP%s\r\n", p.Endpoint.String())
content += fmt.Sprintf("最后握手时间:%s\r\n", p.LastHandshakeTime.Format("2006-01-02 15:04:05"))
// 离线并且配置了邮箱,准备发送邮件
err = utils.Mail().SendMail(clientInfo.Email, fmt.Sprintf("客户端离线通知"), content, "")
if err != nil {
log.Errorf("发送离线通知邮件失败: %v", err.Error())
continue
}
} }
} }
} }

View File

@ -7,7 +7,6 @@ import (
"net/http" "net/http"
"time" "time"
"wireguard-dashboard/config" "wireguard-dashboard/config"
"wireguard-dashboard/cron_task"
"wireguard-dashboard/initialize" "wireguard-dashboard/initialize"
"wireguard-dashboard/queues" "wireguard-dashboard/queues"
"wireguard-dashboard/route" "wireguard-dashboard/route"
@ -19,8 +18,8 @@ func init() {
if err := script.NewScript().Do(); err != nil { if err := script.NewScript().Do(); err != nil {
log.Errorf("执行脚本失败: %v", err.Error()) log.Errorf("执行脚本失败: %v", err.Error())
} }
go queues.StartConsumer() // 启动队列 go queues.StartConsumer() // 启动队列
go cron_task.StartCronTask() // 启动定时任务 //go cron_task.StartCronTask() // 启动定时任务
} }
func main() { func main() {