summaryrefslogtreecommitdiff
path: root/ocaml/scripts/inspect_event.ml
blob: 569f103818974a1986f5aa034e5382fe39bfa689 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
open Nock_lib

let rec find_project_root dir =
  let pills_dir = Filename.concat dir "pills" in
  if Sys.file_exists pills_dir && Sys.is_directory pills_dir then dir
  else
    let parent = Filename.dirname dir in
    if String.equal parent dir then failwith "unable to locate project root containing pills/"
    else find_project_root parent

let project_root =
  match Sys.getenv_opt "NEOVERE_ROOT" with
  | Some root -> root
  | None ->
      let exe_dir = Filename.dirname Sys.executable_name in
      find_project_root exe_dir

let rec print_noun_structure noun depth =
  let indent = String.make (depth * 2) ' ' in
  match noun with
  | Noun.Atom z ->
      let size = Z.numbits z in
      if size <= 64 then
        Printf.printf "%sAtom: %s (0x%s, %d bits)\n"
          indent (Z.to_string z) (Z.format "%x" z) size
      else
        Printf.printf "%sAtom: <large %d bits>\n" indent size
  | Noun.Cell (h, t) ->
      Printf.printf "%sCell:\n" indent;
      Printf.printf "%s  Head:\n" indent;
      print_noun_structure h (depth + 2);
      Printf.printf "%s  Tail:\n" indent;
      print_noun_structure t (depth + 2)

let () =
  if Array.length Sys.argv < 2 then begin
    Printf.printf "Usage: %s <event_number>\n" Sys.argv.(0);
    exit 1
  end;

  let event_num = Int64.of_string Sys.argv.(1) in
  let pier_path = Filename.concat project_root "test-pier" in

  if not (Sys.file_exists pier_path) then begin
    Printf.printf "Test pier not found at: %s\n" pier_path;
    Printf.printf "Run test_pier_boot.exe first\n";
    exit 1
  end;

  Printf.printf "\n╔═══════════════════════════════════════════════════════╗\n";
  Printf.printf "║  Event Inspector                                      ║\n";
  Printf.printf "╚═══════════════════════════════════════════════════════╝\n\n";

  let eventlog = Eventlog.create ~enabled:false pier_path in

  Printf.printf "Reading event %Ld from test pier...\n\n" event_num;

  let event = Eventlog.read_event eventlog event_num in

  Printf.printf "Event structure:\n";
  print_noun_structure event 0;

  Printf.printf "\n";

  (* Check if it's a timestamped event [timestamp data] *)
  match event with
  | Noun.Cell (Noun.Atom timestamp, event_data) ->
      Printf.printf "✓ Event is properly timestamped!\n";
      Printf.printf "  Timestamp: %s\n" (Z.to_string timestamp);
      Printf.printf "  Timestamp (hex): 0x%s\n" (Z.format "%x" timestamp);
      Printf.printf "  Timestamp bits: %d\n" (Z.numbits timestamp);
      Printf.printf "\n  Event data structure:\n";
      print_noun_structure event_data 2
  | _ ->
      Printf.printf "⚠ Event does NOT appear to be timestamped!\n";
      Printf.printf "  Expected: [timestamp event_data]\n";
      Printf.printf "  Got something else\n"