|
66 | 66 |
|
67 | 67 | // capture the rest of errors that are not handled by the above meters
|
68 | 68 | dialOtherError = metrics.NewRegisteredMeter("p2p/dials/error/other", nil)
|
| 69 | + |
| 70 | + // handshake error meters for inbound connections |
| 71 | + serveTooManyPeers = metrics.NewRegisteredMeter("p2p/serves/error/saturated", nil) |
| 72 | + serveAlreadyConnected = metrics.NewRegisteredMeter("p2p/serves/error/known", nil) |
| 73 | + serveSelf = metrics.NewRegisteredMeter("p2p/serves/error/self", nil) |
| 74 | + serveUselessPeer = metrics.NewRegisteredMeter("p2p/serves/error/useless", nil) |
| 75 | + serveUnexpectedIdentity = metrics.NewRegisteredMeter("p2p/serves/error/id/unexpected", nil) |
| 76 | + serveEncHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/enc", nil) //EOF; connection reset during handshake; (message too big?) |
| 77 | + serveProtoHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/proto", nil) |
| 78 | + |
| 79 | + // capture the rest of errors that are not handled by the above meters |
| 80 | + serveOtherError = metrics.NewRegisteredMeter("p2p/serves/error/other", nil) |
69 | 81 | )
|
70 | 82 |
|
71 | 83 | // markDialError matches errors that occur while setting up a dial connection to the
|
@@ -99,6 +111,36 @@ func markDialError(err error) {
|
99 | 111 | }
|
100 | 112 | }
|
101 | 113 |
|
| 114 | +// markServeError matches errors that occur while serving an inbound connection |
| 115 | +// to the corresponding meter. |
| 116 | +func markServeError(err error) { |
| 117 | + if !metrics.Enabled { |
| 118 | + return |
| 119 | + } |
| 120 | + |
| 121 | + var reason DiscReason |
| 122 | + var handshakeErr *protoHandshakeError |
| 123 | + d := errors.As(err, &reason) |
| 124 | + switch { |
| 125 | + case d && reason == DiscTooManyPeers: |
| 126 | + serveTooManyPeers.Mark(1) |
| 127 | + case d && reason == DiscAlreadyConnected: |
| 128 | + serveAlreadyConnected.Mark(1) |
| 129 | + case d && reason == DiscSelf: |
| 130 | + serveSelf.Mark(1) |
| 131 | + case d && reason == DiscUselessPeer: |
| 132 | + serveUselessPeer.Mark(1) |
| 133 | + case d && reason == DiscUnexpectedIdentity: |
| 134 | + serveUnexpectedIdentity.Mark(1) |
| 135 | + case errors.As(err, &handshakeErr): |
| 136 | + serveProtoHandshakeError.Mark(1) |
| 137 | + case errors.Is(err, errEncHandshakeError): |
| 138 | + serveEncHandshakeError.Mark(1) |
| 139 | + default: |
| 140 | + serveOtherError.Mark(1) |
| 141 | + } |
| 142 | +} |
| 143 | + |
102 | 144 | // meteredConn is a wrapper around a net.Conn that meters both the
|
103 | 145 | // inbound and outbound network traffic.
|
104 | 146 | type meteredConn struct {
|
|
0 commit comments