@@ -294,11 +294,7 @@ func NewConn(options *Options) (conn *Conn, err error) {
294
294
server .telemetryStore .setNetInfo (ni )
295
295
nodeUp .setNetInfo (ni )
296
296
})
297
- server .wireguardEngine .AddNetworkMapCallback (func (nm * netmap.NetworkMap ) {
298
- if server .telemetryStore .updateNetworkMap (nm ) {
299
- server .sendUpdatedTelemetry ()
300
- }
301
- })
297
+ server .wireguardEngine .AddNetworkMapCallback (server .networkMapCallback )
302
298
} else {
303
299
server .wireguardEngine .SetNetInfoCallback (nodeUp .setNetInfo )
304
300
}
@@ -723,25 +719,7 @@ func (c *Conn) SendConnectedTelemetry(ip netip.Addr, application string) {
723
719
c .telemetryStore .markConnected (& ip , c .createdAt , application )
724
720
e := c .newTelemetryEvent ()
725
721
e .Status = proto .TelemetryEvent_CONNECTED
726
- c .telemetryWg .Add (1 )
727
- go func () {
728
- defer c .telemetryWg .Done ()
729
- c .telemetrySink .SendTelemetryEvent (e )
730
- }()
731
- }
732
-
733
- // Currently only called when the preferred DERP is updated.
734
- func (c * Conn ) sendUpdatedTelemetry () {
735
- if c .telemetrySink == nil {
736
- return
737
- }
738
- e := c .newTelemetryEvent ()
739
- e .Status = proto .TelemetryEvent_CONNECTED
740
- c .telemetryWg .Add (1 )
741
- go func () {
742
- defer c .telemetryWg .Done ()
743
- c .telemetrySink .SendTelemetryEvent (e )
744
- }()
722
+ c .sendTelemetryBackground (e )
745
723
}
746
724
747
725
func (c * Conn ) SendDisconnectedTelemetry () {
@@ -750,11 +728,7 @@ func (c *Conn) SendDisconnectedTelemetry() {
750
728
}
751
729
e := c .newTelemetryEvent ()
752
730
e .Status = proto .TelemetryEvent_DISCONNECTED
753
- c .telemetryWg .Add (1 )
754
- go func () {
755
- defer c .telemetryWg .Done ()
756
- c .telemetrySink .SendTelemetryEvent (e )
757
- }()
731
+ c .sendTelemetryBackground (e )
758
732
}
759
733
760
734
func (c * Conn ) SendSpeedtestTelemetry (throughputMbits float64 ) {
@@ -764,11 +738,7 @@ func (c *Conn) SendSpeedtestTelemetry(throughputMbits float64) {
764
738
e := c .newTelemetryEvent ()
765
739
e .ThroughputMbits = wrapperspb .Float (float32 (throughputMbits ))
766
740
e .Status = proto .TelemetryEvent_CONNECTED
767
- c .telemetryWg .Add (1 )
768
- go func () {
769
- defer c .telemetryWg .Done ()
770
- c .telemetrySink .SendTelemetryEvent (e )
771
- }()
741
+ c .sendTelemetryBackground (e )
772
742
}
773
743
774
744
// nolint:revive
@@ -782,15 +752,12 @@ func (c *Conn) sendPingTelemetry(pr *ipnstate.PingResult) {
782
752
if pr .Endpoint != "" {
783
753
e .P2PLatency = latency
784
754
e .P2PEndpoint = c .telemetryStore .toEndpoint (pr .Endpoint )
755
+ e .P2PSetup = durationpb .New (time .Since (c .createdAt ))
785
756
} else {
786
757
e .DerpLatency = latency
787
758
}
788
759
e .Status = proto .TelemetryEvent_CONNECTED
789
- c .telemetryWg .Add (1 )
790
- go func () {
791
- defer c .telemetryWg .Done ()
792
- c .telemetrySink .SendTelemetryEvent (e )
793
- }()
760
+ c .sendTelemetryBackground (e )
794
761
}
795
762
796
763
// The returned telemetry event will not have it's status set.
@@ -804,6 +771,21 @@ func (c *Conn) newTelemetryEvent() *proto.TelemetryEvent {
804
771
return event
805
772
}
806
773
774
+ func (c * Conn ) networkMapCallback (nm * netmap.NetworkMap ) {
775
+ c .telemetryStore .updateNetworkMap (nm )
776
+ if c .telemetryStore .connectedIP != nil {
777
+ go func () { _ , _ , _ , _ = c .Ping (context .Background (), * c .telemetryStore .connectedIP ) }()
778
+ }
779
+ }
780
+
781
+ func (c * Conn ) sendTelemetryBackground (e * proto.TelemetryEvent ) {
782
+ c .telemetryWg .Add (1 )
783
+ go func () {
784
+ defer c .telemetryWg .Done ()
785
+ c .telemetrySink .SendTelemetryEvent (e )
786
+ }()
787
+ }
788
+
807
789
// PeerDiagnostics is a checklist of human-readable conditions necessary to establish an encrypted
808
790
// tunnel to a peer via a Conn
809
791
type PeerDiagnostics struct {
0 commit comments