(in development)
-
Add per-relay account isolation: Each relay domain now gets its own separate database at
~/.cache/cmping/<relay_domain>/- Ensures completely isolated account databases between different relays
- Prevents potential conflicts when testing multiple relays
- Uses
RelayContextdataclass to cleanly encapsulate RPC, DeltaChat, and AccountMaker per relay
-
Add
--resetoption to force fresh account creation- Removes account directories for tested relays before starting
- Useful for testing with clean state or after account issues
- Only affects relays being tested, not other cached accounts
- Added
wait_profiles_online_multi()function to handle concurrent profile initialization across multiple relays - Better error handling during RPC initialization with proper cleanup of already-initialized contexts
- Improved cleanup logging instead of silently swallowing exceptions
- Add timing statistics at the end of each run showing:
- Account setup time
- Group join time
- Message send/receive time
- Send and receive message rates (msg/s)
-
Streamlined code with extracted helper functions:
print_progress()for consistent progress displayformat_duration()for human-readable time formattingwait_profiles_online()for profile online waiting logicSPINNER_CHARSconstant to avoid duplication
-
Improved verbosity handling for receiver addresses:
- Normal mode: shows only receiver count in statistics
-vmode: shows receiver count after joining-vvmode: shows full list of receiver addresses
-
Added comprehensive documentation:
- Module-level docstring explaining 4-phase message flow
- Detailed docstrings for Pinger class and methods
- Fixed
lossproperty to return0.0instead of1when no messages expected
- Simplified progress display with cleaner UI and animated spinners
- Profile setup shows animated spinner with N/M counter: "# Setting up profiles ⠋ N/M"
- Profile online waiting shows animated spinner: "# Waiting for profiles to be online ⠋"
- Combined "promoting group chat" and "waiting for receivers" into single line: "# Waiting for receivers to come online N/M"
- CMPING line now shows only the number of receivers instead of listing all addresses: "group with N receivers"
- In verbose mode (
-v), all receiver addresses are printed after they come online - Changed terminology from "account" to "profile" in user-facing messages (API calls still use "account")
-
Add comprehensive error event logging with
-vflag- Error events during account setup and configuration are now logged
- Error events during group joining phase are displayed
- Error and failed message events during ping operations are shown
- All error messages use consistent ✗ prefix for easy identification
-
Concurrent receiver joining with live progress indicator
- Changed from sequential to parallel receiver joining using threads
- Shows real-time N/M progress spinner (e.g., "# waiting for receivers to join group 2/5")
- Significantly faster group setup with multiple receivers
- Improved timeout and error handling per receiver
- Refactored code structure for better maintainability
- Extracted
setup_accounts()function for account creation - Extracted
create_and_promote_group()function for group management - Extracted
wait_for_receivers_to_join()function for concurrent joining - Main
perform_ping()function is now cleaner and easier to follow
- Extracted
-
Add IP address support with automated account setup and progress tracking
- Accept IPv4 and IPv6 addresses as relay endpoints
- Generate dclogin URLs with random credentials for IP-based accounts
- Display N/M progress spinner during account setup
- Provide clear error feedback when accounts fail to configure
-
Add
-g NUMRECIPIENTSoption for multi-recipient group chat testing- Creates a single group chat with N recipients instead of N separate 1:1 chats
- Shows animated N/M progress ratio that updates in-place
- Displays MIN/MAX timing: first receiver time and elapsed time to last receiver
- All receivers explicitly accept group before pinging starts
- Properly handles group member addition using Contact objects
- Message verification with 30-second timeout per receiver
- catch keyboardinterrupt and exit with code 2
- allow higher rpc-client/server versions
- show clock-measurements with "-v"
-
added -v option for more verbosity (showing INFO messages from core)
-
simplified internal argument passing
-
notice and print failure string when a message failed to deliver
-
return error code 1 if there was message loss