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
|
||||
.vscode/
|
||||
komari-agent.exe
|
||||
|
@@ -33,43 +33,57 @@ func EstablishWebSocketConnection() {
|
||||
interval = flags.Interval - 1
|
||||
}
|
||||
|
||||
ticker := time.NewTicker(time.Duration(interval * float64(time.Second)))
|
||||
defer ticker.Stop()
|
||||
dataTicker := time.NewTicker(time.Duration(interval * float64(time.Second)))
|
||||
defer dataTicker.Stop()
|
||||
|
||||
for range ticker.C {
|
||||
// If no connection, attempt to connect
|
||||
if conn == nil {
|
||||
log.Println("Attempting to connect to WebSocket...")
|
||||
retry := 0
|
||||
for retry <= flags.MaxRetries {
|
||||
if retry > 0 {
|
||||
log.Println("Retrying websocket connection, attempt:", retry)
|
||||
heartbeatTicker := time.NewTicker(30 * time.Second)
|
||||
defer heartbeatTicker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-dataTicker.C:
|
||||
if conn == nil {
|
||||
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 {
|
||||
log.Println("WebSocket connected")
|
||||
go handleWebSocketMessages(conn, make(chan struct{}))
|
||||
break
|
||||
} else {
|
||||
log.Println("Failed to connect to WebSocket:", err)
|
||||
|
||||
if retry > flags.MaxRetries {
|
||||
log.Println("Max retries reached.")
|
||||
return
|
||||
}
|
||||
retry++
|
||||
time.Sleep(time.Duration(flags.ReconnectInterval) * time.Second)
|
||||
}
|
||||
|
||||
if retry > flags.MaxRetries {
|
||||
log.Println("Max retries reached.")
|
||||
return
|
||||
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
|
||||
}
|
||||
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