@@ -13,53 +13,51 @@ import (
// offlineMonitoring
// @description: 离线监听任务
func offlineMonitoring ( ) {
for {
devices , err : = client . WireguardClient . Devices ( )
if err != nil {
time . Sleep ( 5 * time . Minute ) // 休眠五分钟再执行
offlineMonitoring ( )
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
}
devices , err := client . WireguardClient . Devices ( )
if err ! = nil {
time . Sleep ( 5 * time . Minute ) // 休眠五分钟再执行
offlineMonitoring ( )
return
}
// 遍历客户端数据,并渲染数据信息
for _ , d := range devices {
for _ , p := range d . Peers {
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
}
clientInfo , err := repository . Client ( ) . GetByPublicKey ( p . PublicKey . String ( ) )
if err != nil {
continue
}
// 没有启用离线监听时,即使客户端已经离线则也不执行
if clientInfo . OfflineMonitoring == nil || * clientInfo . OfflineMonitoring != 1 || clientInfo . Email == "" {
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 ( "客户端[%s]离线通知" , clientInfo . Name ) , content , "" )
if err != nil {
log . Errorf ( "发送离线通知邮件失败: %v" , err . Error ( ) )
continue
}
}
}
}