Files
wevads-platform/scripts/dashboard-central.php
2026-02-26 04:53:11 +01:00

228 lines
16 KiB
PHP
Executable File

<?php
error_reporting(E_ALL);
ini_set('display_errors', 0);
function getDb() {
static $pdo = null;
if ($pdo === null) {
$pdo = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return $pdo;
}
if (isset($_GET['action']) && $_GET['action'] === 'stats') {
header('Content-Type: application/json');
$pdo = getDb();
$stats = [];
// O365
try {
$stats['o365'] = [
'total' => (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts")->fetchColumn(),
'active' => (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status = 'Active'")->fetchColumn(),
'blocked' => (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status = 'Blocked'")->fetchColumn()
];
} catch (Exception $e) { $stats['o365'] = ['total' => 0, 'active' => 0, 'blocked' => 0]; }
// GSuite
try {
$stats['gsuite'] = [
'users' => (int)$pdo->query("SELECT COUNT(*) FROM admin.gsuite_users")->fetchColumn(),
'domains' => (int)$pdo->query("SELECT COUNT(*) FROM admin.gsuite_domains")->fetchColumn()
];
} catch (Exception $e) { $stats['gsuite'] = ['users' => 0, 'domains' => 0]; }
// Firebase
try {
$stats['firebase'] = [
'projects' => (int)$pdo->query("SELECT COUNT(*) FROM admin.firebase_projects")->fetchColumn(),
'users' => (int)$pdo->query("SELECT COUNT(*) FROM admin.firebase_users")->fetchColumn(),
'tokens' => (int)$pdo->query("SELECT COUNT(*) FROM admin.firebase_tokens")->fetchColumn()
];
} catch (Exception $e) { $stats['firebase'] = ['projects' => 0, 'users' => 0, 'tokens' => 0]; }
// Import
try {
$stats['import'] = [
'leads' => (int)$pdo->query("SELECT COUNT(*) FROM admin.import_leads")->fetchColumn(),
'jobs' => (int)$pdo->query("SELECT COUNT(*) FROM admin.import_jobs")->fetchColumn()
];
} catch (Exception $e) { $stats['import'] = ['leads' => 0, 'jobs' => 0]; }
// Campaigns
try {
$stats['campaigns'] = [
'total' => (int)$pdo->query("SELECT COUNT(*) FROM admin.campaigns")->fetchColumn(),
'sending' => (int)$pdo->query("SELECT COUNT(*) FROM admin.campaigns WHERE status = 'sending'")->fetchColumn()
];
} catch (Exception $e) { $stats['campaigns'] = ['total' => 0, 'sending' => 0]; }
// System
$stats['system'] = [
'uptime' => trim(shell_exec("uptime -p") ?? ""),
'load' => sys_getloadavg()[0] ?? 0,
'memory' => round((1 - (int)shell_exec("free | grep Mem | awk '{print \$7/\$2}'")) * 100, 1),
'disk' => round((float)shell_exec("df / | tail -1 | awk '{print \$5}' | tr -d '%'"), 1)
];
echo json_encode($stats);
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WEVAL SEND - Central Dashboard</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root{--bg:#0a0a0f;--card:#12121a;--card2:#1a1a25;--border:#2a2a3a;--text:#e4e4e7;--text2:#9ca3af;--primary:#6366f1;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--info:#3b82f6}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;padding:20px}
.container{max-width:1600px;margin:0 auto}
.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;padding-bottom:20px;border-bottom:1px solid var(--border)}
.header h1{font-size:28px;display:flex;align-items:center;gap:12px}
.header h1 i{color:var(--primary)}
.header-right{display:flex;align-items:center;gap:20px}
.system-status{display:flex;gap:16px}
.status-item{text-align:center}
.status-value{font-size:18px;font-weight:700}
.status-label{font-size:10px;color:var(--text2)}
.modules-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:20px;margin-bottom:30px}
.module-card{background:var(--card);border-radius:16px;border:1px solid var(--border);overflow:hidden;transition:all 0.3s}
.module-card:hover{transform:translateY(-4px);border-color:var(--primary)}
.module-header{padding:20px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--border)}
.module-icon{width:50px;height:50px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px}
.module-icon.o365{background:linear-gradient(135deg,#0078d4,#00bcf2);color:white}
.module-icon.gsuite{background:linear-gradient(135deg,#4285f4,#34a853);color:white}
.module-icon.firebase{background:linear-gradient(135deg,#ffca28,#ff9800);color:black}
.module-icon.import{background:linear-gradient(135deg,#6366f1,#8b5cf6);color:white}
.module-icon.smtp{background:linear-gradient(135deg,#10b981,#059669);color:white}
.module-icon.warmup{background:linear-gradient(135deg,#f59e0b,#d97706);color:white}
.module-icon.domain{background:linear-gradient(135deg,#ef4444,#dc2626);color:white}
.module-icon.webhook{background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:white}
.module-icon.analytics{background:linear-gradient(135deg,#3b82f6,#2563eb);color:white}
.module-icon.alert{background:linear-gradient(135deg,#ec4899,#db2777);color:white}
.module-title{font-size:18px;font-weight:700}
.module-subtitle{font-size:12px;color:var(--text2)}
.module-stats{padding:20px;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.stat-box{text-align:center;padding:12px;background:var(--card2);border-radius:8px}
.stat-box .value{font-size:22px;font-weight:700}
.stat-box .label{font-size:10px;color:var(--text2);margin-top:2px}
.stat-box.success .value{color:var(--success)}
.stat-box.warning .value{color:var(--warning)}
.stat-box.danger .value{color:var(--danger)}
.module-actions{padding:16px 20px;border-top:1px solid var(--border);display:flex;gap:10px}
.btn{padding:10px 16px;border:none;border-radius:8px;cursor:pointer;font-weight:600;font-size:12px;display:inline-flex;align-items:center;gap:6px;text-decoration:none;transition:all 0.2s}
.btn-primary{background:var(--primary);color:white}
.btn-success{background:var(--success);color:white}
.btn-secondary{background:var(--card2);color:var(--text);border:1px solid var(--border)}
.btn:hover{filter:brightness(1.1);transform:translateY(-1px)}
.quick-actions{background:var(--card);border-radius:16px;border:1px solid var(--border);padding:20px;margin-bottom:30px}
.quick-actions h2{font-size:16px;margin-bottom:16px;display:flex;align-items:center;gap:8px}
.quick-actions h2 i{color:var(--warning)}
.actions-grid{display:flex;flex-wrap:wrap;gap:10px}
.refresh-btn{background:var(--card2);border:1px solid var(--border);color:var(--text);padding:10px 20px;border-radius:8px;cursor:pointer;font-size:13px}
.refresh-btn:hover{background:var(--primary);border-color:var(--primary)}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1><i class="fas fa-rocket"></i> WEVAL SEND Central</h1>
<div class="header-right">
<div class="system-status">
<div class="status-item"><div class="status-value" id="sysLoad">-</div><div class="status-label">CPU Load</div></div>
<div class="status-item"><div class="status-value" id="sysMem">-</div><div class="status-label">Memory</div></div>
<div class="status-item"><div class="status-value" id="sysDisk">-</div><div class="status-label">Disk</div></div>
</div>
<button class="refresh-btn" onclick="loadAll()"><i class="fas fa-sync"></i> Refresh</button>
</div>
</div>
<div class="quick-actions">
<h2><i class="fas fa-bolt"></i> Quick Actions</h2>
<div class="actions-grid">
<a href="import-system.php" class="btn btn-primary"><i class="fas fa-file-import"></i> Import Leads</a>
<a href="o365-recovery.php" class="btn btn-success"><i class="fas fa-wrench"></i> Recover O365</a>
<a href="gsuite-manager.php" class="btn btn-primary"><i class="fab fa-google"></i> Create GSuite Users</a>
<a href="firebase-manager.php" class="btn btn-success"><i class="fas fa-bell"></i> Send Push</a>
<a href="smtp-tester.php" class="btn btn-secondary"><i class="fas fa-envelope"></i> Test SMTP</a>
<a href="analytics.php" class="btn btn-secondary"><i class="fas fa-chart-line"></i> View Analytics</a>
</div>
</div>
<div class="modules-grid">
<div class="module-card">
<div class="module-header"><div class="module-icon o365"><i class="fab fa-microsoft"></i></div><div><div class="module-title">Office 365</div><div class="module-subtitle">Email Accounts Management</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="o365Total">-</div><div class="label">Total</div></div><div class="stat-box success"><div class="value" id="o365Active">-</div><div class="label">Active</div></div><div class="stat-box danger"><div class="value" id="o365Blocked">-</div><div class="label">Blocked</div></div></div>
<div class="module-actions"><a href="o365-recovery.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a><a href="alert-system.php" class="btn btn-secondary"><i class="fas fa-bell"></i> Alerts</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon gsuite"><i class="fab fa-google"></i></div><div><div class="module-title">Google Workspace</div><div class="module-subtitle">GSuite User Management</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="gsuiteUsers">-</div><div class="label">Users</div></div><div class="stat-box"><div class="value" id="gsuiteDomains">-</div><div class="label">Domains</div></div><div class="stat-box"><div class="value">-</div><div class="label">Groups</div></div></div>
<div class="module-actions"><a href="gsuite-manager.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon firebase"><i class="fas fa-fire"></i></div><div><div class="module-title">Firebase</div><div class="module-subtitle">Push Notifications & Auth</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="fbProjects">-</div><div class="label">Projects</div></div><div class="stat-box"><div class="value" id="fbUsers">-</div><div class="label">Users</div></div><div class="stat-box"><div class="value" id="fbTokens">-</div><div class="label">Tokens</div></div></div>
<div class="module-actions"><a href="firebase-manager.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon import"><i class="fas fa-file-import"></i></div><div><div class="module-title">Import System</div><div class="module-subtitle">Bulk Data Import</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="importLeads">-</div><div class="label">Leads</div></div><div class="stat-box"><div class="value" id="importJobs">-</div><div class="label">Jobs</div></div><div class="stat-box"><div class="value">200MB</div><div class="label">Max Size</div></div></div>
<div class="module-actions"><a href="import-system.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon smtp"><i class="fas fa-envelope"></i></div><div><div class="module-title">SMTP Tester</div><div class="module-subtitle">Email Deliverability</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="smtpTests">-</div><div class="label">Tests</div></div><div class="stat-box success"><div class="value">-</div><div class="label">Delivered</div></div><div class="stat-box danger"><div class="value">-</div><div class="label">Failed</div></div></div>
<div class="module-actions"><a href="smtp-tester.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon warmup"><i class="fas fa-temperature-high"></i></div><div><div class="module-title">Warmup System</div><div class="module-subtitle">Account Warming</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value">-</div><div class="label">Warming</div></div><div class="stat-box"><div class="value">-</div><div class="label">Ready</div></div><div class="stat-box"><div class="value">-</div><div class="label">Daily</div></div></div>
<div class="module-actions"><a href="warmup-system.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon domain"><i class="fas fa-shield-alt"></i></div><div><div class="module-title">Domain Reputation</div><div class="module-subtitle">Monitoring & Blacklists</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value">-</div><div class="label">Domains</div></div><div class="stat-box success"><div class="value">-</div><div class="label">Clean</div></div><div class="stat-box danger"><div class="value">-</div><div class="label">Listed</div></div></div>
<div class="module-actions"><a href="domain-reputation.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon webhook"><i class="fas fa-plug"></i></div><div><div class="module-title">Webhook Manager</div><div class="module-subtitle">API Integrations</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value">-</div><div class="label">Endpoints</div></div><div class="stat-box"><div class="value">-</div><div class="label">Today</div></div><div class="stat-box"><div class="value">-</div><div class="label">Failed</div></div></div>
<div class="module-actions"><a href="webhook-manager.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
<div class="module-card">
<div class="module-header"><div class="module-icon analytics"><i class="fas fa-chart-line"></i></div><div><div class="module-title">Analytics</div><div class="module-subtitle">Stats & Reports</div></div></div>
<div class="module-stats"><div class="stat-box"><div class="value" id="campTotal">-</div><div class="label">Campaigns</div></div><div class="stat-box success"><div class="value" id="campSending">-</div><div class="label">Sending</div></div><div class="stat-box"><div class="value">-</div><div class="label">Opens</div></div></div>
<div class="module-actions"><a href="analytics.php" class="btn btn-primary"><i class="fas fa-external-link-alt"></i> Open</a></div>
</div>
</div>
</div>
<script>
async function loadAll(){
const d=await fetch('?action=stats').then(r=>r.json());
document.getElementById('o365Total').textContent=d.o365.total;
document.getElementById('o365Active').textContent=d.o365.active;
document.getElementById('o365Blocked').textContent=d.o365.blocked;
document.getElementById('gsuiteUsers').textContent=d.gsuite.users;
document.getElementById('gsuiteDomains').textContent=d.gsuite.domains;
document.getElementById('fbProjects').textContent=d.firebase.projects;
document.getElementById('fbUsers').textContent=d.firebase.users;
document.getElementById('fbTokens').textContent=d.firebase.tokens;
document.getElementById('importLeads').textContent=d.import.leads;
document.getElementById('importJobs').textContent=d.import.jobs;
document.getElementById('campTotal').textContent=d.campaigns.total;
document.getElementById('campSending').textContent=d.campaigns.sending;
document.getElementById('sysLoad').textContent=d.system.load.toFixed(2);
document.getElementById('sysMem').textContent=d.system.memory+'%';
document.getElementById('sysDisk').textContent=d.system.disk+'%';
}
loadAll();
setInterval(loadAll,30000);
</script>
</body>
</html>