code wiki / _hdl_build / _elder_census_authored.nx

_elder_census_authored.nx source

↩ module page · 109 lines · 7054 B

1// AUTHORED BY THE NISHI BUILDER (nx_module_author_data census template) -- ELDERMIG E0. 2// Mechanized Elder census: compose service keys (2-space YAML keys under services:) + 3// data-vault *.db count via getdents64. Gate expectations arrive as argv from the caller. 4import "nx_syscalls.nx" 5func _ec_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 6func _ec_wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; 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{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 7func _ec_atoi(s: *u8) -> i64 { var v: i64=0; var i: i64=0; while s[i]!=(0 as u8) { let c: i64=s[i]; if c<48 { return v } if c>57 { return v } v=v*10+(c-48); i=i+1 } return v } 8func _ec_pref(buf: *u8, p: i64, pat: *u8) -> i64 { var i: i64=0; while pat[i]!=(0 as u8) { if buf[p+i]!=pat[i] { return 0 } i=i+1 } return 1 } 9func _ec_eol(buf: *u8, p: i64, L: i64) -> i64 { var e: i64=p; while e<L { if buf[e]==(10 as u8) { return e } e=e+1 } return L } 10func _ec_nch(c: i64) -> i64 { if c>=97 { if c<=122 { return 1 } } if c>=65 { if c<=90 { return 1 } } if c>=48 { if c<=57 { return 1 } } if c==95 { return 1 } if c==45 { return 1 } return 0 } 11func main(argc: i64, argv: *i64) -> i64 { 12 _ec_w(1, "=== BUILDER-AUTHORED ELDER CENSUS (ELDERMIG E0): services + data-vault DBs ===\n" as *u8) 13 let lenp: *i64 = sys_mmap(8) as *i64 14 let buf: *u8 = sys_read_file("/mnt/c/Users/elder/elder-ai-platform/docker-compose.yml" as *u8, lenp) 15 let L: i64 = lenp[0] 16 if L < 100 { _ec_w(1, "CENSUS-GATE FAIL compose-unreadable\n" as *u8); sys_exit(1); return 1 } 17 let logfd: i64 = sys_openat_append("knowledge/status/elder_census.log" as *u8, 0x1a4) 18 var nsvc: i64=0; var ngen: i64=0; var ndata: i64=0; var norch: i64=0; var nsv: i64=0 19 var nworker: i64=0; var nmon: i64=0; var nutil: i64=0; var nother: i64=0 20 var insvc: i64=0 21 var p: i64=0 22 while p < L { 23 let e: i64 = _ec_eol(buf, p, L) 24 var ll: i64 = e - p 25 if ll>0 { let lc: i64 = buf[p+ll-1]; if lc==13 { ll=ll-1 } } 26 if ll>0 { let c0: i64 = buf[p] 27 if c0!=32 { if c0!=35 { 28 insvc=0 29 if ll==9 { if _ec_pref(buf, p, "services:" as *u8)==1 { insvc=1 } } 30 } } 31 if insvc==1 { if ll>3 { if c0==32 { let c1: i64 = buf[p+1]; if c1==32 { let c2: i64 = buf[p+2] 32 if _ec_nch(c2)==1 { 33 var q: i64 = p+2 34 var scanning: i64 = 1 35 while scanning==1 { let cc: i64 = buf[q]; let nv: i64 = _ec_nch(cc); if nv==1 { q=q+1 } if nv==0 { scanning=0 } } 36 let namelen: i64 = q - (p+2) 37 if namelen>0 { let ci: i64 = buf[q]; if ci==58 { 38 var ok: i64 = 1 39 var j: i64 = q+1 40 while j < p+ll { let cj: i64 = buf[j]; if cj!=32 { ok=0 } j=j+1 } 41 if ok==1 { 42 nsvc=nsvc+1 43 var cls: *u8 = "other" as *u8 44 var done: i64 = 0 45 if done==0 { if _ec_pref(buf,p+2,"gen-" as *u8)==1 { cls="gen" as *u8; ngen=ngen+1; done=1 } } 46 if done==0 { if _ec_pref(buf,p+2,"data-" as *u8)==1 { cls="data" as *u8; ndata=ndata+1; done=1 } } 47 if done==0 { if _ec_pref(buf,p+2,"orch-" as *u8)==1 { cls="orch" as *u8; norch=norch+1; done=1 } } 48 if done==0 { if _ec_pref(buf,p+2,"svc-" as *u8)==1 { cls="svc" as *u8; nsv=nsv+1; done=1 } } 49 if done==0 { if _ec_pref(buf,p+2,"worker-" as *u8)==1 { cls="worker" as *u8; nworker=nworker+1; done=1 } } 50 if done==0 { if _ec_pref(buf,p+2,"mon-" as *u8)==1 { cls="mon" as *u8; nmon=nmon+1; done=1 } } 51 if done==0 { if _ec_pref(buf,p+2,"util-" as *u8)==1 { cls="util" as *u8; nutil=nutil+1; done=1 } } 52 if done==0 { nother=nother+1 } 53 _ec_w(logfd, "CENSUS-SVC name=" as *u8) 54 let bb: i64 = buf as i64 55 sys_write(logfd, (bb+p+2) as *u8, namelen) 56 _ec_w(logfd, " class=" as *u8); _ec_w(logfd, cls); _ec_w(logfd, "\n" as *u8) 57 } 58 } } 59 } 60 } } } } 61 } 62 p = e + 1 63 } 64 let dfd: i64 = sys_openat_rd("/mnt/c/Users/elder/elder-ai-platform/data-vault" as *u8) 65 var ndb: i64 = 0 66 if dfd >= 0 { 67 let dbuf: *u8 = sys_mmap(262144) 68 var going: i64 = 1 69 while going==1 { 70 let n: i64 = sys_getdents64(dfd, dbuf, 262144) 71 if n<=0 { going=0 } 72 if n>0 { 73 var off: i64 = 0 74 while off<n { 75 let basep: i64 = dbuf as i64 76 let rec: *u8 = (basep+off) as *u8 77 let nm: *u8 = dirent_name(rec) 78 var lnm: i64=0 79 while nm[lnm]!=(0 as u8) { lnm=lnm+1 } 80 if lnm>3 { let da: i64=nm[lnm-3]; let db2: i64=nm[lnm-2]; let dc: i64=nm[lnm-1] 81 if da==46 { if db2==100 { if dc==98 { ndb=ndb+1 } } } } 82 off = off + dirent_reclen(rec) 83 } 84 } 85 } 86 sys_close(dfd) 87 } 88 _ec_w(logfd, "CENSUS-SUM services=" as *u8); _ec_wn(logfd, nsvc) 89 _ec_w(logfd, " gen=" as *u8); _ec_wn(logfd, ngen); _ec_w(logfd, " data=" as *u8); _ec_wn(logfd, ndata) 90 _ec_w(logfd, " orch=" as *u8); _ec_wn(logfd, norch); _ec_w(logfd, " svc=" as *u8); _ec_wn(logfd, nsv) 91 _ec_w(logfd, " worker=" as *u8); _ec_wn(logfd, nworker); _ec_w(logfd, " mon=" as *u8); _ec_wn(logfd, nmon) 92 _ec_w(logfd, " util=" as *u8); _ec_wn(logfd, nutil); _ec_w(logfd, " other=" as *u8); _ec_wn(logfd, nother) 93 _ec_w(logfd, " dbs=" as *u8); _ec_wn(logfd, ndb); _ec_w(logfd, "\n" as *u8) 94 sys_close(logfd) 95 _ec_w(1, "CENSUS-SUM services=" as *u8); _ec_wn(1, nsvc) 96 _ec_w(1, " gen=" as *u8); _ec_wn(1, ngen); _ec_w(1, " data=" as *u8); _ec_wn(1, ndata) 97 _ec_w(1, " orch=" as *u8); _ec_wn(1, norch); _ec_w(1, " svc=" as *u8); _ec_wn(1, nsv) 98 _ec_w(1, " worker=" as *u8); _ec_wn(1, nworker); _ec_w(1, " mon=" as *u8); _ec_wn(1, nmon) 99 _ec_w(1, " util=" as *u8); _ec_wn(1, nutil); _ec_w(1, " other=" as *u8); _ec_wn(1, nother) 100 _ec_w(1, " dbs=" as *u8); _ec_wn(1, ndb); _ec_w(1, "\n" as *u8) 101 if argc>=3 { 102 let esvc: i64 = _ec_atoi(argv[1] as *u8) 103 let edb: i64 = _ec_atoi(argv[2] as *u8) 104 if nsvc==esvc { if ndb==edb { _ec_w(1, "CENSUS-GATE PASS\n" as *u8); sys_exit(0); return 0 } } 105 _ec_w(1, "CENSUS-GATE FAIL measured-vs-expected mismatch\n" as *u8); sys_exit(1); return 1 106 } 107 _ec_w(1, "CENSUS REPORT-ONLY (argv: expected-services expected-dbs to gate)\n" as *u8) 108 sys_exit(0); return 0 109}