In this release
New features
* Statistics and performance numbers for peers (`Peer.statistics`) and cumulated for the entire node (`Node.statistics`) (9):
* Counters for received requests for the last minute, 5 minutes and 15 minutes
* Counters for sent result codes for the last minute, 5 minutes and 15 minutes
* Average response times
* Rate of processed responses per second
* Snapshots taken at 1-minute intervals, kept for 24 hours (`Node.statistics_history`)
* AVPs for diameter command messages that do not have a Python implementation can now be accessed as instance attributes as well. All unimplemented commands now inherit from `UndefinedMessage` class, which populates its instance attributes based on the AVPs it contains, when created using `Message.from_bytes` ([documentation](https://mensonen.github.io/diameter/guide/message/)).
* The list of known diameter command messages extended with ~100 new commands, mostly vendor-specific ([documentation](https://mensonen.github.io/diameter/api/commands/other_commands/))
* The most recent peer disconnect reason is recorded and accessible as the `disconnect_reason` Peer instance attribute
* A python implementation for the 3GPP Sy commands have been added:
* Spending-Limit-Request/Answer
* Spending-Status-Notification-Request/Answer
Bugfixes and changes
* `AvpTime` no longer overflows at year 2036, usage extended to year 2104 (8)
* Re-connect with persistent peers is no longer attempted, if the peer has exited after a Disconnect-Peer-Request. This behaviour can be overridden by setting the `always_reconnect` Peer attribute to true (5)
* Message routing to applications works now with multiple realms. I.e. an Application can now receive requests from multiple Peers that have been configured with different realm names
* Dataclasses representing translated Grouped AVPs have been moved to their own module `diameter.message.avp.grouped`
* Attempting to send a message through a node to a destination realm that is unknown (no peers configured) raises now a `NotRoutable` exception
* `RuntimeError` raised in Python 3.12 during interpreter shutdown has been silenced
* `Peer.last_connect` timestamp is now also set for incoming connections after a successful CER, previously always unset
* Nodes no longer dump periodic data on peer connections and statistics into logfiles. Statistics logging is controlled by `Node.peers_logging` and `Node.stats_logging`, both defaulting to False
**Full Changelog**: https://github.com/mensonen/diameter/compare/v0.6.1...v0.7.1