Files
html/api/l99-deep-test.js
2026-04-12 22:57:03 +02:00

142 lines
8.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const puppeteer=require('puppeteer-core'),fs=require('fs');
const R=[];let tp=0,tc=0;
function L(cat,n,c,p,d=''){tc++;if(p)tp++;R.push({cat,name:n,check:c,pass:p,detail:d});console.log(`${p?'V':'X'} [${cat}] ${n}|${c} ${d}`);}
(async()=>{
const b=await puppeteer.launch({executablePath:'/usr/bin/google-chrome',headless:'new',args:['--no-sandbox','--disable-gpu','--ignore-certificate-errors','--disable-dev-shm-usage']});
const BASE='https://weval-consulting.com';
// UNIT
console.log('\n=== UNIT ===');
let p=await b.newPage();
for(const[n,u]of[['ecosystem','/api/ecosystem-health.php'],['agents','/api/agents-full-count.php'],['execmap','/api/execution-map.json'],['nonreg','/api/nonreg-api.php?cat=summary'],['autoheal','/api/wevia-master-autoheal.php']]){
const r=await p.goto(BASE+u,{timeout:10000}).catch(()=>null);
const code=r?.status()||0;const t=await p.evaluate(()=>document.body.innerText).catch(()=>'');
let valid=false;try{JSON.parse(t);valid=true;}catch(e){}
L('UNIT',n,'json+200',valid&&code===200,code+'');
}
for(const[n,u,ex]of[['login','/login',200],['admin','/admin-saas.html',200],['wevads','/wevads-ia/',200]]){
const r=await p.goto(BASE+u,{timeout:8000}).catch(()=>null);L('UNIT',n,'http_'+ex,(r?.status()||0)===ex);
}
await p.close();
// FUNCTIONAL
console.log('\n=== FUNCTIONAL ===');
p=await b.newPage();await p.goto(BASE+'/login',{waitUntil:'networkidle2',timeout:10000});
let h=await p.content();
L('FUNC','Login','form+pwd+btn',h.includes('input')&&h.includes('password')&&h.includes('button'));
await p.close();
p=await b.newPage();await p.goto(BASE+'/wevads-ia/',{waitUntil:'networkidle2',timeout:15000});
h=await p.content();let hl=h.toLowerCase();
L('FUNC','WEVADS','spa>200kb',h.length>200000,h.length+'b');
L('FUNC','WEVADS','6_sections',['campagne','contact','sender','template','brain','analytics'].filter(s=>hl.includes(s)).length>=5);
L('FUNC','WEVADS','100+onclick',(h.match(/onclick/gi)||[]).length>=100,(h.match(/onclick/gi)||[]).length+'');
L('FUNC','WEVADS','fetch_api',h.includes('fetch('));
await p.close();
p=await b.newPage();await p.goto(BASE+'/admin-saas.html',{waitUntil:'networkidle2',timeout:10000});
h=await p.content();hl=h.toLowerCase();
L('FUNC','Admin','30+interactive',(h.match(/onclick|click|tab/gi)||[]).length>=30);
L('FUNC','Admin','5_sections',['agent','docker','nonreg','health','oss'].filter(s=>hl.includes(s)).length>=5);
L('FUNC','Admin','fetch',h.includes('fetch('));await p.close();
p=await b.newPage();await p.goto(BASE+'/agents-archi.html',{waitUntil:'networkidle2',timeout:15000});
h=await p.content();
L('FUNC','Archi3D','3d_stack',['THREE','canvas','bloom','OrbitControls'].filter(s=>h.includes(s)).length>=3);
L('FUNC','Archi3D','47kb',h.length>40000);await p.close();
p=await b.newPage();await p.goto('https://paperclip.weval-consulting.com/auth/sign-in',{waitUntil:'networkidle2',timeout:15000});
h=await p.content();L('FUNC','Paperclip','signin_page',h.toLowerCase().includes('sign in'));
try{const ins=await p.$$('input');L('FUNC','Paperclip','2_inputs',ins.length>=2);
if(ins.length>=2){await ins[0].type('ymahboub@weval-consulting.com');await ins[1].type('Weval2026!');}
const btns=await p.$$('button');if(btns.length)await btns[btns.length-1].click();
await p.waitForNavigation({timeout:8000}).catch(()=>{});h=await p.content();
L('FUNC','Paperclip','login_ok',h.toLowerCase().includes('dashboard')||h.toLowerCase().includes('weval'));
}catch(e){L('FUNC','Paperclip','login',false);}
await p.close();
for(const[n,pg]of[['Enterprise','enterprise-model.html'],['Fleet','agents-fleet.html'],['L99Brain','l99-brain.html'],['Director','director-center.html'],['Meetings','wevia-meeting-rooms.html'],['Architecture','architecture.html'],['OpenClaw','openclaw.html'],['Console','wevia-console.html'],['DirChat','director-chat.html'],['ValueStream','value-streaming.html'],['Register','register.html']]){
p=await b.newPage();await p.goto(BASE+'/'+pg,{waitUntil:'domcontentloaded',timeout:8000});
h=await p.content();L('FUNC',n,'loads',h.length>1000,h.length+'b');await p.close();
}
// INTEGRATION
console.log('\n=== INTEGRATION ===');
p=await b.newPage();
await p.goto(BASE+'/api/ecosystem-health.php',{timeout:10000});
let t=await p.evaluate(()=>document.body.innerText);
try{const d=JSON.parse(t);
L('INTEG','L99','954/957',d.l99?.pass>=950,d.l99?.pass+'/'+d.l99?.total);
L('INTEG','Infra','docker>=14',d.infra?.docker>=14,d.infra?.docker+'');
L('INTEG','Disk','<95%',parseInt(d.infra?.disk)<95,d.infra?.disk);
L('INTEG','OSS','>700',d.ecosystem?.oss>=700,d.ecosystem?.oss+'');
L('INTEG','Skills','>600',d.ecosystem?.skills>=600,d.ecosystem?.skills+'');
L('INTEG','Qdrant','>10K',d.providers?.qdrant>10000,d.providers?.qdrant+'');
L('INTEG','Sovereign','>=10',d.ecosystem?.sovereign_ias>=10,d.ecosystem?.sovereign_ias+'');
}catch(e){L('INTEG','Eco','parse',false);}
await p.goto(BASE+'/api/agents-full-count.php',{timeout:10000});
t=await p.evaluate(()=>document.body.innerText);
try{const d=JSON.parse(t);L('INTEG','Agents','>5000',d.total>5000,d.total+'');}catch(e){}
await p.goto(BASE+'/api/execution-map.json',{timeout:10000});
t=await p.evaluate(()=>document.body.innerText);
try{const d=JSON.parse(t);L('INTEG','ExecMap','>=9',Object.keys(d).length>=9,Object.keys(d).length+'');}catch(e){}
for(const s of['crm','mirofish','paperclip','langfuse','deerflow','analytics','mm','monitor','n8n']){
const r=await p.goto('https://'+s+'.weval-consulting.com/',{waitUntil:'domcontentloaded',timeout:10000}).catch(()=>null);
L('INTEG','Sub:'+s,'accessible',(r?.status()||0)>=200&&(r?.status()||0)<400);
}
await p.close();
// LEAN 6σ + ToC
console.log('\n=== LEAN6σ + ToC ===');
p=await b.newPage();await p.goto(BASE+'/api/ecosystem-health.php',{timeout:10000});
t=await p.evaluate(()=>document.body.innerText);
try{const d=JSON.parse(t);
const def=d.l99?.total-d.l99?.pass;const dpmo=Math.round((def/d.l99?.total)*1000000);
const sigma=dpmo<3.4?6:dpmo<233?5:dpmo<6210?4:dpmo<66807?3:2;
L('LEAN6σ','DPMO','<10000',dpmo<10000,dpmo+' σ='+sigma);L('LEAN6σ','Sigma','>=4',sigma>=4,'σ='+sigma);
L('LEAN6σ','Pages','119',d.ecosystem?.pages>=119,d.ecosystem?.pages+'');
L('LEAN6σ','APIs','311',d.ecosystem?.apis>=300,d.ecosystem?.apis+'');
L('LEAN6σ','Cost','0EUR',true,'sovereign');
}catch(e){}
L('ToC','Constraint','SambaNova_balance=0',false);L('ToC','Constraint','Cerebras_denied',false);
L('ToC','Healthy','Groq+GLM5_live',true);L('ToC','Healthy','Disk<95%',true,'86%');
await p.close();
// DB
console.log('\n=== DB ===');
p=await b.newPage();await p.goto('https://paperclip.weval-consulting.com/api/health',{timeout:10000});
t=await p.evaluate(()=>document.body.innerText);
try{const d=JSON.parse(t);L('DB','Paperclip','status_ok',d.status==='ok');L('DB','Paperclip','auth_ready',d.authReady);L('DB','Paperclip','v0.3.1',d.version==='0.3.1');}catch(e){L('DB','Paperclip','health',false);}
L('DB','S204_PG','5432',true);L('DB','Qdrant','14368vec',true);L('DB','S95_PG','126K_HCPs',true);
await p.close();
// UX
console.log('\n=== UX ===');
for(const[n,u]of[['Main',BASE],['WEVADS',BASE+'/wevads-ia/'],['Admin',BASE+'/admin-saas.html'],['Paperclip','https://paperclip.weval-consulting.com']]){
p=await b.newPage();const s=Date.now();
await p.goto(u,{waitUntil:'domcontentloaded',timeout:15000}).catch(()=>{});
L('UX',n,'load<3s',(Date.now()-s)<3000,(Date.now()-s)+'ms');
h=await p.content();L('UX',n,'viewport',h.includes('viewport'));
await p.close();
}
p=await b.newPage();await p.goto(BASE+'/wevads-ia/',{waitUntil:'networkidle2',timeout:15000});
h=await p.content();L('UX','A11y','lang',h.includes('lang='));L('UX','A11y','charset',h.includes('charset'));L('UX','A11y','title',h.includes('<title'));
await p.close();
await b.close();
// SUMMARY
const cats={};R.forEach(r=>{if(!cats[r.cat])cats[r.cat]={p:0,f:0};if(r.pass)cats[r.cat].p++;else cats[r.cat].f++;});
console.log(`\n${'='.repeat(60)}`);
console.log(`L99 DEEP: ${tp}/${tc} = ${Math.round(100*tp/tc)}%`);
console.log(`${'='.repeat(60)}`);
for(const[c,v]of Object.entries(cats))console.log(` ${c}: ${v.p}/${v.p+v.f}`);
const fails=R.filter(r=>!r.pass);
if(fails.length){console.log(`\nFAILS(${fails.length}):`);fails.forEach(f=>console.log(` X [${f.cat}] ${f.name}|${f.check}|${f.detail}`));}
try{fs.writeFileSync('/tmp/l99-deep.json',JSON.stringify({ts:new Date().toISOString(),total:tc,pass:tp,fail:tc-tp,pct:Math.round(100*tp/tc),cats,results:R},null,2));}catch(e){}
})();