Decoded recorder

Capture, decode to JSON or SQLite, and replay any topic — with an out-of-band IDL and no compiled type.

What it shows

  • Three CLI tools over one reflective decode core: zerodds-spy (live monitor), zerodds-record (capture) and zerodds-replay (re-publish).
  • --decode --type-file sensor.idl turns raw samples into typed NDJSON and a per-topic SQLite table — one column per flattened field, a child table for a nested sequence, joined on sample_id.
  • The .zddsrec preserves the on-the-wire byte order and XCDR version, so a big-endian or XCDR1 capture replays exactly as it arrived.
  • Without --type-file the spy still follows the type: it learns the writer's type_name from discovery and prints a hex snippet until the matching IDL is supplied.

Capture and replay

zerodds-record record -t Readings --decode --type-file sensor.idl \
      --out-json readings.ndjson --out-sqlite readings.db

zerodds-replay replay capture.zddsrec --inject
zerodds-replay replay readings.ndjson --inject
zerodds-replay replay readings.db --inject
zerodds-replay replay capture.zddsrec --time-scale 60

Output

$ zerodds-spy -t Readings --type-file sensor.idl --decode
zerodds-spy: attached topic=Readings type=telemetry::Reading
[1] writer=… type=telemetry::Reading {"sensor_id":7,"name":"intake","unit":0,"value":21.5,"history":[20,21,22]}

Taken verbatim from the example's own README.

See also

Decoded Recorder

Jedes Topic aufzeichnen, nach JSON oder SQLite decodieren und wieder abspielen — mit Out-of-Band-IDL und ohne kompilierten Typ.

Was es zeigt

  • Drei CLI-Werkzeuge über einem reflektiven Decode-Kern: zerodds-spy (Live-Monitor), zerodds-record (Aufzeichnung) und zerodds-replay (Wiedereinspielen).
  • --decode --type-file sensor.idl macht aus Rohsamples typisiertes NDJSON und eine SQLite-Tabelle pro Topic — eine Spalte je geflachtem Feld, eine Kindtabelle für eine verschachtelte Sequence, verbunden über sample_id.
  • Die .zddsrec bewahrt Byte-Reihenfolge und XCDR-Version der Leitung, sodass eine Big-Endian- oder XCDR1-Aufzeichnung exakt so abgespielt wird, wie sie ankam.
  • Ohne --type-file folgt der Spy dem Typ trotzdem: Er lernt den type_name des Writers aus dem Discovery und gibt einen Hex-Ausschnitt aus, bis die passende IDL geliefert wird.

Aufzeichnen und abspielen

zerodds-record record -t Readings --decode --type-file sensor.idl \
      --out-json readings.ndjson --out-sqlite readings.db

zerodds-replay replay capture.zddsrec --inject
zerodds-replay replay readings.ndjson --inject
zerodds-replay replay readings.db --inject
zerodds-replay replay capture.zddsrec --time-scale 60

Ausgabe

$ zerodds-spy -t Readings --type-file sensor.idl --decode
zerodds-spy: attached topic=Readings type=telemetry::Reading
[1] writer=… type=telemetry::Reading {"sensor_id":7,"name":"intake","unit":0,"value":21.5,"history":[20,21,22]}

Wörtlich aus dem README des Beispiels übernommen.

Verwandt