@@ -1892,48 +1892,9 @@ cmd_capture_sanitize() {
18921892 local fixture_file=" ${1:- } "
18931893 [ -z " ${fixture_file} " ] && die " Usage: bash rtc-test.sh capture-sanitize <fixture.json>"
18941894 [ -f " ${fixture_file} " ] || die " File not found: ${fixture_file} "
1895- command -v python3 > /dev/null 2>&1 || die " capture-sanitize requires python3"
1896-
1897- python3 -c '
1898- import json, sys
1899-
1900- with open(sys.argv[1]) as f:
1901- data = json.load(f)
1902-
1903- frames_in = data.get("frames", [])
1904- frames_out = []
1905- for frame in frames_in:
1906- rooms = frame.get("request", {}).get("rooms", [])
1907- post_room = None
1908- for r in rooms:
1909- if r.get("room", "").startswith("postType/post:"):
1910- post_room = r
1911- break
1912- if post_room is None:
1913- continue
1914- frames_out.append({
1915- "n": frame.get("n", len(frames_out) + 1),
1916- "elapsed_ms": frame.get("elapsed_ms", 0),
1917- "client_id": frame.get("client_id", 0),
1918- "request": {
1919- "rooms": [{
1920- "room": "postType/post:0",
1921- "client_id": post_room.get("client_id", frame.get("client_id", 0)),
1922- "awareness": {},
1923- "after": 0,
1924- "updates": post_room.get("updates", [])
1925- }]
1926- }
1927- })
1928-
1929- out = {
1930- "session_id": data.get("session_id", ""),
1931- "frame_count": len(frames_out),
1932- "frames": frames_out,
1933- }
1934- json.dump(out, sys.stdout, separators=(",", ":"))
1935- sys.stdout.write("\n")
1936- ' " ${fixture_file} "
1895+ command -v php > /dev/null 2>&1 || die " capture-sanitize requires php"
1896+
1897+ php " ${SCRIPT_DIR} /rtc-helpers.php" capture-sanitize " ${fixture_file} "
19371898}
19381899
19391900# replay FIXTURE_FILE -- replay a captured session JSON against the current RTC endpoint.
@@ -1950,38 +1911,12 @@ cmd_replay() {
19501911 local fixture_file=" ${1:- } "
19511912 [ -z " ${fixture_file} " ] && die " Usage: bash rtc-test.sh replay <fixture.json>"
19521913 [ -f " ${fixture_file} " ] || die " File not found: ${fixture_file} "
1953- command -v python3 > /dev/null 2>&1 || die " replay requires python3 to parse fixture JSON"
1914+ command -v php > /dev/null 2>&1 || die " replay requires php to parse fixture JSON"
19541915
19551916 local speed=" ${REPLAY_SPEED:- 1} "
19561917 print_header " replay ($( basename " ${fixture_file} " ) , speed=${speed} x)"
19571918 require_auth
19581919
1959- # Extract per-frame update payloads from the fixture using python3 -c (no temp file).
1960- # Output format (one line per frame): elapsed_ms <TAB> client_id <TAB> updates_json
1961- # updates_json is comma-separated {type,data} objects; empty string if no updates.
1962- # Only the postType/post:* room is extracted; other rooms (root/comment etc.) skipped.
1963- # sys.stdout.flush() after each line prevents Python pipe-buffering from stalling bash.
1964- local _py_extractor
1965- _py_extractor='
1966- import json, sys
1967- try:
1968- with open(sys.argv[1]) as f:
1969- data = json.load(f)
1970- except Exception as e:
1971- sys.stderr.write("replay: " + str(e) + "\n")
1972- sys.exit(1)
1973- for frame in data.get("frames", []):
1974- elapsed_ms = int(frame.get("elapsed_ms", 0))
1975- client_id = frame.get("client_id", 0)
1976- rooms = frame.get("request", {}).get("rooms", [])
1977- for r in rooms:
1978- if r.get("room", "").startswith("postType/post:"):
1979- updates = r.get("updates", [])
1980- updates_str = ",".join(json.dumps(u, separators=(",",":")) for u in updates)
1981- sys.stdout.write("{}\t{}\t{}\n".format(elapsed_ms, client_id, updates_str))
1982- sys.stdout.flush()
1983- break
1984- '
19851920
19861921 local cursor=0
19871922 local prev_elapsed=0
@@ -2029,7 +1964,7 @@ for frame in data.get("frames", []):
20291964 " ${frame_num} " " ${frame_elapsed} " " ${ui_count} " " ${uo_count} " \
20301965 " ${cursor} " " ${total_updates:- 0} " " ${compact:- false} "
20311966
2032- done < <( python3 -c " ${_py_extractor} " " ${fixture_file} " )
1967+ done < <( php " ${SCRIPT_DIR} /rtc-helpers.php " replay-extract " ${fixture_file} " )
20331968
20341969 if [ " ${frame_num} " -eq 0 ]; then
20351970 printf ' ERROR: no frames extracted. Check fixture format (expected capture-export JSON).\n' >&2
0 commit comments