refactor: portal protocol metrics

This commit is contained in:
Rafael Sampaio 2024-10-17 21:46:22 -03:00
parent d1b5606b00
commit efa2e9002a
2 changed files with 73 additions and 63 deletions

View file

@ -44,26 +44,6 @@ import (
"go.uber.org/zap"
)
var (
messagesReceivedAccept metrics.Meter
messagesReceivedNodes metrics.Meter
messagesReceivedFindNodes metrics.Meter
messagesReceivedFindContent metrics.Meter
messagesReceivedContent metrics.Meter
messagesReceivedOffer metrics.Meter
messagesReceivedPing metrics.Meter
messagesReceivedPong metrics.Meter
messagesSentAccept metrics.Meter
messagesSentNodes metrics.Meter
messagesSentFindNodes metrics.Meter
messagesSentFindContent metrics.Meter
messagesSentContent metrics.Meter
messagesSentOffer metrics.Meter
messagesSentPing metrics.Meter
messagesSentPong metrics.Meter
)
const (
// TalkResp message is a response message so the session is established and a
@ -220,6 +200,8 @@ type PortalProtocol struct {
portMappingRegister chan *portMapping
clock mclock.Clock
NAT nat.Interface
portalMetrics *portalMetrics
}
func defaultContentIdFunc(contentKey []byte) []byte {
@ -259,23 +241,7 @@ func NewPortalProtocol(config *PortalProtocolConfig, protocolId portalwire.Proto
}
if metrics.Enabled {
messagesReceivedAccept = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/accept", nil)
messagesReceivedNodes = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/nodes", nil)
messagesReceivedFindNodes = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/find_nodes", nil)
messagesReceivedFindContent = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/find_content", nil)
messagesReceivedContent = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/content", nil)
messagesReceivedOffer = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/offer", nil)
messagesReceivedPing = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/ping", nil)
messagesReceivedPong = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/received/pong", nil)
messagesSentAccept = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/accept", nil)
messagesSentNodes = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/nodes", nil)
messagesSentFindNodes = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/find_nodes", nil)
messagesSentFindContent = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/find_content", nil)
messagesSentContent = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/content", nil)
messagesSentOffer = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/offer", nil)
messagesSentPing = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/ping", nil)
messagesSentPong = metrics.NewRegisteredMeter("portal/"+protocolId.Name()+"/sent/pong", nil)
protocol.portalMetrics = newPortalMetrics(protocolId.Name())
}
return protocol, nil
@ -470,7 +436,7 @@ func (p *PortalProtocol) pingInner(node *enode.Node) (*portalwire.Pong, error) {
p.Log.Trace(">> PING/"+p.protocolName, "protocol", p.protocolName, "ip", p.Self().IP().String(), "source", p.Self().ID(), "target", node.ID(), "ping", pingRequest)
if metrics.Enabled {
messagesSentPing.Mark(1)
p.portalMetrics.messagesSentPing.Mark(1)
}
pingRequestBytes, err := pingRequest.MarshalSSZ()
if err != nil {
@ -489,7 +455,7 @@ func (p *PortalProtocol) pingInner(node *enode.Node) (*portalwire.Pong, error) {
p.Log.Trace("<< PONG/"+p.protocolName, "source", p.Self().ID(), "target", node.ID(), "res", talkResp)
if metrics.Enabled {
messagesReceivedPong.Mark(1)
p.portalMetrics.messagesReceivedPong.Mark(1)
}
return p.processPong(node, talkResp)
@ -511,7 +477,7 @@ func (p *PortalProtocol) findNodes(node *enode.Node, distances []uint) ([]*enode
p.Log.Trace(">> FIND_NODES/"+p.protocolName, "id", node.ID(), "findNodes", findNodes)
if metrics.Enabled {
messagesSentFindNodes.Mark(1)
p.portalMetrics.messagesSentFindNodes.Mark(1)
}
findNodesBytes, err := findNodes.MarshalSSZ()
if err != nil {
@ -539,7 +505,7 @@ func (p *PortalProtocol) findContent(node *enode.Node, contentKey []byte) (byte,
p.Log.Trace(">> FIND_CONTENT/"+p.protocolName, "id", node.ID(), "findContent", findContent)
if metrics.Enabled {
messagesSentFindContent.Mark(1)
p.portalMetrics.messagesSentFindContent.Mark(1)
}
findContentBytes, err := findContent.MarshalSSZ()
if err != nil {
@ -569,7 +535,7 @@ func (p *PortalProtocol) offer(node *enode.Node, offerRequest *OfferRequest) ([]
p.Log.Trace(">> OFFER/"+p.protocolName, "offer", offer)
if metrics.Enabled {
messagesSentOffer.Mark(1)
p.portalMetrics.messagesSentOffer.Mark(1)
}
offerBytes, err := offer.MarshalSSZ()
if err != nil {
@ -610,7 +576,7 @@ func (p *PortalProtocol) processOffer(target *enode.Node, resp []byte, request *
p.Log.Trace("<< ACCEPT/"+p.protocolName, "id", target.ID(), "accept", accept)
if metrics.Enabled {
messagesReceivedAccept.Mark(1)
p.portalMetrics.messagesReceivedAccept.Mark(1)
}
isAdded := p.table.addFoundNode(target, true)
if isAdded {
@ -708,7 +674,7 @@ func (p *PortalProtocol) processOffer(target *enode.Node, resp []byte, request *
}
p.Log.Trace(">> CONTENT/"+p.protocolName, "id", target.ID(), "contents", contents, "size", written)
if metrics.Enabled {
messagesSentContent.Mark(1)
p.portalMetrics.messagesSentContent.Mark(1)
}
return
}
@ -740,7 +706,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
p.Log.Trace("<< CONTENT/"+p.protocolName, "id", target.ID(), "content", content)
if metrics.Enabled {
messagesReceivedContent.Mark(1)
p.portalMetrics.messagesReceivedContent.Mark(1)
}
isAdded := p.table.addFoundNode(target, true)
if isAdded {
@ -758,7 +724,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
p.Log.Trace("<< CONTENT_CONNECTION_ID/"+p.protocolName, "id", target.ID(), "resp", common.Bytes2Hex(resp), "connIdMsg", connIdMsg)
if metrics.Enabled {
messagesReceivedContent.Mark(1)
p.portalMetrics.messagesReceivedContent.Mark(1)
}
isAdded := p.table.addFoundNode(target, true)
if isAdded {
@ -798,7 +764,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
}
p.Log.Trace("<< CONTENT/"+p.protocolName, "id", target.ID(), "size", len(data), "data", data)
if metrics.Enabled {
messagesReceivedContent.Mark(1)
p.portalMetrics.messagesReceivedContent.Mark(1)
}
return resp[1], data, nil
case portalwire.ContentEnrsSelector:
@ -811,7 +777,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
p.Log.Trace("<< CONTENT_ENRS/"+p.protocolName, "id", target.ID(), "enrs", enrs)
if metrics.Enabled {
messagesReceivedContent.Mark(1)
p.portalMetrics.messagesReceivedContent.Mark(1)
}
isAdded := p.table.addFoundNode(target, true)
if isAdded {
@ -879,7 +845,7 @@ func (p *PortalProtocol) filterNodes(target *enode.Node, enrs [][]byte, distance
p.Log.Trace("<< NODES/"+p.protocolName, "id", target.ID(), "total", len(enrs), "verified", verified, "nodes", nodes)
if metrics.Enabled {
messagesReceivedNodes.Mark(1)
p.portalMetrics.messagesReceivedNodes.Mark(1)
}
return nodes
}
@ -899,7 +865,7 @@ func (p *PortalProtocol) processPong(target *enode.Node, resp []byte) (*portalwi
p.Log.Trace("<< PONG_RESPONSE/"+p.protocolName, "id", target.ID(), "pong", pong)
if metrics.Enabled {
messagesReceivedPong.Mark(1)
p.portalMetrics.messagesReceivedPong.Mark(1)
}
customPayload := &portalwire.PingPongCustomData{}
@ -910,7 +876,7 @@ func (p *PortalProtocol) processPong(target *enode.Node, resp []byte) (*portalwi
p.Log.Trace("<< PONG_RESPONSE/"+p.protocolName, "id", target.ID(), "pong", pong, "customPayload", customPayload)
if metrics.Enabled {
messagesReceivedPong.Mark(1)
p.portalMetrics.messagesReceivedPong.Mark(1)
}
isAdded := p.table.addFoundNode(target, true)
if isAdded {
@ -953,7 +919,7 @@ func (p *PortalProtocol) handleTalkRequest(id enode.ID, addr *net.UDPAddr, msg [
p.Log.Trace("<< PING/"+p.protocolName, "protocol", p.protocolName, "source", id, "pingRequest", pingRequest)
if metrics.Enabled {
messagesReceivedPing.Mark(1)
p.portalMetrics.messagesReceivedPing.Mark(1)
}
resp, err := p.handlePing(id, pingRequest)
if err != nil {
@ -972,7 +938,7 @@ func (p *PortalProtocol) handleTalkRequest(id enode.ID, addr *net.UDPAddr, msg [
p.Log.Trace("<< FIND_NODES/"+p.protocolName, "protocol", p.protocolName, "source", id, "findNodesRequest", findNodesRequest)
if metrics.Enabled {
messagesReceivedFindNodes.Mark(1)
p.portalMetrics.messagesReceivedFindNodes.Mark(1)
}
resp, err := p.handleFindNodes(addr, findNodesRequest)
if err != nil {
@ -991,7 +957,7 @@ func (p *PortalProtocol) handleTalkRequest(id enode.ID, addr *net.UDPAddr, msg [
p.Log.Trace("<< FIND_CONTENT/"+p.protocolName, "protocol", p.protocolName, "source", id, "findContentRequest", findContentRequest)
if metrics.Enabled {
messagesReceivedFindContent.Mark(1)
p.portalMetrics.messagesReceivedFindContent.Mark(1)
}
resp, err := p.handleFindContent(id, addr, findContentRequest)
if err != nil {
@ -1010,7 +976,7 @@ func (p *PortalProtocol) handleTalkRequest(id enode.ID, addr *net.UDPAddr, msg [
p.Log.Trace("<< OFFER/"+p.protocolName, "protocol", p.protocolName, "source", id, "offerRequest", offerRequest)
if metrics.Enabled {
messagesReceivedOffer.Mark(1)
p.portalMetrics.messagesReceivedOffer.Mark(1)
}
resp, err := p.handleOffer(id, addr, offerRequest)
if err != nil {
@ -1054,7 +1020,7 @@ func (p *PortalProtocol) handlePing(id enode.ID, ping *portalwire.Ping) ([]byte,
p.Log.Trace(">> PONG/"+p.protocolName, "protocol", p.protocolName, "source", id, "pong", pong)
if metrics.Enabled {
messagesSentPong.Mark(1)
p.portalMetrics.messagesSentPong.Mark(1)
}
pongBytes, err := pong.MarshalSSZ()
@ -1090,7 +1056,7 @@ func (p *PortalProtocol) handleFindNodes(fromAddr *net.UDPAddr, request *portalw
p.Log.Trace(">> NODES/"+p.protocolName, "protocol", p.protocolName, "source", fromAddr, "nodes", nodesMsg)
if metrics.Enabled {
messagesSentNodes.Mark(1)
p.portalMetrics.messagesSentNodes.Mark(1)
}
nodesMsgBytes, err := nodesMsg.MarshalSSZ()
if err != nil {
@ -1144,7 +1110,7 @@ func (p *PortalProtocol) handleFindContent(id enode.ID, addr *net.UDPAddr, reque
p.Log.Trace(">> CONTENT_ENRS/"+p.protocolName, "protocol", p.protocolName, "source", addr, "enrs", enrsMsg)
if metrics.Enabled {
messagesSentContent.Mark(1)
p.portalMetrics.messagesSentContent.Mark(1)
}
var enrsMsgBytes []byte
enrsMsgBytes, err = enrsMsg.MarshalSSZ()
@ -1168,7 +1134,7 @@ func (p *PortalProtocol) handleFindContent(id enode.ID, addr *net.UDPAddr, reque
p.Log.Trace(">> CONTENT_RAW/"+p.protocolName, "protocol", p.protocolName, "source", addr, "content", rawContentMsg)
if metrics.Enabled {
messagesSentContent.Mark(1)
p.portalMetrics.messagesSentContent.Mark(1)
}
var rawContentMsgBytes []byte
@ -1244,7 +1210,7 @@ func (p *PortalProtocol) handleFindContent(id enode.ID, addr *net.UDPAddr, reque
p.Log.Trace(">> CONTENT_CONNECTION_ID/"+p.protocolName, "protocol", p.protocolName, "source", addr, "connId", connIdMsg)
if metrics.Enabled {
messagesSentContent.Mark(1)
p.portalMetrics.messagesSentContent.Mark(1)
}
var connIdMsgBytes []byte
connIdMsgBytes, err = connIdMsg.MarshalSSZ()
@ -1275,7 +1241,7 @@ func (p *PortalProtocol) handleOffer(id enode.ID, addr *net.UDPAddr, request *po
p.Log.Trace(">> ACCEPT/"+p.protocolName, "protocol", p.protocolName, "source", addr, "accept", acceptMsg)
if metrics.Enabled {
messagesSentAccept.Mark(1)
p.portalMetrics.messagesSentAccept.Mark(1)
}
var acceptMsgBytes []byte
acceptMsgBytes, err = acceptMsg.MarshalSSZ()
@ -1353,7 +1319,7 @@ func (p *PortalProtocol) handleOffer(id enode.ID, addr *net.UDPAddr, request *po
}
p.Log.Trace("<< OFFER_CONTENT/"+p.protocolName, "id", id, "size", len(data), "data", data)
if metrics.Enabled {
messagesReceivedContent.Mark(1)
p.portalMetrics.messagesReceivedContent.Mark(1)
}
err = p.handleOfferedContents(id, contentKeys, data)
@ -1379,7 +1345,7 @@ func (p *PortalProtocol) handleOffer(id enode.ID, addr *net.UDPAddr, request *po
p.Log.Trace(">> ACCEPT/"+p.protocolName, "protocol", p.protocolName, "source", addr, "accept", acceptMsg)
if metrics.Enabled {
messagesSentAccept.Mark(1)
p.portalMetrics.messagesSentAccept.Mark(1)
}
var acceptMsgBytes []byte
acceptMsgBytes, err = acceptMsg.MarshalSSZ()

View file

@ -0,0 +1,44 @@
package discover
import "github.com/ethereum/go-ethereum/metrics"
type portalMetrics struct {
messagesReceivedAccept metrics.Meter
messagesReceivedNodes metrics.Meter
messagesReceivedFindNodes metrics.Meter
messagesReceivedFindContent metrics.Meter
messagesReceivedContent metrics.Meter
messagesReceivedOffer metrics.Meter
messagesReceivedPing metrics.Meter
messagesReceivedPong metrics.Meter
messagesSentAccept metrics.Meter
messagesSentNodes metrics.Meter
messagesSentFindNodes metrics.Meter
messagesSentFindContent metrics.Meter
messagesSentContent metrics.Meter
messagesSentOffer metrics.Meter
messagesSentPing metrics.Meter
messagesSentPong metrics.Meter
}
func newPortalMetrics(protocolName string) *portalMetrics {
return &portalMetrics{
messagesReceivedAccept: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/accept", nil),
messagesReceivedNodes: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/nodes", nil),
messagesReceivedFindNodes: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/find_nodes", nil),
messagesReceivedFindContent: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/find_content", nil),
messagesReceivedContent: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/content", nil),
messagesReceivedOffer: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/offer", nil),
messagesReceivedPing: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/ping", nil),
messagesReceivedPong: metrics.NewRegisteredMeter("portal/"+protocolName+"/received/pong", nil),
messagesSentAccept: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/accept", nil),
messagesSentNodes: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/nodes", nil),
messagesSentFindNodes: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/find_nodes", nil),
messagesSentFindContent: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/find_content", nil),
messagesSentContent: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/content", nil),
messagesSentOffer: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/offer", nil),
messagesSentPing: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/ping", nil),
messagesSentPong: metrics.NewRegisteredMeter("portal/"+protocolName+"/sent/pong", nil),
}
}