mirror of
https://github.com/fankes/komari-agent.git
synced 2025-10-18 18:49:23 +08:00
feat: https://github.com/komari-monitor/komari/issues/108 实现应用层的心跳机制
git忽略__debug
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
__debug*
|
||||||
agent.json
|
agent.json
|
||||||
.vscode/
|
.vscode/
|
||||||
komari-agent.exe
|
komari-agent.exe
|
||||||
|
@@ -33,43 +33,57 @@ func EstablishWebSocketConnection() {
|
|||||||
interval = flags.Interval - 1
|
interval = flags.Interval - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
ticker := time.NewTicker(time.Duration(interval * float64(time.Second)))
|
dataTicker := time.NewTicker(time.Duration(interval * float64(time.Second)))
|
||||||
defer ticker.Stop()
|
defer dataTicker.Stop()
|
||||||
|
|
||||||
for range ticker.C {
|
heartbeatTicker := time.NewTicker(30 * time.Second)
|
||||||
// If no connection, attempt to connect
|
defer heartbeatTicker.Stop()
|
||||||
if conn == nil {
|
|
||||||
log.Println("Attempting to connect to WebSocket...")
|
for {
|
||||||
retry := 0
|
select {
|
||||||
for retry <= flags.MaxRetries {
|
case <-dataTicker.C:
|
||||||
if retry > 0 {
|
if conn == nil {
|
||||||
log.Println("Retrying websocket connection, attempt:", retry)
|
log.Println("Attempting to connect to WebSocket...")
|
||||||
|
retry := 0
|
||||||
|
for retry <= flags.MaxRetries {
|
||||||
|
if retry > 0 {
|
||||||
|
log.Println("Retrying websocket connection, attempt:", retry)
|
||||||
|
}
|
||||||
|
conn, err = connectWebSocket(websocketEndpoint)
|
||||||
|
if err == nil {
|
||||||
|
log.Println("WebSocket connected")
|
||||||
|
go handleWebSocketMessages(conn, make(chan struct{}))
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
log.Println("Failed to connect to WebSocket:", err)
|
||||||
|
}
|
||||||
|
retry++
|
||||||
|
time.Sleep(time.Duration(flags.ReconnectInterval) * time.Second)
|
||||||
}
|
}
|
||||||
conn, err = connectWebSocket(websocketEndpoint)
|
|
||||||
if err == nil {
|
if retry > flags.MaxRetries {
|
||||||
log.Println("WebSocket connected")
|
log.Println("Max retries reached.")
|
||||||
go handleWebSocketMessages(conn, make(chan struct{}))
|
return
|
||||||
break
|
|
||||||
} else {
|
|
||||||
log.Println("Failed to connect to WebSocket:", err)
|
|
||||||
}
|
}
|
||||||
retry++
|
|
||||||
time.Sleep(time.Duration(flags.ReconnectInterval) * time.Second)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if retry > flags.MaxRetries {
|
data := monitoring.GenerateReport()
|
||||||
log.Println("Max retries reached.")
|
err = conn.WriteMessage(websocket.TextMessage, data)
|
||||||
return
|
if err != nil {
|
||||||
|
log.Println("Failed to send WebSocket message:", err)
|
||||||
|
conn.Close()
|
||||||
|
conn = nil // Mark connection as dead
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
case <-heartbeatTicker.C:
|
||||||
|
if conn != nil {
|
||||||
|
err := conn.WriteMessage(websocket.PingMessage, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to send heartbeat:", err)
|
||||||
|
conn.Close()
|
||||||
|
conn = nil // Mark connection as dead
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
data := monitoring.GenerateReport()
|
|
||||||
err = conn.WriteMessage(websocket.TextMessage, data)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Failed to send WebSocket message:", err)
|
|
||||||
conn.Close()
|
|
||||||
conn = nil // Mark connection as dead
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user