diff --git a/p2p/discover/portal_protocol.go b/p2p/discover/portal_protocol.go index a298c3ae84..b5f116880a 100644 --- a/p2p/discover/portal_protocol.go +++ b/p2p/discover/portal_protocol.go @@ -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() diff --git a/p2p/discover/portal_protocol_metrics.go b/p2p/discover/portal_protocol_metrics.go new file mode 100644 index 0000000000..6dc7ca2358 --- /dev/null +++ b/p2p/discover/portal_protocol_metrics.go @@ -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), + } +}