PHP Classes

File: dashboard/index.php

Recommend this page to a friend!
  Packages of Moises Espindola   Sentinela   dashboard/index.php   Download  
File: dashboard/index.php
Role: Application script
Content type: text/plain
Description: Application script
Class: Sentinela
Linux protection tools with Web dashboard panel
Author: By
Last change:
Date: 6 days ago
Size: 11,505 bytes
 

Contents

Class file image Download
<?php /** * Sentinela ? Intelligent Linux Security Framework * Dashboard Principal * * PHP 8.3 + Bootstrap 5 + Chart.js + AJAX * Sin frameworks, sin Node.js */ ?><!DOCTYPE html> <html lang="es" data-bs-theme="dark"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sentinela ? Security Dashboard</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet"> <link href="assets/css/dashboard.css" rel="stylesheet"> </head> <body> <!-- Navbar --> <nav class="navbar navbar-dark bg-dark border-bottom border-secondary sticky-top"> <div class="container-fluid"> <span class="navbar-brand mb-0 h1"> <i class="bi bi-shield-fill-check text-success"></i> Sentinela <small class="text-muted fs-6">Intelligent Linux Security Framework</small> </span> <div class="d-flex align-items-center gap-3"> <span class="badge bg-success" id="firewallStatus">ACTIVO</span> <span class="text-muted small" id="lastUpdate">--</span> <button class="btn btn-sm btn-outline-secondary" onclick="refreshAll()" title="Actualizar"> <i class="bi bi-arrow-clockwise"></i> </button> </div> </div> </nav> <div class="container-fluid p-3"> <div class="row g-3"> <!-- Server Info --> <div class="col-12"> <div class="card border-secondary"> <div class="card-header bg-dark border-secondary"> <i class="bi bi-server"></i> Servidor <small class="text-muted" id="serverHostname"></small> </div> <div class="card-body bg-dark-subtle"> <div class="row g-2" id="serverStats"> <div class="col-6 col-md-3"> <div class="stat-card"> <div class="stat-label">CPU</div> <div class="stat-value" id="cpuValue">0%</div> <div class="progress" style="height: 4px;"> <div id="cpuBar" class="progress-bar bg-info" style="width:0%"></div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="stat-card"> <div class="stat-label">RAM</div> <div class="stat-value" id="memValue">0%</div> <div class="progress" style="height: 4px;"> <div id="memBar" class="progress-bar bg-warning" style="width:0%"></div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="stat-card"> <div class="stat-label">DISCO</div> <div class="stat-value" id="diskValue">0%</div> <div class="progress" style="height: 4px;"> <div id="diskBar" class="progress-bar bg-danger" style="width:0%"></div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="stat-card"> <div class="stat-label">CARGA</div> <div class="stat-value" id="loadValue">0.0</div> <div class="text-muted small" id="uptimeValue">0 días</div> </div> </div> </div> </div> </div> </div> <!-- Quick Stats --> <div class="col-6 col-md-3"> <div class="card border-secondary text-center h-100"> <div class="card-body"> <div class="display-6 text-danger" id="totalAttacks">0</div> <div class="text-muted small">ATAQUES DETECTADOS</div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="card border-secondary text-center h-100"> <div class="card-body"> <div class="display-6 text-warning" id="totalBanned">0</div> <div class="text-muted small">IPS BLOQUEADAS</div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="card border-secondary text-center h-100"> <div class="card-body"> <div class="display-6 text-info" id="totalConnections">0</div> <div class="text-muted small">CONEXIONES ACTIVAS</div> </div> </div> </div> <div class="col-6 col-md-3"> <div class="card border-secondary text-center h-100"> <div class="card-body"> <div class="display-6 text-success" id="uptimeDays">0</div> <div class="text-muted small">DÍAS EN LÍNEA</div> </div> </div> </div> <!-- Attack Types Chart --> <div class="col-12 col-md-6"> <div class="card border-secondary h-100"> <div class="card-header bg-dark border-secondary"> <i class="bi bi-pie-chart"></i> Tipos de Ataque </div> <div class="card-body"> <canvas id="attackTypesChart"></canvas> </div> </div> </div> <!-- Top Countries --> <div class="col-12 col-md-6"> <div class="card border-secondary h-100"> <div class="card-header bg-dark border-secondary"> <i class="bi bi-globe"></i> Países de Origen </div> <div class="card-body"> <canvas id="topCountriesChart"></canvas> </div> </div> </div> <!-- Top IPs --> <div class="col-12 col-md-6"> <div class="card border-secondary h-100"> <div class="card-header bg-dark border-secondary"> <i class="bi bi-ip</i"> Top IPs Atacantes </div> <div class="card-body p-0"> <div class="table-responsive"> <table class="table table-dark table-striped table-sm mb-0" id="topIPsTable"> <thead> <tr> <th>IP</th> <th class="text-end">Ataques</th> <th class="text-end">Acción</th> </tr> </thead> <tbody id="topIPsBody"></tbody> </table> </div> </div> </div> </div> <!-- Recent Attacks --> <div class="col-12 col-md-6"> <div class="card border-secondary h-100"> <div class="card-header bg-dark border-secondary"> <i class="bi bi-exclamation-triangle"></i> Últimos Ataques </div> <div class="card-body p-0"> <div class="table-responsive" style="max-height: 300px;"> <table class="table table-dark table-sm mb-0" id="recentAttacksTable"> <thead> <tr> <th>Hora</th> <th>IP</th> <th>Tipo</th> </tr> </thead> <tbody id="recentAttacksBody"></tbody> </table> </div> </div> </div> </div> <!-- Banned IPs --> <div class="col-12"> <div class="card border-secondary"> <div class="card-header bg-dark border-secondary d-flex justify-content-between align-items-center"> <span><i class="bi bi-lock"></i> IPs Bloqueadas</span> <button class="btn btn-sm btn-outline-danger" onclick="flushBanned()"> <i class="bi bi-trash"></i> Liberar Todas </button> </div> <div class="card-body p-0"> <div class="table-responsive" style="max-height: 400px;"> <table class="table table-dark table-sm mb-0" id="bannedIPsTable"> <thead> <tr> <th>IP</th> <th>Tiempo Restante</th> <th class="text-end">Acción</th> </tr> </thead> <tbody id="bannedIPsBody"></tbody> </table> </div> </div> </div> </div> </div> </div> <!-- Modal for Unban Confirm --> <div class="modal fade" id="confirmModal" tabindex="-1"> <div class="modal-dialog modal-sm"> <div class="modal-content bg-dark"> <div class="modal-header border-secondary"> <h5 class="modal-title">Confirmar</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body" id="confirmModalBody">¿Está seguro?</div> <div class="modal-footer border-secondary"> <button class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Cancelar</button> <button class="btn btn-sm btn-danger" id="confirmModalBtn">Confirmar</button> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> <script src="assets/js/dashboard.js"></script> </body> </html>