mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-10 20:15:39 -04:00
Move the Status recorder and its state types out of the peer package into client/internal/peer/status, split by struct across recorder.go, peer_state.go, full_status.go, events.go, notifier.go and route.go instead of one 1600-line file. Rename the type Status -> Recorder (NewRecorder already implied it; avoids status.Status stutter). Split conn_status.go: the ConnStatus type and its constants move to the status package, connStatusInputs stays with the peer event loop. The peer package references the status package directly; a transitional status_alias.go re-exports the moved symbols for the ~50 external callers still using peer.Status/State/ConnStatus, to be removed once they are migrated.
125 lines
2.2 KiB
Go
125 lines
2.2 KiB
Go
package peer
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/netbirdio/netbird/client/internal/peer/status"
|
|
)
|
|
|
|
type stateDump struct {
|
|
log *log.Entry
|
|
status *status.Recorder
|
|
key string
|
|
|
|
sentOffer int
|
|
remoteOffer int
|
|
remoteAnswer int
|
|
remoteCandidate int
|
|
p2pConnected int
|
|
switchToRelay int
|
|
wgCheckSuccess int
|
|
relayConnected int
|
|
localProxies int
|
|
|
|
mu sync.Mutex
|
|
}
|
|
|
|
func newStateDump(key string, log *log.Entry, statusRecorder *status.Recorder) *stateDump {
|
|
return &stateDump{
|
|
log: log,
|
|
status: statusRecorder,
|
|
key: key,
|
|
}
|
|
}
|
|
|
|
func (s *stateDump) Start(ctx context.Context) {
|
|
ticker := time.NewTicker(10 * time.Minute)
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
s.dumpState()
|
|
case <-ctx.Done():
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *stateDump) RemoteOffer() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.remoteOffer++
|
|
}
|
|
|
|
func (s *stateDump) RemoteCandidate() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.remoteCandidate++
|
|
}
|
|
|
|
func (s *stateDump) SendOffer() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.sentOffer++
|
|
}
|
|
|
|
func (s *stateDump) dumpState() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
status := "unknown"
|
|
state, e := s.status.GetPeer(s.key)
|
|
if e == nil {
|
|
status = state.ConnStatus.String()
|
|
}
|
|
|
|
s.log.Infof("Dump stat: Status: %s, SentOffer: %d, RemoteOffer: %d, RemoteAnswer: %d, RemoteCandidate: %d, P2PConnected: %d, SwitchToRelay: %d, WGCheckSuccess: %d, RelayConnected: %d, LocalProxies: %d",
|
|
status, s.sentOffer, s.remoteOffer, s.remoteAnswer, s.remoteCandidate, s.p2pConnected, s.switchToRelay, s.wgCheckSuccess, s.relayConnected, s.localProxies)
|
|
}
|
|
|
|
func (s *stateDump) RemoteAnswer() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.remoteAnswer++
|
|
}
|
|
|
|
func (s *stateDump) P2PConnected() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
s.p2pConnected++
|
|
}
|
|
|
|
func (s *stateDump) SwitchToRelay() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
s.switchToRelay++
|
|
}
|
|
|
|
func (s *stateDump) WGcheckSuccess() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
s.wgCheckSuccess++
|
|
}
|
|
|
|
func (s *stateDump) RelayConnected() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
s.relayConnected++
|
|
}
|
|
|
|
func (s *stateDump) NewLocalProxy() {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
s.localProxies++
|
|
}
|