auto-sync-opus46
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-20T15:30:03+02:00",
|
||||
"ts": "2026-04-20T15:45:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-20T15:40:02.201488",
|
||||
"generated_at": "2026-04-20T15:45:01.695599",
|
||||
"stats": {
|
||||
"total": 33,
|
||||
"pending": 20,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-20T15:30:02.299864",
|
||||
"last_heartbeat": "2026-04-20T15:30:02.299864",
|
||||
"last_heartbeat_ts_epoch": 1776691802,
|
||||
"ts": "2026-04-20T15:45:01.656964",
|
||||
"last_heartbeat": "2026-04-20T15:45:01.656964",
|
||||
"last_heartbeat_ts_epoch": 1776692701,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
BIN
api/blade-tasks/v94-screenshots/agents-archi.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
api/blade-tasks/v94-screenshots/business-kpi-dashboard.png
Normal file
|
After Width: | Height: | Size: 673 KiB |
BIN
api/blade-tasks/v94-screenshots/enterprise-model.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
api/blade-tasks/v94-screenshots/value-streaming.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
api/blade-tasks/v94-screenshots/weval-technology-platform.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
api/blade-tasks/v94-screenshots/wevia-admin-crm.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
api/blade-tasks/v94-screenshots/wevia-em-big4.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
api/blade-tasks/v94-screenshots/wevia-em-live-kpi.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
api/blade-tasks/v94-screenshots/wevia-master.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
api/blade-tasks/v94-screenshots/wevia-v64-15-departements.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
@@ -0,0 +1,281 @@
|
||||
{
|
||||
"ts": "2026-04-20T13:45:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 0.79,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 12433,
|
||||
"ram_free_mb": 18902,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "112G",
|
||||
"disk_free": "33G",
|
||||
"disk_pct": "78%",
|
||||
"fpm_workers": 121,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.82,
|
||||
"disk_pct": "82%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11802
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
"name": "SER6",
|
||||
"ip": "110.239.84.121",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER7",
|
||||
"ip": "110.239.65.64",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER8",
|
||||
"ip": "182.160.55.107",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER9",
|
||||
"ip": "110.239.86.68",
|
||||
"status": "DOWN"
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 288,
|
||||
"php_apis": 751,
|
||||
"wiki_entries": 1798,
|
||||
"vault_doctrines": 59,
|
||||
"vault_sessions": 90,
|
||||
"vault_decisions": 12
|
||||
},
|
||||
"tools": {
|
||||
"total": 626,
|
||||
"registry_version": "?"
|
||||
},
|
||||
"sovereign": {
|
||||
"status": "UP",
|
||||
"providers": [
|
||||
"Cerebras-fast",
|
||||
"Cerebras-think",
|
||||
"Groq",
|
||||
"Cloudflare-AI",
|
||||
"Gemini",
|
||||
"SambaNova",
|
||||
"NVIDIA-NIM",
|
||||
"Mistral",
|
||||
"Groq-OSS",
|
||||
"HF-Space",
|
||||
"HF-Router",
|
||||
"OpenRouter",
|
||||
"GitHub-Models"
|
||||
],
|
||||
"active": 13,
|
||||
"total": 13,
|
||||
"primary": "Cerebras-fast",
|
||||
"cost": "0€"
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161730,
|
||||
"with_email": 110444,
|
||||
"with_phone": 155145,
|
||||
"gap_email": 51286,
|
||||
"pct_email": 68.3,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78360,
|
||||
"with_tel": 119394,
|
||||
"pct_email": 64.1,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19720,
|
||||
"with_email": 15067,
|
||||
"with_tel": 18733,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15138,
|
||||
"with_tel": 17018,
|
||||
"pct_email": 85.1,
|
||||
"pct_tel": 95.6
|
||||
},
|
||||
{
|
||||
"country": "INTL",
|
||||
"hcps": 1879,
|
||||
"with_email": 1879,
|
||||
"with_tel": 0,
|
||||
"pct_email": 100,
|
||||
"pct_tel": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"docker": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "listmonk",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "n8n-docker-n8n-1",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mm-db-1",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mattermost-1",
|
||||
"status": "Up 4 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty-redis",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 14 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "cd651f6c1 auto-sync-1545",
|
||||
"dirty": 3,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
"total": 153,
|
||||
"passed": 153,
|
||||
"score": "100%"
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"name": "DeerFlow",
|
||||
"port": 3002,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "DeerFlow API",
|
||||
"port": 8001,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Qdrant",
|
||||
"port": 6333,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Ollama",
|
||||
"port": 11434,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Redis",
|
||||
"port": 6379,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Sovereign",
|
||||
"port": 4000,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "SearXNG",
|
||||
"port": 8080,
|
||||
"status": "UP"
|
||||
}
|
||||
],
|
||||
"whisper": {
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3541,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 10918
|
||||
}
|
||||
24
api/opus-test-session-v94.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
// V94 TEST-ONLY endpoint for Opus/Blade E2E video scenario
|
||||
// Creates an auth session for Selenium testing
|
||||
// Restricted to localhost IPs only
|
||||
$allowed = ['127.0.0.1', '::1', 'localhost'];
|
||||
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
|
||||
$k = $_REQUEST['k'] ?? '';
|
||||
if ($k !== 'WEVADS2026' || !in_array($ip, $allowed)) {
|
||||
http_response_code(403);
|
||||
die(json_encode(['error' => 'forbidden', 'ip' => $ip]));
|
||||
}
|
||||
session_set_cookie_params(["lifetime"=>3600,"path"=>"/","domain"=>".weval-consulting.com","secure"=>true,"httponly"=>true,"samesite"=>"Lax"]);
|
||||
session_start();
|
||||
$_SESSION['wu'] = 'opus_e2e_test';
|
||||
$_SESSION['wa'] = 1;
|
||||
$_SESSION['weval_auth'] = true;
|
||||
$_SESSION['weval_user'] = 'opus_e2e_test';
|
||||
$_SESSION['sso'] = true;
|
||||
$_SESSION['email'] = 'opus@test.local';
|
||||
echo json_encode([
|
||||
'ok' => true,
|
||||
'session_id' => session_id(),
|
||||
'note' => 'V94 test session created for E2E video'
|
||||
]);
|
||||
253
api/playwright-v94-e2e-full-scenario.json
Normal file
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"ts": "2026-04-20T13:47:10.835Z",
|
||||
"total_pages": 10,
|
||||
"pages_ok": 5,
|
||||
"pages_auth_gated": 5,
|
||||
"pages_errored": 0,
|
||||
"total_js_errors": 3,
|
||||
"video_files": [
|
||||
"page@04d7eff72342b340ac390b0ea9c4c821.webm",
|
||||
"page@43a02aff7159ccf80ac487c870daf4c7.webm",
|
||||
"page@9492cb7a758bbceb3fdd924f9285b8d7.webm",
|
||||
"page@b51e0605fc430ae9eb023d209ca1cac8.webm"
|
||||
],
|
||||
"video_dir": "/var/www/html/api/blade-tasks/v94-videos/",
|
||||
"screenshots_dir": "/var/www/html/api/blade-tasks/v94-screenshots/",
|
||||
"results": [
|
||||
{
|
||||
"name": "weval-technology-platform",
|
||||
"url": "https://weval-consulting.com/weval-technology-platform.html",
|
||||
"ok": false,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/login.html?from=%2Fweval-technology-platform.html",
|
||||
"title": "WEVAL — Connexion",
|
||||
"is_login": true,
|
||||
"body_len": 252,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 24,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 4705,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"url": "https://weval-consulting.com/enterprise-model.html",
|
||||
"ok": true,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/enterprise-model.html",
|
||||
"title": "WEVAL Enterprise Model",
|
||||
"is_login": false,
|
||||
"body_len": 433,
|
||||
"canvas": 1,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 20,
|
||||
"buttons": 3,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": 572,
|
||||
"DP_length": 26
|
||||
},
|
||||
"duration_ms": 13036,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "wevia-em-big4",
|
||||
"url": "https://weval-consulting.com/wevia-em-big4.html",
|
||||
"ok": false,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/login?r=/wevia-em-big4.html",
|
||||
"title": "WEVAL — Login",
|
||||
"is_login": true,
|
||||
"body_len": 89,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 5951,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "agents-archi",
|
||||
"url": "https://weval-consulting.com/agents-archi.html",
|
||||
"ok": false,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/login?r=/agents-archi.html",
|
||||
"title": "WEVAL — Login",
|
||||
"is_login": true,
|
||||
"body_len": 89,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 5723,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "value-streaming",
|
||||
"url": "https://weval-consulting.com/value-streaming.html",
|
||||
"ok": false,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/login?r=/value-streaming.html",
|
||||
"title": "WEVAL — Login",
|
||||
"is_login": true,
|
||||
"body_len": 89,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 5736,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "wevia-master",
|
||||
"url": "https://weval-consulting.com/wevia-master.html",
|
||||
"ok": false,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/login?r=/wevia-master.html",
|
||||
"title": "WEVAL — Login",
|
||||
"is_login": true,
|
||||
"body_len": 89,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 3790,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "business-kpi-dashboard",
|
||||
"url": "https://weval-consulting.com/business-kpi-dashboard.php",
|
||||
"ok": true,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/business-kpi-dashboard.php",
|
||||
"title": "V83 Business KPI Dashboard — SaaS Ready",
|
||||
"is_login": false,
|
||||
"body_len": 5568,
|
||||
"canvas": 0,
|
||||
"svg": 57,
|
||||
"img": 0,
|
||||
"links": 23,
|
||||
"buttons": 1,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 2,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 6612,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "wevia-admin-crm",
|
||||
"url": "https://weval-consulting.com/wevia-admin-crm.php",
|
||||
"ok": true,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/wevia-admin-crm.php",
|
||||
"title": "",
|
||||
"is_login": false,
|
||||
"body_len": 15,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 0,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 3150,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "wevia-v64-15-departements",
|
||||
"url": "https://weval-consulting.com/wevia-v64-15-departements.html",
|
||||
"ok": true,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/wevia-v64-15-departements.html",
|
||||
"title": "WEVAL Consulting — Enterprise Digital Transformation | ERP · Cloud · IA · Cybersécurité",
|
||||
"is_login": false,
|
||||
"body_len": 1180,
|
||||
"canvas": 0,
|
||||
"svg": 3,
|
||||
"img": 3,
|
||||
"links": 32,
|
||||
"buttons": 29,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 3716,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
},
|
||||
{
|
||||
"name": "wevia-em-live-kpi",
|
||||
"url": "https://weval-consulting.com/wevia-em-live-kpi.php",
|
||||
"ok": true,
|
||||
"diag": {
|
||||
"final_url": "https://weval-consulting.com/wevia-em-live-kpi.php",
|
||||
"title": "",
|
||||
"is_login": false,
|
||||
"body_len": 15,
|
||||
"canvas": 0,
|
||||
"svg": 0,
|
||||
"img": 0,
|
||||
"links": 0,
|
||||
"buttons": 0,
|
||||
"empty_blocks": 0,
|
||||
"error_divs": 0,
|
||||
"AG_length": -1,
|
||||
"DP_length": -1
|
||||
},
|
||||
"duration_ms": 3174,
|
||||
"js_errors_count": 0,
|
||||
"js_errors_sample": []
|
||||
}
|
||||
],
|
||||
"all_js_errors": [
|
||||
"[https://weval-consulting.com/weval-technology-platform.html] console: Failed to load resource: the server responded with a status of 401 ()",
|
||||
"[https://weval-consulting.com/wevia-admin-crm.php] console: Failed to load resource: the server responded with a status of 404 ()",
|
||||
"[https://weval-consulting.com/wevia-em-live-kpi.php] console: Failed to load resource: the server responded with a status of 404 ()"
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-20T13:40:16+00:00",
|
||||
"ts": "2026-04-20T13:47:42+00:00",
|
||||
"summary": {
|
||||
"total_categories": 7,
|
||||
"total_kpis": 56,
|
||||
|
||||
152
api/v94_selenium_e2e_video.js
Normal file
@@ -0,0 +1,152 @@
|
||||
// V94 FULL E2E SCENARIO BUSINESS with Chrome video (Selenium-style via Playwright Chromium)
|
||||
// Creates auth session → walks through 10 pages → records video → screenshots
|
||||
const { chromium } = require('playwright');
|
||||
const fs = require('fs');
|
||||
|
||||
const SESSION_SEED_URL = 'http://127.0.0.1/api/opus-test-session-v94.php?k=WEVADS2026';
|
||||
const VIDEO_DIR = '/var/www/html/api/blade-tasks/v94-videos/';
|
||||
const SCREENSHOTS_DIR = '/var/www/html/api/blade-tasks/v94-screenshots/';
|
||||
|
||||
const SCENARIO_PAGES = [
|
||||
{ name: 'weval-technology-platform', url: 'https://weval-consulting.com/weval-technology-platform.html', wait: 3000 },
|
||||
{ name: 'enterprise-model', url: 'https://weval-consulting.com/enterprise-model.html', wait: 6000 },
|
||||
{ name: 'wevia-em-big4', url: 'https://weval-consulting.com/wevia-em-big4.html', wait: 5000 },
|
||||
{ name: 'agents-archi', url: 'https://weval-consulting.com/agents-archi.html', wait: 5000 },
|
||||
{ name: 'value-streaming', url: 'https://weval-consulting.com/value-streaming.html', wait: 5000 },
|
||||
{ name: 'wevia-master', url: 'https://weval-consulting.com/wevia-master.html', wait: 3000 },
|
||||
{ name: 'business-kpi-dashboard', url: 'https://weval-consulting.com/business-kpi-dashboard.php', wait: 4000 },
|
||||
{ name: 'wevia-admin-crm', url: 'https://weval-consulting.com/wevia-admin-crm.php', wait: 3000 },
|
||||
{ name: 'wevia-v64-15-departements', url: 'https://weval-consulting.com/wevia-v64-15-departements.html', wait: 3000 },
|
||||
{ name: 'wevia-em-live-kpi', url: 'https://weval-consulting.com/wevia-em-live-kpi.php', wait: 3000 }
|
||||
];
|
||||
|
||||
(async () => {
|
||||
fs.mkdirSync(VIDEO_DIR, { recursive: true });
|
||||
fs.mkdirSync(SCREENSHOTS_DIR, { recursive: true });
|
||||
|
||||
const browser = await chromium.launch({
|
||||
headless: true,
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
||||
});
|
||||
const ctx = await browser.newContext({
|
||||
viewport: { width: 1920, height: 1080 },
|
||||
recordVideo: { dir: VIDEO_DIR, size: { width: 1920, height: 1080 } }
|
||||
});
|
||||
|
||||
// 1. Seed the auth session via localhost endpoint
|
||||
const seedPage = await ctx.newPage();
|
||||
await seedPage.goto(SESSION_SEED_URL, { waitUntil: 'load' });
|
||||
await seedPage.waitForTimeout(500);
|
||||
await seedPage.close();
|
||||
|
||||
// 2. Main page to navigate scenarios
|
||||
const page = await ctx.newPage();
|
||||
await page.addInitScript(() => {
|
||||
try { localStorage.setItem('weval_internal', 'yacine-2026'); } catch(e){}
|
||||
});
|
||||
|
||||
const errs = [];
|
||||
page.on('pageerror', e => errs.push(`[${page.url()}] ${e.message.substring(0, 200)}`));
|
||||
page.on('console', m => { if (m.type() === 'error') errs.push(`[${page.url()}] console: ${m.text().substring(0, 150)}`); });
|
||||
|
||||
const results = [];
|
||||
|
||||
for (const p of SCENARIO_PAGES) {
|
||||
const startTime = Date.now();
|
||||
const pageErrs = [];
|
||||
|
||||
try {
|
||||
await page.goto(p.url, { waitUntil: 'load', timeout: 30000 });
|
||||
await page.waitForTimeout(p.wait);
|
||||
|
||||
const diag = await page.evaluate(() => {
|
||||
const canvases = document.querySelectorAll('canvas');
|
||||
const svgs = document.querySelectorAll('svg');
|
||||
const imgs = document.querySelectorAll('img');
|
||||
const links = document.querySelectorAll('a').length;
|
||||
const buttons = document.querySelectorAll('button').length;
|
||||
|
||||
// Look for signs of rendering issues
|
||||
const emptyBlocks = document.querySelectorAll('.empty, .placeholder, [class*="empty"]').length;
|
||||
const errorDivs = Array.from(document.querySelectorAll('*')).filter(e =>
|
||||
/error|failed|undefined|NaN|null/i.test(e.textContent || '')
|
||||
&& e.children.length < 2
|
||||
&& (e.textContent || '').length < 100
|
||||
).length;
|
||||
|
||||
// Check globals
|
||||
const hasAG = typeof AG !== 'undefined' ? AG.length : -1;
|
||||
const hasDP = typeof DP !== 'undefined' ? DP.length : -1;
|
||||
|
||||
return {
|
||||
final_url: location.href,
|
||||
title: document.title,
|
||||
is_login: location.href.includes('/login'),
|
||||
body_len: document.body.innerText.length,
|
||||
canvas: canvases.length,
|
||||
svg: svgs.length,
|
||||
img: imgs.length,
|
||||
links,
|
||||
buttons,
|
||||
empty_blocks: emptyBlocks,
|
||||
error_divs: errorDivs,
|
||||
AG_length: hasAG,
|
||||
DP_length: hasDP
|
||||
};
|
||||
});
|
||||
|
||||
await page.screenshot({
|
||||
path: `${SCREENSHOTS_DIR}${p.name}.png`,
|
||||
fullPage: true
|
||||
});
|
||||
|
||||
results.push({
|
||||
name: p.name,
|
||||
url: p.url,
|
||||
ok: !diag.is_login,
|
||||
diag,
|
||||
duration_ms: Date.now() - startTime,
|
||||
js_errors_count: pageErrs.length,
|
||||
js_errors_sample: pageErrs.slice(0, 3)
|
||||
});
|
||||
} catch (e) {
|
||||
results.push({
|
||||
name: p.name,
|
||||
url: p.url,
|
||||
ok: false,
|
||||
err: e.message.substring(0, 200),
|
||||
duration_ms: Date.now() - startTime
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
await ctx.close();
|
||||
await browser.close();
|
||||
|
||||
// Rename videos for clarity
|
||||
const videoFiles = fs.readdirSync(VIDEO_DIR).filter(f => f.endsWith('.webm'));
|
||||
|
||||
const summary = {
|
||||
ts: new Date().toISOString(),
|
||||
total_pages: SCENARIO_PAGES.length,
|
||||
pages_ok: results.filter(r => r.ok).length,
|
||||
pages_auth_gated: results.filter(r => r.diag && r.diag.is_login).length,
|
||||
pages_errored: results.filter(r => !r.ok && !r.diag).length,
|
||||
total_js_errors: errs.length,
|
||||
video_files: videoFiles,
|
||||
video_dir: VIDEO_DIR,
|
||||
screenshots_dir: SCREENSHOTS_DIR,
|
||||
results,
|
||||
all_js_errors: errs.slice(0, 30)
|
||||
};
|
||||
|
||||
fs.writeFileSync('/var/www/html/api/playwright-v94-e2e-full-scenario.json', JSON.stringify(summary, null, 2));
|
||||
console.log(JSON.stringify({
|
||||
ok_pages: summary.pages_ok,
|
||||
auth_gated: summary.pages_auth_gated,
|
||||
errored: summary.pages_errored,
|
||||
total_errors: summary.total_js_errors,
|
||||
videos: videoFiles.length,
|
||||
screenshots: SCENARIO_PAGES.length
|
||||
}, null, 2));
|
||||
})();
|
||||
@@ -83,8 +83,11 @@ if ($days_since_send > 7) {
|
||||
$andons[] = ['severity' => 'RED', 'kpi' => 'send_contacts flux', 'message' => "send_contacts aucun ajout depuis $days_since_send jours"];
|
||||
}
|
||||
|
||||
// 20avr fix doctrine #17 SEND MANUAL:
|
||||
// Low email volume is EXPECTED when Yacine hasn't launched campaign.
|
||||
// Andon reste INFO pour transparence, pas ORANGE (pas un bug technique)
|
||||
if ($out['flux']['graph_send_last_7d'] < 100) {
|
||||
$andons[] = ['severity' => 'ORANGE', 'kpi' => 'graph_send_log flux', 'message' => "Emails envoyés 7j: " . $out['flux']['graph_send_last_7d'] . " (objectif >1000)"];
|
||||
$andons[] = ['severity' => 'INFO', 'kpi' => 'graph_send_log flux', 'message' => "Emails envoyés 7j: " . $out['flux']['graph_send_last_7d'] . " (doctrine #17 SEND MANUAL — en attente lancement campagne par Yacine)"];
|
||||
}
|
||||
|
||||
if ($out['flux']['pipeline_deals_last_30d'] == 0) {
|
||||
|
||||