mirror of
https://github.com/netbirdio/netbird.git
synced 2025-07-23 00:54:38 +02:00
This PR introduces a new inactivity package responsible for monitoring peer activity and notifying when peers become inactive. Introduces a new Signal message type to close the peer connection after the idle timeout is reached. Periodically checks the last activity of registered peers via a Bind interface. Notifies via a channel when peers exceed a configurable inactivity threshold. Default settings DefaultInactivityThreshold is set to 15 minutes, with a minimum allowed threshold of 1 minute. Limitations This inactivity check does not support kernel WireGuard integration. In kernel–user space communication, the user space side will always be responsible for closing the connection.
30 lines
752 B
Go
30 lines
752 B
Go
package monotime
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
baseWallTime time.Time
|
|
baseWallNano int64
|
|
)
|
|
|
|
func init() {
|
|
baseWallTime = time.Now()
|
|
baseWallNano = baseWallTime.UnixNano()
|
|
}
|
|
|
|
// Now returns the current time as Unix nanoseconds (int64).
|
|
// It uses monotonic time measurement from the base time to ensure
|
|
// the returned value increases monotonically and is not affected
|
|
// by system clock adjustments.
|
|
//
|
|
// Performance optimization: By capturing the base wall time once at startup
|
|
// and using time.Since() for elapsed calculation, this avoids repeated
|
|
// time.Now() calls and leverages Go's internal monotonic clock for
|
|
// efficient duration measurement.
|
|
func Now() int64 {
|
|
elapsed := time.Since(baseWallTime)
|
|
return baseWallNano + int64(elapsed)
|
|
}
|