177 lines
7.4 KiB
HTML
Executable File
177 lines
7.4 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>État des Écrans Arsenal</title>
|
|
<meta charset="utf-8">
|
|
<style>
|
|
body { font-family: Arial, sans-serif; margin: 40px; background: #f8fafc; }
|
|
.container { max-width: 1200px; margin: 0 auto; }
|
|
h1 { color: #0891b2; border-bottom: 3px solid #0891b2; padding-bottom: 15px; }
|
|
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin: 30px 0; }
|
|
.stat-card { background: white; padding: 20px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); text-align: center; }
|
|
.stat-value { font-size: 36px; font-weight: bold; }
|
|
.stat-label { color: #64748b; font-size: 14px; margin-top: 5px; }
|
|
.success { color: #10b981; border-left: 4px solid #10b981; }
|
|
.warning { color: #f59e0b; border-left: 4px solid #f59e0b; }
|
|
.error { color: #ef4444; border-left: 4px solid #ef4444; }
|
|
.screen-list { background: white; border-radius: 10px; padding: 20px; margin-top: 30px; }
|
|
.screen-item { padding: 10px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; }
|
|
.screen-name { font-weight: 500; }
|
|
.screen-status { font-size: 12px; padding: 3px 8px; border-radius: 4px; }
|
|
.status-live { background: #d1fae5; color: #065f46; }
|
|
.status-simul { background: #fef3c7; color: #92400e; }
|
|
.status-dead { background: #fee2e2; color: #991b1b; }
|
|
.api-test { background: #f1f5f9; padding: 15px; border-radius: 8px; margin-top: 20px; }
|
|
.btn { display: inline-block; padding: 10px 20px; background: #0891b2; color: white; text-decoration: none; border-radius: 6px; margin: 5px; }
|
|
.btn:hover { background: #0e7490; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>📊 État des Écrans Arsenal (Port 5890)</h1>
|
|
|
|
<div class="stats">
|
|
<div class="stat-card success">
|
|
<div class="stat-value" id="total-screens">40</div>
|
|
<div class="stat-label">Écrans Totaux</div>
|
|
</div>
|
|
<div class="stat-card success">
|
|
<div class="stat-value" id="live-screens">7</div>
|
|
<div class="stat-label">Écrans LIVE</div>
|
|
</div>
|
|
<div class="stat-card warning">
|
|
<div class="stat-value" id="simul-screens">3</div>
|
|
<div class="stat-label">Écrans SIMUL</div>
|
|
</div>
|
|
<div class="stat-card error">
|
|
<div class="stat-value" id="dead-screens">28</div>
|
|
<div class="stat-label">Écrans MORTS</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="screen-list">
|
|
<h3>Liste des Écrans</h3>
|
|
<div id="screens-container">
|
|
<!-- Les écrans seront chargés ici -->
|
|
</div>
|
|
</div>
|
|
|
|
<div class="api-test">
|
|
<h3>🔌 Test des APIs</h3>
|
|
<button class="btn" onclick="testAllAPIs()">Tester toutes les APIs</button>
|
|
<button class="btn" onclick="testCriticalAPIs()">Tester APIs critiques</button>
|
|
<div id="api-results" style="margin-top: 15px; font-family: monospace; font-size: 12px;"></div>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px; text-align: center;">
|
|
<a href="/" class="btn">Accueil Arsenal</a>
|
|
<a href="/test-integration.html" class="btn">Page de Test</a>
|
|
<a href="http://localhost:5821/" class="btn">ADX (5821)</a>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
async function loadScreenStatus() {
|
|
try {
|
|
const response = await fetch('/api/health-check.php?action=screen_status');
|
|
const data = await response.json();
|
|
|
|
if (data.status === 'success') {
|
|
document.getElementById('live-screens').textContent = data.live;
|
|
document.getElementById('simul-screens').textContent = data.simul;
|
|
document.getElementById('dead-screens').textContent = data.dead;
|
|
|
|
// Afficher la liste des écrans
|
|
const container = document.getElementById('screens-container');
|
|
container.innerHTML = '';
|
|
|
|
data.screens.forEach(screen => {
|
|
const div = document.createElement('div');
|
|
div.className = 'screen-item';
|
|
|
|
let statusClass = 'status-dead';
|
|
let statusText = 'MORT';
|
|
|
|
if (screen.status === 'live') {
|
|
statusClass = 'status-live';
|
|
statusText = 'LIVE';
|
|
} else if (screen.status === 'simul') {
|
|
statusClass = 'status-simul';
|
|
statusText = 'SIMUL';
|
|
}
|
|
|
|
div.innerHTML = `
|
|
<div class="screen-name">
|
|
<a href="${screen.file}" target="_blank">${screen.name}</a>
|
|
</div>
|
|
<div class="screen-status ${statusClass}">${statusText}</div>
|
|
`;
|
|
|
|
container.appendChild(div);
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Error loading screen status:', error);
|
|
}
|
|
}
|
|
|
|
async function testAllAPIs() {
|
|
const resultsDiv = document.getElementById('api-results');
|
|
resultsDiv.innerHTML = 'Testing all APIs...';
|
|
|
|
const apis = [
|
|
'account-creator', 'ai-copywriter', 'bpms-command-center', 'brain-combo',
|
|
'captcha-solver', 'cvc-vault', 'data-manager', 'fingerprint-sync',
|
|
'harvest-manager', 'health-check', 'lookalike-engine', 'neural-dom-mutator',
|
|
'offer-engine', 'pattern-shuffler', 'phone-generator', 'predictive-send',
|
|
'scrapping-factory', 'seed-cleaner', 'self-healing', 'send-factory',
|
|
'sms-engine', 'temp-email', 'trap-detector', 'world-map', 'sms-templates'
|
|
];
|
|
|
|
let results = [];
|
|
|
|
for (const api of apis) {
|
|
try {
|
|
const response = await fetch(`/api/${api}.php?action=test`);
|
|
const data = await response.json();
|
|
results.push(`${api}: ${data.status}`);
|
|
} catch (error) {
|
|
results.push(`${api}: ❌ ERROR`);
|
|
}
|
|
}
|
|
|
|
resultsDiv.innerHTML = results.map(r => `<div>${r}</div>`).join('');
|
|
}
|
|
|
|
async function testCriticalAPIs() {
|
|
const resultsDiv = document.getElementById('api-results');
|
|
resultsDiv.innerHTML = 'Testing critical APIs...';
|
|
|
|
const criticalAPIs = [
|
|
'account-creator', 'brain-combo', 'send-factory', 'health-check'
|
|
];
|
|
|
|
let results = [];
|
|
|
|
for (const api of criticalAPIs) {
|
|
try {
|
|
const response = await fetch(`/api/${api}.php?action=test`);
|
|
const data = await response.json();
|
|
results.push(`✅ ${api}: ${data.status} (${data.version})`);
|
|
} catch (error) {
|
|
results.push(`❌ ${api}: ERROR`);
|
|
}
|
|
}
|
|
|
|
resultsDiv.innerHTML = results.join('<br>');
|
|
}
|
|
|
|
// Charger l'état au démarrage
|
|
loadScreenStatus();
|
|
|
|
// Rafraîchir toutes les 30 secondes
|
|
setInterval(loadScreenStatus, 30000);
|
|
</script>
|
|
</body>
|
|
</html>
|