mirror of
https://github.com/tailscale/tailscale.git
synced 2025-05-04 22:52:11 +00:00
wgengine: periodically poll engine status for logging side effect
Fixes tailscale/corp#1560 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
3c9dea85e6
commit
bb2141e0cf
@ -76,6 +76,10 @@ const (
|
|||||||
packetSendRecheckWireguardThreshold = 1 * time.Minute
|
packetSendRecheckWireguardThreshold = 1 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// statusPollInterval is how often we ask wireguard-go for its engine
|
||||||
|
// status (as long as there's activity). See docs on its use below.
|
||||||
|
const statusPollInterval = 1 * time.Minute
|
||||||
|
|
||||||
type userspaceEngine struct {
|
type userspaceEngine struct {
|
||||||
logf logger.Logf
|
logf logger.Logf
|
||||||
wgLogger *wglog.Logger //a wireguard-go logging wrapper
|
wgLogger *wglog.Logger //a wireguard-go logging wrapper
|
||||||
@ -108,6 +112,7 @@ type userspaceEngine struct {
|
|||||||
sentActivityAt map[netaddr.IP]*int64 // value is atomic int64 of unixtime
|
sentActivityAt map[netaddr.IP]*int64 // value is atomic int64 of unixtime
|
||||||
destIPActivityFuncs map[netaddr.IP]func()
|
destIPActivityFuncs map[netaddr.IP]func()
|
||||||
statusBufioReader *bufio.Reader // reusable for UAPI
|
statusBufioReader *bufio.Reader // reusable for UAPI
|
||||||
|
lastStatusPollTime time.Time // last time we polled the engine status
|
||||||
|
|
||||||
mu sync.Mutex // guards following; see lock order comment below
|
mu sync.Mutex // guards following; see lock order comment below
|
||||||
netMap *netmap.NetworkMap // or nil
|
netMap *netmap.NetworkMap // or nil
|
||||||
@ -708,6 +713,18 @@ func (e *userspaceEngine) noteReceiveActivity(dk tailcfg.DiscoKey) {
|
|||||||
now := e.timeNow()
|
now := e.timeNow()
|
||||||
e.recvActivityAt[dk] = now
|
e.recvActivityAt[dk] = now
|
||||||
|
|
||||||
|
// As long as there's activity, periodically poll the engine to get
|
||||||
|
// stats for the far away side effect of
|
||||||
|
// ipn/ipnlocal.LocalBackend.parseWgStatusLocked to log activity, for
|
||||||
|
// use in various admin dashboards.
|
||||||
|
// This particularly matters on platforms without a connected GUI, as
|
||||||
|
// the GUIs generally poll this enough to cause that logging. But
|
||||||
|
// tailscaled alone did not, hence this.
|
||||||
|
if e.lastStatusPollTime.IsZero() || now.Sub(e.lastStatusPollTime) >= statusPollInterval {
|
||||||
|
e.lastStatusPollTime = now
|
||||||
|
go e.RequestStatus()
|
||||||
|
}
|
||||||
|
|
||||||
// If the last activity time jumped a bunch (say, at least
|
// If the last activity time jumped a bunch (say, at least
|
||||||
// half the idle timeout) then see if we need to reprogram
|
// half the idle timeout) then see if we need to reprogram
|
||||||
// Wireguard. This could probably be just
|
// Wireguard. This could probably be just
|
||||||
|
Loading…
x
Reference in New Issue
Block a user