dump
The dump subcommand reads a transaction stats log and outputs calculated timing differences to a CSV file. The output includes an aggregates section with statistical summaries, followed by detailed per-message timings.
Usage
rumi tools txnstats dump [options]Options
-l, --log <file>
(Required) Path to the transaction stats log file (.txnstats.log)
-o, --output <file>
Output CSV file (default: txnstats-dump.csv)
Example
rumi tools txnstats dump -l /path/to/myapp.txnstats.log -o stats.csvOutput:
Dumping transaction stats from: /path/to/myapp.txnstats.log
Pass 1: Collecting aggregates...
Pass 2: Writing output...
Wrote 14093978 rows from 7178707 transactions to: /path/to/stats.csvTransaction Structure
A Rumi transaction processes messages as follows:
Inbound Messages: One or more messages received from the messaging bus trigger the transaction
Processing: Each inbound message is processed by the application's message handler, which may send outbound messages
Outbound Messages: Messages sent during processing are held until commit
Commit: The transaction commits (persists to the store and replicates to backup cluster members), then releases outbound messages
CSV Output Format
The output contains two sections with identical column structure:
Aggregates Section: Statistical summaries for each timing column
Details Section: Individual timing rows for each inbound-outbound message pair
All timing values are calculated differences in microseconds rather than raw timestamps. The column order is: stat → inbound timestamp/timings → transaction timestamp/timings → outbound timestamp/timings.
Aggregates Section
The aggregates section uses the same column headers as the details section. The stat label (count, min, etc.) appears in the stat column (column A), ensuring timing data columns align between the aggregates and details sections.
count
Total number of data points for the column
Integer
min
Minimum value (exact)
Integer
max
Maximum value (exact)
Integer
avg
Average value
2 decimal places
median
Median value (50th percentile)
2 decimal places
p99
99th percentile
2 decimal places
p99.9
99.9th percentile
2 decimal places
p99.99
99.99th percentile
2 decimal places
Details Section
Each row in the details section represents an inbound-outbound message pair within a transaction:
The
statcolumn is empty in the details sectionTimestamp columns (
inTs,txnTs,outTs) contain raw microsecond timestamps for correlationIf an inbound message produces multiple outbound messages, the inbound timings appear only on the first row
Transaction commit timings and
txnTsappear only on the last row of each transaction
Inbound Message Timings
inTs
Inbound message timestamp
First available of: SMAPostWireTsMicros, SMAPreDeserializeTsMicros, SMAPostDeserializeTsMicros, AEPInputQueueOfferTsMicros, AEPInputQueuePollTsMicros
inSeq
Inbound message sequence number within the transaction
-
in.w2d
Wire to pre-deserialize time
SMAPreDeserializeTsMicros - SMAPostWireTsMicros
in.d
Deserialize time
SMAPostDeserializeTsMicros - SMAPreDeserializeTsMicros
in.d2o
Deserialize to queue offer time
AEPInputQueueOfferTsMicros - SMAPostDeserializeTsMicros
in.o2p
Queue latency (time in input queue)
AEPInputQueuePollTsMicros - AEPInputQueueOfferTsMicros
in.pre
Pre-processing time
AEPPreProcessingTsMicros - AEPInputQueuePollTsMicros
in.proc
Processing time (in message handler)
AEPPostProcessingTsMicros - AEPPreProcessingTsMicros
Transaction Commit Timings
These columns only have values on the last row of each transaction:
txnTs
Transaction timestamp
commitStartTsMicros
txn.store.start
Store commit initiation time
storeCommitStartedTsMicros - storeCommitStartTsMicros
txn.store.commit
Store commit duration
storeCommitCompleteTsMicros - storeCommitStartedTsMicros
txn.send.start
Send commit initiation time
sendCommitStartedTsMicros - sendCommitStartTsMicros
txn.send.commit
Send commit duration
sendCommitCompleteTsMicros - sendCommitStartedTsMicros
txn.commit
Total commit time
commitCompleteTsMicros - commitStartTsMicros
Outbound Message Timings
outTs
Outbound message timestamp
AEPSendEnterTsMicros
outSeq
Outbound message sequence number within the transaction
-
out.sq
Send queue time (enqueuing outbound message)
AEPSendExitTsMicros - AEPSendEnterTsMicros
out.o2s
Commit to pre-serialize time
SMAPreSerializeTsMicros - AEPSendCommitTsMicros
out.s
Serialize time
SMAPostSerializeTsMicros - SMAPreSerializeTsMicros
out.s2w
Serialize to wire time
SMAPreWireTsMicros - SMAPostSerializeTsMicros
out.ws
Wire send time
SMAPostWireTsMicros - SMAPreWireTsMicros
out.snd
Total send time
SMASendEndTsMicros - SMASendStartTsMicros
Example Output
In this example:
Aggregates section: Same header as details, with stat labels in
statcolumn (column A)count, min, max shown as integers
avg, median, percentiles shown with 2 decimal places
Timestamp columns (
inTs,txnTs,outTs) are empty in aggregates
Details section: Individual transaction rows
Row 1: Inbound message 1 with
inTstimestamp, timings, and first outbound message withoutTstimestampRows 2-3: Additional outbound messages with
outTstimestamps, without repeating inbound timingsLast row of transaction 1: Outbound message 27 with
txnTstimestamp and transaction commit timingsNext transaction: Inbound-only rows have empty outbound columns
Compatibility
3.x Compatibility: For logs created with Rumi 3.x, use the --3x flag before the command:
See Also
txnstats - Transaction stats tools overview
txnstats query - Query logs and join with transaction stats
Configuring Per-Transaction Statistics - How to enable per-transaction stats logging
Last updated

