rpc: provide per message stats for global traffic via new RPC 'getnetmsgstats'
Introduce a new RPC, getnetmsgstats to retrieve traffic bytes and count of messages possibly broken down by:
- direction (sent or received)
- network (ipv4, tor, etc)
- connection type (outbound-full-relay, block-relay-only, etc)
- message type (verack, ping, etc)
Implements: https://github.com/bitcoin/bitcoin/issues/26337 Add per message stats to getnettotals rpc
Examples:
bitcoin-cli getnetmsgstats '["direction", "network", "connection_type", "message_type"]'
{
"bytes": 5392756,
"count": 32683
}
bitcoin-cli getnetmsgstats '["direction", "network", "connection_type"]'
{
"sendcmpct": {
"bytes": 975,
"count": 31
},
"sendaddrv2": {
"bytes": 816,
"count": 28
},
"headers": {
"bytes": 1786,
"count": 28
},
"feefilter": {
"bytes": 816,
"count": 27
},
"version": {
"bytes": 4843,
"count": 37
},
"ping": {
"bytes": 1104,
"count": 36
},
"getaddr": {
"bytes": 384,
"count": 13
},
"block": {
"bytes": 5128467,
"count": 20365
},
"getheaders": {
"bytes": 29436,
"count": 28
},
"pong": {
"bytes": 1040,
"count": 34
},
"getdata": {
"bytes": 1218925,
"count": 20008
},
"sendheaders": {
"bytes": 447,
"count": 16
},
"wtxidrelay": {
"bytes": 816,
"count": 28
},
"addrv2": {
"bytes": 301161,
"count": 25
},
"verack": {
"bytes": 816,
"count": 28
}
}
bitcoin-cli getnetmsgstats '["direction", "connection_type", "message_type"]'
{
"i2p": {
"bytes": 1311861,
"count": 8226
},
"onion": {
"bytes": 3932760,
"count": 24272
},
"ipv6": {
"bytes": 631265,
"count": 3362
},
"ipv4": {
"bytes": 1300106,
"count": 7773
}
}
bitcoin-cli getnetmsgstats
{
"recv": {
"i2p": {
"manual": {
"sendcmpct": {
"bytes": 90,
"count": 3
},
"sendaddrv2": {
"bytes": 99,
"count": 3
},
"headers": {
"bytes": 309,
"count": 3
},
"feefilter": {
"bytes": 87,
"count": 3
},
"version": {
"bytes": 408,
"count": 3
},
"ping": {
"bytes": 87,
"count": 3
},
"block": {
"bytes": 432950,
"count": 1794
},
"getheaders": {
"bytes": 3150,
"count": 3
},
"pong": {
"bytes": 87,
"count": 3
},
"wtxidrelay": {
"bytes": 99,
"count": 3
},
"addrv2": {
"bytes": 68508,
"count": 3
},
"verack": {
"bytes": 99,
"count": 3
}
}
},
"onion": {
"block-relay-only": {
"sendcmpct": {
"bytes": 66,
"count": 2
},
"sendaddrv2": {
"bytes": 24,
"count": 1
},
"headers": {
"bytes": 106,
"count": 1
},
"feefilter": {
"bytes": 32,
"count": 1
},
"version": {
"bytes": 126,
"count": 1
},
"ping": {
"bytes": 64,
"count": 2
},
"block": {
"bytes": 478479,
"count": 1896
},
"getheaders": {
"bytes": 1053,
"count": 1
},
"pong": {
"bytes": 64,
"count": 2
},
"sendheaders": {
"bytes": 24,
"count": 1
},
"wtxidrelay": {
"bytes": 24,
"count": 1
},
"verack": {
"bytes": 24,
"count": 1
}
},
"outbound-full-relay": {
"sendcmpct": {
"bytes": 195,
"count": 6
},
"sendaddrv2": {
"bytes": 129,
"count": 5
},
"headers": {
"bytes": 527,
"count": 5
},
"feefilter": {
"bytes": 157,
"count": 5
},
"version": {
"bytes": 639,
"count": 5
},
"ping": {
"bytes": 189,
"count": 6
},
"block": {
"bytes": 1465688,
"count": 5957
},
"getheaders": {
"bytes": 5262,
"count": 5
},
"pong": {
"bytes": 189,
"count": 6
},
"sendheaders": {
"bytes": 24,
"count": 1
},
"wtxidrelay": {
"bytes": 129,
"count": 5
},
"addrv2": {
"bytes": 120693,
"count": 9
},
"verack": {
"bytes": 129,
"count": 5
}
}
},
"ipv6": {
"manual": {
"sendcmpct": {
"bytes": 120,
"count": 4
},
"sendaddrv2": {
"bytes": 132,
"count": 4
},
"headers": {
"bytes": 412,
"count": 4
},
"feefilter": {
"bytes": 116,
"count": 4
},
"version": {
"bytes": 544,
"count": 4
},
"ping": {
"bytes": 116,
"count": 4
},
"block": {
"bytes": 138074,
"count": 583
},
"getheaders": {
"bytes": 4200,
"count": 4
},
"pong": {
"bytes": 116,
"count": 4
},
"wtxidrelay": {
"bytes": 132,
"count": 4
},
"addrv2": {
"bytes": 93436,
"count": 4
},
"verack": {
"bytes": 132,
"count": 4
}
},
"outbound-full-relay": {
"version": {
"bytes": 126,
"count": 1
}
}
},
"ipv4": {
"outbound-full-relay": {
"sendcmpct": {
"bytes": 66,
"count": 2
},
"sendaddrv2": {
"bytes": 24,
"count": 1
},
"headers": {
"bytes": 106,
"count": 1
},
"feefilter": {
"bytes": 32,
"count": 1
},
"version": {
"bytes": 252,
"count": 2
},
"ping": {
"bytes": 32,
"count": 1
},
"block": {
"bytes": 313988,
"count": 1255
},
"getheaders": {
"bytes": 1053,
"count": 1
},
"pong": {
"bytes": 32,
"count": 1
},
"sendheaders": {
"bytes": 24,
"count": 1
},
"wtxidrelay": {
"bytes": 24,
"count": 1
},
"addrv2": {
"bytes": 40,
"count": 1
},
"verack": {
"bytes": 24,
"count": 1
}
}
}
},
"sent": {
"i2p": {
"manual": {
"sendcmpct": {
"bytes": 90,
"count": 3
},
"sendaddrv2": {
"bytes": 99,
"count": 3
},
"headers": {
"bytes": 66,
"count": 3
},
"feefilter": {
"bytes": 87,
"count": 3
},
"version": {
"bytes": 544,
"count": 4
},
"ping": {
"bytes": 87,
"count": 3
},
"getaddr": {
"bytes": 99,
"count": 3
},
"getheaders": {
"bytes": 3150,
"count": 3
},
"pong": {
"bytes": 87,
"count": 3
},
"getdata": {
"bytes": 105382,
"count": 1789
},
"sendheaders": {
"bytes": 99,
"count": 3
},
"wtxidrelay": {
"bytes": 99,
"count": 3
},
"verack": {
"bytes": 99,
"count": 3
}
}
},
"onion": {
"block-relay-only": {
"sendcmpct": {
"bytes": 33,
"count": 1
},
"sendaddrv2": {
"bytes": 24,
"count": 1
},
"headers": {
"bytes": 25,
"count": 1
},
"version": {
"bytes": 127,
"count": 1
},
"ping": {
"bytes": 64,
"count": 2
},
"getheaders": {
"bytes": 1053,
"count": 1
},
"pong": {
"bytes": 64,
"count": 2
},
"getdata": {
"bytes": 115932,
"count": 1884
},
"sendheaders": {
"bytes": 24,
"count": 1
},
"wtxidrelay": {
"bytes": 24,
"count": 1
},
"verack": {
"bytes": 24,
"count": 1
}
},
"outbound-full-relay": {
"sendcmpct": {
"bytes": 162,
"count": 5
},
"sendaddrv2": {
"bytes": 129,
"count": 5
},
"headers": {
"bytes": 122,
"count": 5
},
"feefilter": {
"bytes": 157,
"count": 5
},
"version": {
"bytes": 771,
"count": 6
},
"ping": {
"bytes": 221,
"count": 7
},
"getaddr": {
"bytes": 129,
"count": 5
},
"getheaders": {
"bytes": 5262,
"count": 5
},
"pong": {
"bytes": 189,
"count": 6
},
"getdata": {
"bytes": 363478,
"count": 5932
},
"sendheaders": {
"bytes": 129,
"count": 5
},
"wtxidrelay": {
"bytes": 129,
"count": 5
},
"addrv2": {
"bytes": 231,
"count": 4
},
"verack": {
"bytes": 129,
"count": 5
}
}
},
"ipv6": {
"manual": {
"sendcmpct": {
"bytes": 120,
"count": 4
},
"sendaddrv2": {
"bytes": 132,
"count": 4
},
"headers": {
"bytes": 88,
"count": 4
},
"feefilter": {
"bytes": 116,
"count": 4
},
"version": {
"bytes": 544,
"count": 4
},
"ping": {
"bytes": 116,
"count": 4
},
"getaddr": {
"bytes": 132,
"count": 4
},
"getheaders": {
"bytes": 4200,
"count": 4
},
"pong": {
"bytes": 116,
"count": 4
},
"getdata": {
"bytes": 35492,
"count": 584
},
"sendheaders": {
"bytes": 99,
"count": 3
},
"wtxidrelay": {
"bytes": 132,
"count": 4
},
"verack": {
"bytes": 132,
"count": 4
}
},
"outbound-full-relay": {
"version": {
"bytes": 254,
"count": 2
}
}
},
"ipv4": {
"outbound-full-relay": {
"sendcmpct": {
"bytes": 33,
"count": 1
},
"sendaddrv2": {
"bytes": 24,
"count": 1
},
"headers": {
"bytes": 25,
"count": 1
},
"feefilter": {
"bytes": 32,
"count": 1
},
"version": {
"bytes": 508,
"count": 4
},
"ping": {
"bytes": 32,
"count": 1
},
"getaddr": {
"bytes": 24,
"count": 1
},
"getheaders": {
"bytes": 1053,
"count": 1
},
"pong": {
"bytes": 32,
"count": 1
},
"getdata": {
"bytes": 76531,
"count": 1231
},
"sendheaders": {
"bytes": 24,
"count": 1
},
"wtxidrelay": {
"bytes": 24,
"count": 1
},
"verack": {
"bytes": 24,
"count": 1
}
}
}
}
}
Previous incarnations of this:
https://github.com/bitcoin/bitcoin/pull/27534 rpc: add 'getnetmsgstats', new rpc to view network message statistics (Thank you, @satsie!)
https://github.com/bitcoin/bitcoin/pull/28926 rpc: add 'getnetmsgstats' RPC (Thank you, @willcl-ark!)