From cdef7af87f6ff7c7f39b3e2af157970ff795eb84 Mon Sep 17 00:00:00 2001 From: Wei-Ning Huang Date: Fri, 18 Jan 2019 22:22:07 +0800 Subject: p2p: report latency and relative latency to datadog (#162) --- p2p/peer.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'p2p/peer.go') diff --git a/p2p/peer.go b/p2p/peer.go index 3d6ce9dcd..9183082a1 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -260,7 +260,7 @@ func (p *Peer) pingLoop() { for { select { case <-ping.C: - if err := SendItems(p.rw, pingMsg); err != nil { + if err := SendItems(p.rw, pingMsg, uint64(time.Now().UnixNano())); err != nil { p.protoErr <- err return } @@ -290,8 +290,14 @@ func (p *Peer) readLoop(errc chan<- error) { func (p *Peer) handle(msg Msg) error { switch { case msg.Code == pingMsg: - msg.Discard() - go SendItems(p.rw, pongMsg) + var pingTime [1]uint64 + rlp.Decode(msg.Payload, &pingTime) + peerRelativeLatency.Update((time.Now().UnixNano() - int64(pingTime[0])) / 1000) + go SendItems(p.rw, pongMsg, pingTime[0]) + case msg.Code == pongMsg: + var pingTime [1]uint64 + rlp.Decode(msg.Payload, &pingTime) + peerLatency.Update((time.Now().UnixNano() - int64(pingTime[0])) / 2 / 1000) case msg.Code == discMsg: var reason [1]DiscReason // This is the last message. We don't need to discard or -- cgit