🎨新增客户端离线后上线通知
All checks were successful
continuous-integration/drone/tag Build is passing

This commit is contained in:
coward 2024-12-09 09:06:51 +08:00
parent 96999be84a
commit 628c09fdde
2 changed files with 33 additions and 11 deletions

View File

@ -1,6 +1,7 @@
package task package task
import ( import (
"context"
"fmt" "fmt"
"gitee.ltd/lxh/logger/log" "gitee.ltd/lxh/logger/log"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
@ -9,6 +10,7 @@ import (
"time" "time"
"wireguard-ui/component" "wireguard-ui/component"
"wireguard-ui/global/client" "wireguard-ui/global/client"
"wireguard-ui/global/constant"
"wireguard-ui/model" "wireguard-ui/model"
"wireguard-ui/service" "wireguard-ui/service"
"wireguard-ui/utils" "wireguard-ui/utils"
@ -69,17 +71,17 @@ func (c networkClient) ClientOfflineNotify() {
online := time.Since(peer.LastHandshakeTime).Minutes() < 3 online := time.Since(peer.LastHandshakeTime).Minutes() < 3
log.Debugf("客户端[%v]在线状态: %v离线时间: %v", clientName, online, time.Since(peer.LastHandshakeTime).Minutes()) log.Debugf("客户端[%v]在线状态: %v离线时间: %v", clientName, online, time.Since(peer.LastHandshakeTime).Minutes())
var ipAllocation string
for _, iaip := range peer.AllowedIPs {
ipAllocation += iaip.String() + ","
}
// 去除一下最右边的逗号
if len(ipAllocation) > 0 {
ipAllocation = strings.TrimRight(ipAllocation, ",")
}
// 如果存在,判断离线时间 // 如果存在,判断离线时间
if !online { if !online {
var ipAllocation string
for _, iaip := range peer.AllowedIPs {
ipAllocation += iaip.String() + ","
}
// 去除一下最右边的逗号
if len(ipAllocation) > 0 {
ipAllocation = strings.TrimRight(ipAllocation, ",")
}
// 已经离线,发送通知 // 已经离线,发送通知
msg := fmt.Sprintf(`[离线通知] msg := fmt.Sprintf(`[离线通知]
客户端名称 : %v 客户端名称 : %v
@ -90,6 +92,25 @@ func (c networkClient) ClientOfflineNotify() {
log.Errorf("微信消息[%v]通知失败: %v", msg, err.Error()) log.Errorf("微信消息[%v]通知失败: %v", msg, err.Error())
continue continue
} }
// 离线了,设置离线标识
client.Redis.Set(context.Background(), fmt.Sprintf("%s%s", constant.ClientOffline, utils.Hash().MD5(ipAllocation)), true, 0)
} else {
// 判断是否存在缓存
if client.Redis.Exists(context.Background(), fmt.Sprintf("%s%s", constant.ClientOffline, utils.Hash().MD5(ipAllocation))).Val() > 0 {
// 存在,删除离线标识
client.Redis.Del(context.Background(), fmt.Sprintf("%s%s", constant.ClientOffline, utils.Hash().MD5(ipAllocation)))
// 微信通知该客户端已经上线
msg := fmt.Sprintf(`[上线通知]
客户端名称 : %v
客户端IP : %v
最后在线时间 : %v`, clientName, ipAllocation, peer.LastHandshakeTime.Format("2006-01-02 15:04:05"))
err := utils.WechatNotify(code).SendTextMessage(msg)
if err != nil {
log.Errorf("微信消息[%v]通知失败: %v", msg, err.Error())
continue
}
}
} }
} }

View File

@ -1,6 +1,7 @@
package constant package constant
const ( const (
Captcha = "captcha" Captcha = "captcha"
UserToken = "token" UserToken = "token"
ClientOffline = "client:offline:"
) )