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}