@@ -53,6 +53,9 @@ const (
5353 // FirewallCheckTick is the amount of time between periodic checks of all
5454 // firewall rules against all peers connected to this one.
5555 FirewallCheckTick = time .Minute * 10
56+ // ConnectedPeersCheckTick is the amount of time between periodic checks of
57+ // the number of connected peers.
58+ ConnectedPeersCheckTick = time .Minute * 1
5659)
5760
5861// Config defines the configuration for the libp2p network provider.
@@ -134,6 +137,14 @@ type connectionManager struct {
134137 host.Host
135138}
136139
140+ func newConnectionManager (ctx context.Context , host host.Host ) * connectionManager {
141+ connectionManager := & connectionManager {host }
142+
143+ go connectionManager .monitorConnectedPeers (ctx )
144+
145+ return connectionManager
146+ }
147+
137148func (cm * connectionManager ) ConnectedPeers () []string {
138149 var peers []string
139150 for _ , connectedPeer := range cm .Network ().Peers () {
@@ -146,7 +157,7 @@ func (cm *connectionManager) GetPeerPublicKey(connectedPeer string) (*key.Networ
146157 peerID , err := peer .IDB58Decode (connectedPeer )
147158 if err != nil {
148159 return nil , fmt .Errorf (
149- "Failed to decode peer ID from [%s] with error : [%v]" ,
160+ "failed to decode peer ID from [%s]: [%v]" ,
150161 connectedPeer ,
151162 err ,
152163 )
@@ -155,7 +166,7 @@ func (cm *connectionManager) GetPeerPublicKey(connectedPeer string) (*key.Networ
155166 peerPublicKey , err := peerID .ExtractPublicKey ()
156167 if err != nil {
157168 return nil , fmt .Errorf (
158- "Failed to extract peer [%s] public key with error : [%v]" ,
169+ "failed to extract peer [%s] public key: [%v]" ,
159170 connectedPeer ,
160171 err ,
161172 )
@@ -167,7 +178,7 @@ func (cm *connectionManager) GetPeerPublicKey(connectedPeer string) (*key.Networ
167178func (cm * connectionManager ) DisconnectPeer (peerHash string ) {
168179 peerID , err := peer .IDB58Decode (peerHash )
169180 if err != nil {
170- logger .Errorf ("failed to decode peer hash: [%v] [%v]" , peerHash , err )
181+ logger .Errorf ("failed to decode peer hash [%v]: [%v]" , peerHash , err )
171182 return
172183 }
173184
@@ -191,6 +202,23 @@ func (cm *connectionManager) AddrStrings() []string {
191202 return multiaddrStrings
192203}
193204
205+ func (cm * connectionManager ) monitorConnectedPeers (ctx context.Context ) {
206+ ticker := time .NewTicker (ConnectedPeersCheckTick )
207+ defer ticker .Stop ()
208+
209+ for {
210+ select {
211+ case <- ticker .C :
212+ connectedPeers := cm .ConnectedPeers ()
213+
214+ logger .Infof ("number of connected peers: [%v]" , len (connectedPeers ))
215+ logger .Debugf ("connected peers: [%v]" , connectedPeers )
216+ case <- ctx .Done ():
217+ return
218+ }
219+ }
220+ }
221+
194222// ConnectOptions allows to set various options used by libp2p.
195223type ConnectOptions struct {
196224 RoutingTableRefreshPeriod time.Duration
@@ -285,21 +313,21 @@ func Connect(
285313 }
286314
287315 if len (config .Peers ) == 0 {
288- logger .Infof ("node's peers list is empty" )
316+ logger .Infof ("bootstrap peers list is empty" )
289317 }
290318
291- if err := provider .bootstrap (
292- ctx ,
293- config .Peers ,
294- ); err != nil {
295- return nil , fmt .Errorf ("Failed to bootstrap nodes with err: %v" , err )
319+ if err := provider .bootstrap (ctx , config .Peers ); err != nil {
320+ return nil , fmt .Errorf ("bootstrap failed: [%v]" , err )
296321 }
297322
298- provider .connectionManager = & connectionManager { provider .host }
323+ provider .connectionManager = newConnectionManager ( ctx , provider .host )
299324
300- // Instantiates and starts the connection management background process
325+ // Instantiates and starts the connection management background process.
301326 watchtower .NewGuard (
302- ctx , FirewallCheckTick , firewall , provider .connectionManager ,
327+ ctx ,
328+ FirewallCheckTick ,
329+ firewall ,
330+ provider .connectionManager ,
303331 )
304332
305333 return provider , nil
@@ -326,7 +354,7 @@ func discoverAndListen(
326354 )
327355 if err != nil {
328356 return nil , fmt .Errorf (
329- "could not create authenticated transport [%v]" ,
357+ "could not create authenticated transport: [%v]" ,
330358 err ,
331359 )
332360 }
0 commit comments