Add ping for connectivity monitoring

This commit is contained in:
Owen
2025-04-13 17:27:43 -04:00
parent 4cb31df3c8
commit 61b7feef80
2 changed files with 47 additions and 0 deletions

View File

@@ -60,6 +60,7 @@ var (
peerMonitor *peermonitor.PeerMonitor
stopHolepunch chan struct{}
stopRegister chan struct{}
stopPing chan struct{}
olmToken string
gerbilServerPubKey string
)
@@ -383,3 +384,40 @@ func FindAvailableUDPPort(minPort, maxPort uint16) (uint16, error) {
return 0, fmt.Errorf("no available UDP ports found in range %d-%d", minPort, maxPort)
}
func sendPing(olm *websocket.Client) error {
err := olm.SendMessage("olm/ping", map[string]interface{}{
"timestamp": time.Now().Unix(),
})
if err != nil {
logger.Error("Failed to send ping message: %v", err)
return err
}
logger.Debug("Sent ping message")
return nil
}
func keepSendingPing(olm *websocket.Client) {
// Send ping immediately on startup
if err := sendPing(olm); err != nil {
logger.Error("Failed to send initial ping: %v", err)
} else {
logger.Info("Sent initial ping message")
}
// Set up ticker for one minute intervals
ticker := time.NewTicker(1 * time.Minute)
defer ticker.Stop()
for {
select {
case <-stopPing:
logger.Info("Stopping ping messages")
return
case <-ticker.C:
if err := sendPing(olm); err != nil {
logger.Error("Failed to send periodic ping: %v", err)
}
}
}
}

View File

@@ -135,6 +135,7 @@ func main() {
stopHolepunch = make(chan struct{})
stopRegister = make(chan struct{})
stopPing = make(chan struct{})
// if PANGOLIN_ENDPOINT, OLM_ID, and OLM_SECRET are set as environment variables, they will be used as default values
endpoint = os.Getenv("PANGOLIN_ENDPOINT")
@@ -473,6 +474,7 @@ func main() {
logger.Debug("Public key: %s", publicKey)
go keepSendingRegistration(olm, publicKey.String())
go keepSendingPing(olm)
logger.Info("Sent registration message")
return nil
@@ -509,6 +511,13 @@ func main() {
close(stopRegister)
}
select {
case <-stopPing:
// Channel already closed
default:
close(stopPing)
}
uapi.Close()
dev.Close()
}