code wiki / _hdl_build / nx_consul_health_test.nx
nx_consul_health_test.nx source
↩ module page · 66 lines · 4602 B
1// nx_consul_health_test.nx -- CHEALTHGATE: proves the flap-protected, probe-driven health checks and that
2// they close the loop into discovery. fail_thr=3, pass_thr=2. GREEN iff: 1 failure keeps PASSING (flap
3// protection); 3 consecutive failures -> CRITICAL; 1 success after CRITICAL is NOT enough; 2 successes ->
4// PASSING (recovery); a success resets the failure counter; and at the registry level a node driven CRITICAL
5// is dropped from discovery while a 1-fail (flap-protected) node stays. exit 0 on 7/7.
6import "nx_consul_health.nx"
7import "nx_syscalls.nx"
8
9func hg_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
10func hg_num(v: i64) -> i64 { let b: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=48+(m%10); m=m/10; k=k+1}; var i: i64=0; while i<k {b[i]=t[k-1-i]; i=i+1}; sys_write(1,b,k); return 0 }
11
12func main() -> i64 {
13 hg_puts("=== SOVEREIGN CONSUL LIVE HEALTH CHECKS (flap-protected, probe-driven) ===\n" as *u8)
14 let fail_thr: i64 = 3
15 let pass_thr: i64 = 2
16
17 // single-instance transition trace
18 let sh: *i64 = sys_mmap(8) as *i64; sh[0] = SVC_PASSING
19 let scf: *i64 = sys_mmap(8) as *i64; scf[0] = 0
20 let scp: *i64 = sys_mmap(8) as *i64; scp[0] = 0
21 let h1: i64 = hc_tick(sh, scf, scp, 0, 0, fail_thr, pass_thr) // fail #1 -> still PASSING
22 hc_tick(sh, scf, scp, 0, 0, fail_thr, pass_thr) // fail #2 -> still PASSING
23 let h3: i64 = hc_tick(sh, scf, scp, 0, 0, fail_thr, pass_thr) // fail #3 -> CRITICAL
24 let h4: i64 = hc_tick(sh, scf, scp, 0, 1, fail_thr, pass_thr) // pass #1 -> still CRITICAL
25 let h5: i64 = hc_tick(sh, scf, scp, 0, 1, fail_thr, pass_thr) // pass #2 -> PASSING (recovery)
26 let cf_after_recover: i64 = scf[0] // should be 0 (reset by successes)
27
28 // registry integration: 2 web instances, both PASSING
29 let reg: *i64 = sys_mmap(16) as *i64; reg[0]=1; reg[1]=1
30 let names: *i64 = sys_mmap(16) as *i64; names[0]=100; names[1]=100
31 let rh: *i64 = sys_mmap(16) as *i64; rh[0]=SVC_PASSING; rh[1]=SVC_PASSING
32 let rcf: *i64 = sys_mmap(16) as *i64; rcf[0]=0; rcf[1]=0
33 let rcp: *i64 = sys_mmap(16) as *i64; rcp[0]=0; rcp[1]=0
34 let out: *i64 = sys_mmap(64) as *i64
35
36 // flap: idx0 gets ONE failure -> stays PASSING -> discovery still returns BOTH
37 hc_tick(rh, rcf, rcp, 0, 0, fail_thr, pass_thr)
38 let disc_flap: i64 = cs_discover(reg, names, rh, 2, 100, out) // expect 2
39 // down: idx1 gets 3 failures -> CRITICAL -> discovery returns only idx0
40 hc_tick(rh, rcf, rcp, 1, 0, fail_thr, pass_thr)
41 hc_tick(rh, rcf, rcp, 1, 0, fail_thr, pass_thr)
42 hc_tick(rh, rcf, rcp, 1, 0, fail_thr, pass_thr)
43 let disc_down: i64 = cs_discover(reg, names, rh, 2, 100, out) // expect 1
44
45 hg_puts(" 1fail=" as *u8); hg_num(h1); hg_puts(" 3fail=" as *u8); hg_num(h3); hg_puts(" +1pass=" as *u8); hg_num(h4)
46 hg_puts(" +2pass=" as *u8); hg_num(h5); hg_puts(" cfreset=" as *u8); hg_num(cf_after_recover)
47 hg_puts(" | discover flap=" as *u8); hg_num(disc_flap); hg_puts(" down=" as *u8); hg_num(disc_down); hg_puts("\n" as *u8)
48
49 let r: *i64 = sys_mmap(8*8) as *i64
50 r[0] = 0; if h1 == SVC_PASSING { r[0] = 1 } // 1 failure flap-protected
51 r[1] = 0; if h3 == SVC_CRITICAL { r[1] = 1 } // 3 consecutive failures -> CRITICAL
52 r[2] = 0; if h4 == SVC_CRITICAL { r[2] = 1 } // 1 success not enough to recover
53 r[3] = 0; if h5 == SVC_PASSING { r[3] = 1 } // 2 successes -> recover
54 r[4] = 0; if cf_after_recover == 0 { r[4] = 1 } // success resets the failure counter
55 r[5] = 0; if disc_flap == 2 { r[5] = 1 } // flap-protected node stays in discovery
56 r[6] = 0; if disc_down == 1 { r[6] = 1 } // CRITICAL node dropped from discovery (loop closed)
57
58 var pass: i64 = 0; var i: i64 = 0
59 while i < 7 { pass = pass + r[i]; i = i + 1 }
60 hg_puts("----\n passed " as *u8); hg_num(pass); hg_puts("/7\n" as *u8)
61 if pass == 7 {
62 hg_puts("CHEALTHGATE flap_protection=1 fail_thr->critical=1 recovery_pass_thr=1 counter_reset=1 loop_closed_into_discovery=1 exceed[sovereign live health checks driven by nx_reach_probe TCP reachability; flap-protected; health feeds discovery+service-DNS = real reachability reflected; bits-up] verdict=GREEN\n" as *u8)
63 sys_exit(0); return 0
64 }
65 hg_puts("CHEALTHGATE verdict=RED\n" as *u8); sys_exit(1); return 1
66}