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}