60 lines
3.1 KiB
JavaScript
60 lines
3.1 KiB
JavaScript
|
|
const puppeteer = require('puppeteer-core');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const DIR = '/var/www/html/api/l99-screenshots';
|
|
const TESTS = [
|
|
{n:'CRM',u:'https://crm.weval-consulting.com'},
|
|
{n:'MiroFish',u:'https://mirofish.weval-consulting.com'},
|
|
{n:'Paperclip',u:'https://paperclip.weval-consulting.com/WEVAL/dashboard'},
|
|
{n:'Langfuse',u:'https://langfuse.weval-consulting.com'},
|
|
{n:'DeerFlow',u:'https://deerflow.weval-consulting.com'},
|
|
{n:'Plausible',u:'https://analytics.weval-consulting.com'},
|
|
{n:'Mattermost',u:'https://mm.weval-consulting.com'},
|
|
{n:'Kuma',u:'https://monitor.weval-consulting.com'},
|
|
{n:'n8n',u:'https://n8n.weval-consulting.com'},
|
|
{n:'WEVADS',u:'https://weval-consulting.com/wevads-ia/'},
|
|
{n:'Admin',u:'https://weval-consulting.com/admin-saas.html'},
|
|
{n:'Archi3D',u:'https://weval-consulting.com/agents-archi.html'},
|
|
{n:'Enterprise',u:'https://weval-consulting.com/enterprise-model.html'},
|
|
{n:'Fleet',u:'https://weval-consulting.com/agents-fleet.html'},
|
|
{n:'L99Brain',u:'https://weval-consulting.com/l99-brain.html'},
|
|
{n:'Director',u:'https://weval-consulting.com/director-center.html'},
|
|
{n:'Meetings',u:'https://weval-consulting.com/wevia-meeting-rooms.html'},
|
|
{n:'Architecture',u:'https://weval-consulting.com/architecture.html'},
|
|
{n:'OpenClaw',u:'https://weval-consulting.com/openclaw.html'},
|
|
{n:'Console',u:'https://weval-consulting.com/wevia-console.html'},
|
|
{n:'DirChat',u:'https://weval-consulting.com/director-chat.html'},
|
|
{n:'ValueStream',u:'https://weval-consulting.com/value-streaming.html'},
|
|
{n:'PaperclipPg',u:'https://weval-consulting.com/paperclip.html'},
|
|
];
|
|
|
|
(async()=>{
|
|
if(!fs.existsSync(DIR)) fs.mkdirSync(DIR,{recursive:true});
|
|
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 results=[];let pass=0;
|
|
for(const t of TESTS){
|
|
const p=await b.newPage();
|
|
await p.setViewport({width:1920,height:1080});
|
|
const r={name:t.n,url:t.u,status:'FAIL',code:0,size:0,loadMs:0};
|
|
const s=Date.now();
|
|
try{
|
|
const resp=await p.goto(t.u,{waitUntil:'domcontentloaded',timeout:15000});
|
|
r.code=resp.status();r.loadMs=Date.now()-s;
|
|
await p.screenshot({path:path.join(DIR,t.n+'.png')});
|
|
r.screenshot='/api/l99-screenshots/'+t.n+'.png';
|
|
const html=await p.content();r.size=html.length;
|
|
r.title=await p.title();
|
|
r.status=(r.code>=200&&r.code<400&&r.size>500)?'PASS':'WARN';
|
|
if(r.status==='PASS')pass++;
|
|
}catch(e){r.error=e.message?.substring(0,80);r.loadMs=Date.now()-s;}
|
|
results.push(r);await p.close();
|
|
console.log((r.status==='PASS'?'V':'X')+' '+t.n+': '+r.code+' '+r.loadMs+'ms '+r.size+'b');
|
|
}
|
|
await b.close();
|
|
const sum={ts:new Date().toISOString(),total:results.length,pass,fail:results.length-pass,pct:Math.round(100*pass/results.length),results};
|
|
fs.writeFileSync('/var/www/html/api/l99-visual-results.json',JSON.stringify(sum,null,2));
|
|
console.log('\n=== L99 VISUAL: '+pass+'/'+results.length+' = '+sum.pct+'% ===');
|
|
})();
|