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)
|
dialSuccessMeter = metrics.NewRegisteredMeter("p2p/dials/success", nil)
|
||||||
dialConnectionError = metrics.NewRegisteredMeter("p2p/dials/error/connection", 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
|
// handshake error meters
|
||||||
dialTooManyPeers = metrics.NewRegisteredMeter("p2p/dials/error/saturated", nil)
|
dialTooManyPeers = metrics.NewRegisteredMeter("p2p/dials/error/saturated", nil)
|
||||||
dialAlreadyConnected = metrics.NewRegisteredMeter("p2p/dials/error/known", 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)
|
p.wg.Add(2)
|
||||||
go p.readLoop(readErr)
|
go p.readLoop(readErr)
|
||||||
go p.pingLoop()
|
go p.pingLoop()
|
||||||
|
live1min := time.NewTimer(1 * time.Minute)
|
||||||
|
defer live1min.Stop()
|
||||||
|
|
||||||
// Start all protocol handlers.
|
// Start all protocol handlers.
|
||||||
writeStart <- struct{}{}
|
writeStart <- struct{}{}
|
||||||
|
|
@ -285,6 +287,12 @@ loop:
|
||||||
case err = <-p.disc:
|
case err = <-p.disc:
|
||||||
reason = discReasonForError(err)
|
reason = discReasonForError(err)
|
||||||
break loop
|
break loop
|
||||||
|
case <-live1min.C:
|
||||||
|
if p.Inbound() {
|
||||||
|
serve1MinSuccessMeter.Mark(1)
|
||||||
|
} else {
|
||||||
|
dial1MinSuccessMeter.Mark(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue