code wiki / _hdl_build / nx_apm_dashboard_gate.nx
nx_apm_dashboard_gate.nx source
↩ module page · 100 lines · 5482 B
1// nx_apm_dashboard_gate.nx -- SOVEREIGN gate for the APM dashboard renderer (seg-store edition, NO tsv).
2// Writes synthetic seg-store records (one GREEN daemon, one RED daemon w/ timeouts, one ARTIFACT daemon
3// w/ slowclose>0 but fast ttfb) to an ISOLATED test store, runs nx_apm_dashboard on it, proves the HTML:
4// T1 all daemons rendered as cards
5// T2 DETECTION -- the RED daemon appears in Incidents (<b>name</b>)
6// T3 NEG-CONTROL -- the GREEN daemon is NOT in Incidents
7// T4 LIAR-KILL -- the ARTIFACT daemon (fast ttfb, slow close) is NOT in Incidents
8// T5 the ARTIFACT daemon shows its slowclose info badge
9// Requires /tmp/nx_apm_dashboard.sov.elf built first. license_tier: ORIGINAL
10import "nx_syscalls.nx"
11import "nx_apm_dashboard.nx" // ad_bs / ad_bn / ad_slen / ad_read_small
12
13const GD_ELF: *u8 = "/tmp/nx_apm_dashboard.sov.elf"
14const GD_STORE: *u8 = "/tmp/ad_store"
15const GD_HTML: *u8 = "/tmp/ad_test.html"
16
17func gd_uw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
18func gd_wn(v: i64) -> i64 { let b: *u8 = sys_mmap(24); let e: i64 = ad_bn(b, 0, v); sys_write(1, b, e); return 0 }
19func gd_contains(hay: *u8, hayn: i64, needle: *u8) -> i64 {
20 let nn: i64 = ad_slen(needle); if nn == 0 { return 1 }
21 var i: i64 = 0
22 while i + nn <= hayn {
23 var j: i64 = 0; var ok: i64 = 1
24 while j < nn { if hay[i+j] != needle[j] { ok = 0; j = nn } else { j = j + 1 } }
25 if ok == 1 { return 1 }
26 i = i + 1
27 }
28 return 0
29}
30// write one synthetic seg-store record /tmp/ad_store/apm-<label> (key:value, NO tsv)
31func gd_rec(label: *u8, port: i64, conc: i64, oks: i64, p50: i64, mx: i64, to: i64, slow: i64) -> i64 {
32 let p: *u8 = sys_mmap(256); var po: i64 = ad_bs(p, 0, "/tmp/ad_store/apm-" as *u8); po = ad_bs(p, po, label); p[po]=0 as u8
33 let r: *u8 = sys_mmap(1024); var o: i64 = 0
34 o=ad_bs(r,o,"label=" as *u8); o=ad_bs(r,o,label); r[o]=10 as u8; o=o+1
35 o=ad_bs(r,o,"epoch=100\n" as *u8)
36 o=ad_bs(r,o,"port=" as *u8); o=ad_bn(r,o,port); r[o]=10 as u8; o=o+1
37 o=ad_bs(r,o,"conc=" as *u8); o=ad_bn(r,o,conc); r[o]=10 as u8; o=o+1
38 o=ad_bs(r,o,"oks=" as *u8); o=ad_bn(r,o,oks); r[o]=10 as u8; o=o+1
39 o=ad_bs(r,o,"ttfb_p50=" as *u8); o=ad_bn(r,o,p50); r[o]=10 as u8; o=o+1
40 o=ad_bs(r,o,"ttfb_max=" as *u8); o=ad_bn(r,o,mx); r[o]=10 as u8; o=o+1
41 o=ad_bs(r,o,"stalls=0\n" as *u8)
42 o=ad_bs(r,o,"timeouts=" as *u8); o=ad_bn(r,o,to); r[o]=10 as u8; o=o+1
43 o=ad_bs(r,o,"downs=0\n" as *u8)
44 o=ad_bs(r,o,"slowclose=" as *u8); o=ad_bn(r,o,slow); r[o]=10 as u8; o=o+1
45 let fd: i64 = sys_openat_wr(p, 0x1a4); if fd>=0 { sys_write(fd, r, o); sys_close(fd) }
46 return 0
47}
48
49func main(argc: i64, argv: *i64) -> i64 {
50 var pass: i64 = 0; var total: i64 = 0
51
52 sys_mkdir(GD_STORE, 0x1ff)
53 gd_rec("dmn-green" as *u8, 8001, 8, 8, 1, 2, 0, 0) // healthy
54 gd_rec("dmn-red" as *u8, 8002, 8, 7, 1, 5000, 1, 0) // RED: a timeout
55 gd_rec("dmn-arti" as *u8, 8003, 4, 4, 0, 1, 0, 4) // artifact: fast ttfb + slowclose
56 let ib: *u8 = sys_mmap(128); var io: i64 = ad_bs(ib, 0, "dmn-green\ndmn-red\ndmn-arti\n" as *u8)
57 let ifd: i64 = sys_openat_wr("/tmp/ad_store/apm-ids" as *u8, 0x1a4); if ifd >= 0 { sys_write(ifd, ib, io); sys_close(ifd) }
58
59 let pid: i64 = sys_fork()
60 if pid == 0 {
61 let av: *i64 = sys_mmap(8*4) as *i64
62 av[0] = GD_ELF as i64; av[1] = GD_STORE as i64; av[2] = GD_HTML as i64; av[3] = 0
63 let ev: *i64 = sys_mmap(8) as *i64; ev[0] = 0
64 sys_execve(GD_ELF, av, ev); sys_exit(127)
65 }
66 let rp: *i64 = sys_mmap(16) as *i64; sys_wait4(pid, rp, 0)
67
68 let hb: *u8 = sys_mmap(1048576); let hn: i64 = ad_read_small(GD_HTML, hb, 1048576)
69 if hn <= 0 { gd_uw("[FAIL] dashboard produced no HTML (build /tmp/nx_apm_dashboard.sov.elf first)\n" as *u8); gd_uw("=== nx_apm_dashboard_gate 0/5 RED\n" as *u8); return 1 }
70
71 total = total + 1
72 var t1: i64 = 0
73 if gd_contains(hb, hn, "dmn-green" as *u8) == 1 { if gd_contains(hb, hn, "dmn-red" as *u8) == 1 { if gd_contains(hb, hn, "dmn-arti" as *u8) == 1 { t1 = 1 } } }
74 if t1 == 1 { pass = pass + 1; gd_uw("[PASS] " as *u8) } else { gd_uw("[FAIL] " as *u8) }
75 gd_uw("T1 all 3 daemons rendered as cards\n" as *u8)
76
77 total = total + 1
78 let t2: i64 = gd_contains(hb, hn, "<b>dmn-red</b>" as *u8)
79 if t2 == 1 { pass = pass + 1; gd_uw("[PASS] " as *u8) } else { gd_uw("[FAIL] " as *u8) }
80 gd_uw("T2 RED daemon listed in Incidents\n" as *u8)
81
82 total = total + 1
83 let t3: i64 = gd_contains(hb, hn, "<b>dmn-green</b>" as *u8)
84 if t3 == 0 { pass = pass + 1; gd_uw("[PASS] " as *u8) } else { gd_uw("[FAIL] " as *u8) }
85 gd_uw("T3 GREEN daemon NOT in Incidents (neg-control)\n" as *u8)
86
87 total = total + 1
88 let t4: i64 = gd_contains(hb, hn, "<b>dmn-arti</b>" as *u8)
89 if t4 == 0 { pass = pass + 1; gd_uw("[PASS] " as *u8) } else { gd_uw("[FAIL] " as *u8) }
90 gd_uw("T4 ARTIFACT daemon NOT in Incidents (slowclose != wedge = liar-kill)\n" as *u8)
91
92 total = total + 1
93 let t5: i64 = gd_contains(hb, hn, "slowclose 4" as *u8)
94 if t5 == 1 { pass = pass + 1; gd_uw("[PASS] " as *u8) } else { gd_uw("[FAIL] " as *u8) }
95 gd_uw("T5 ARTIFACT slowclose badge rendered\n" as *u8)
96
97 gd_uw("=== nx_apm_dashboard_gate " as *u8); gd_wn(pass); gd_uw("/" as *u8); gd_wn(total)
98 if pass == total { gd_uw(" GREEN\n" as *u8); return 0 }
99 gd_uw(" RED\n" as *u8); return 1
100}