@@ -13,17 +13,28 @@ import (
// offlineMonitoring
// @description: 离线监听任务
func offlineMonitoring ( ) {
for {
devices , err := client . WireguardClient . Devices ( )
if err != nil {
time . Sleep ( 5 * time . Minute ) // 休眠五分钟再执行
offlineMonitoring ( )
continue
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
@@ -34,26 +45,13 @@ func offlineMonitoring() {
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 ( "端点IP: %s\r\n " , 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 , "" )
err = utils . Mail ( ) . SendMail ( clientInfo . Email , fmt . Sprintf ( "客户端[%s] 离线通知" , clientInfo . Name ), content , "" )
if err != nil {
log . Errorf ( "发送离线通知邮件失败: %v" , err . Error ( ) )
continue
@@ -61,5 +59,5 @@ func offlineMonitoring() {
}
}
}
}