forked from forks/go-ethereum
p2p: better dial/serve success metrics (#31629)
Our previous success metrics gave success even if a peer disconnected right after connection. These metrics only count peers that stayed connected for at least 1 min. The 1 min limit is an arbitrary choice. We do not use this for decision logic, only statistics.
This commit is contained in:
parent
80753ba147
commit
ecd5c18610
2 changed files with 12 additions and 0 deletions
|
|
@ -51,6 +51,10 @@ var (
|
|||
dialSuccessMeter = metrics.NewRegisteredMeter("p2p/dials/success", nil)
|
||||
dialConnectionError = metrics.NewRegisteredMeter("p2p/dials/error/connection", nil)
|
||||
|
||||
// count peers that stayed connected for at least 1 min
|
||||
serve1MinSuccessMeter = metrics.NewRegisteredMeter("p2p/serves/success/1min", nil)
|
||||
dial1MinSuccessMeter = metrics.NewRegisteredMeter("p2p/dials/success/1min", nil)
|
||||
|
||||
// handshake error meters
|
||||
dialTooManyPeers = metrics.NewRegisteredMeter("p2p/dials/error/saturated", nil)
|
||||
dialAlreadyConnected = metrics.NewRegisteredMeter("p2p/dials/error/known", nil)
|
||||
|
|
|
|||
|
|
@ -254,6 +254,8 @@ func (p *Peer) run() (remoteRequested bool, err error) {
|
|||
p.wg.Add(2)
|
||||
go p.readLoop(readErr)
|
||||
go p.pingLoop()
|
||||
live1min := time.NewTimer(1 * time.Minute)
|
||||
defer live1min.Stop()
|
||||
|
||||
// Start all protocol handlers.
|
||||
writeStart <- struct{}{}
|
||||
|
|
@ -285,6 +287,12 @@ loop:
|
|||
case err = <-p.disc:
|
||||
reason = discReasonForError(err)
|
||||
break loop
|
||||
case <-live1min.C:
|
||||
if p.Inbound() {
|
||||
serve1MinSuccessMeter.Mark(1)
|
||||
} else {
|
||||
dial1MinSuccessMeter.Mark(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue