Files
elmprodvpn/selective-vpn-api/app/transport_health_refresh_queue.go

49 lines
1.0 KiB
Go

package app
import (
"strings"
"time"
)
func transportHealthCandidate(item TransportClient) bool {
if strings.TrimSpace(item.ID) == "" {
return false
}
if !item.Enabled {
return false
}
switch normalizeTransportStatus(item.Status) {
case TransportClientUp, TransportClientStarting, TransportClientDegraded:
return true
default:
return false
}
}
func transportQueueHealthProbe(item TransportClient, force bool) bool {
now := time.Now()
if !transportHealthSWR.begin(item, force, now) {
return false
}
id := strings.TrimSpace(item.ID)
if id == "" {
transportHealthSWR.finishError(id, "missing client id", now)
return false
}
go transportRunHealthProbe(id)
return true
}
func transportScheduleBackgroundHealthRefresh(known []TransportClient, targets []TransportClient) {
if len(known) == 0 || len(targets) == 0 {
return
}
transportHealthSWR.syncKnownClients(known)
for _, it := range targets {
if !transportHealthCandidate(it) {
continue
}
transportQueueHealthProbe(it, false)
}
}