Files
vps_monitoring/server/templates/dashboard.html
Андрей Бобырев f5726561ea feat: add author footer to all pages (GitHub, Boosty, Support, @Iot_andrey)
- Footer on dashboard, login, Telegram Mini App
- Author section in README
- Consistent styling across light/dark themes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 12:55:45 +03:00

177 lines
8.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VPS Monitoring</title>
<link rel="stylesheet" href="/static/css/style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.min.css">
<script src="/static/js/theme.js"></script>
<script src="/static/js/i18n.js"></script>
</head>
<body>
<header>
<div class="header-left">
<h1 id="pageTitle">🖥 VPS Monitoring</h1>
</div>
<div class="header-right">
<button class="lang-btn" id="langBtn" onclick="toggleLang()">RU</button>
<button class="btn-icon" id="themeToggleBtn" onclick="toggleTheme()" title="Theme">🌙</button>
<button class="btn-icon" onclick="refreshAll()" title="Refresh">🔄</button>
<button class="btn-icon" onclick="showInstructions()" title="Instructions">📖</button>
<button class="btn-icon" onclick="showSettings()" title="Settings">⚙️</button>
<button class="btn-icon" onclick="logout()" title="Logout">🚪</button>
</div>
</header>
<main>
<div class="stats-bar">
<div class="stat-item" id="stat-total">
<span class="stat-label" data-i18n="total">Всего</span>
<span class="stat-value" id="total-count">0</span>
</div>
<div class="stat-item online" id="stat-online">
<span class="stat-label" data-i18n="online">Online</span>
<span class="stat-value" id="online-count">0</span>
</div>
<div class="stat-item offline" id="stat-offline">
<span class="stat-label" data-i18n="offline">Offline</span>
<span class="stat-value" id="offline-count">0</span>
</div>
</div>
<div class="toolbar">
<button class="btn-primary" id="addServerBtn" onclick="showAddServer()">+ Добавить сервер</button>
</div>
<div class="servers-grid" id="servers-grid"></div>
</main>
<!-- Add Server Modal -->
<div class="modal" id="addServerModal" style="display:none">
<div class="modal-content">
<div class="modal-header">
<h2 data-i18n="addServer">Добавить сервер</h2>
<button class="btn-close" onclick="closeModal('addServerModal')">&times;</button>
</div>
<form id="addServerForm">
<div class="form-group">
<label data-i18n="serverName">Название</label>
<input type="text" name="name" required placeholder="My Server">
</div>
<div class="form-group">
<label data-i18n="host">IP / Host</label>
<input type="text" name="host" required placeholder="192.168.1.1">
</div>
<div class="form-group">
<label data-i18n="sshPort">Порт SSH</label>
<input type="number" name="port" value="22">
</div>
<div class="form-group">
<label data-i18n="sshLogin">Логин</label>
<input type="text" name="username" value="root">
</div>
<div class="form-group">
<label data-i18n="sshPassword">Пароль</label>
<input type="password" name="password" placeholder="SSH Password">
</div>
<div class="form-group">
<label data-i18n="description">Описание</label>
<input type="text" name="description" placeholder="">
</div>
<button type="submit" class="btn-primary" data-i18n="add">Добавить</button>
</form>
</div>
</div>
<!-- Settings Modal -->
<div class="modal" id="settingsModal" style="display:none">
<div class="modal-content">
<div class="modal-header">
<h2 data-i18n="settings">Настройки</h2>
<button class="btn-close" onclick="closeModal('settingsModal')">&times;</button>
</div>
<form id="settingsForm">
<h3 data-i18n="auth">Авторизация</h3>
<div class="form-group">
<label data-i18n="username">Логин</label>
<input type="text" name="admin_login" id="set_login">
</div>
<div class="form-group">
<label data-i18n="newPassword">Новый пароль</label>
<input type="password" name="admin_password" id="set_password" placeholder="">
</div>
<h3 data-i18n="telegram">Telegram</h3>
<div class="form-group">
<label data-i18n="botToken">Bot Token</label>
<input type="text" name="telegram_bot_token" id="set_tg_token">
</div>
<div class="form-group">
<label data-i18n="chatId">Chat ID</label>
<input type="text" name="telegram_chat_id" id="set_tg_chat">
</div>
<h3 data-i18n="monitoring">Мониторинг</h3>
<div class="form-group">
<label data-i18n="pollInterval">Интервал опроса (сек)</label>
<input type="number" name="monitor_interval" id="set_interval" value="60">
</div>
<div class="form-group">
<label data-i18n="cpuThreshold">Порог CPU (%)</label>
<input type="number" name="alert_cpu_threshold" id="set_cpu" value="90">
</div>
<div class="form-group">
<label data-i18n="ramThreshold">Порог RAM (%)</label>
<input type="number" name="alert_ram_threshold" id="set_ram" value="90">
</div>
<div class="form-group">
<label data-i18n="diskThreshold">Порог Disk (%)</label>
<input type="number" name="alert_disk_threshold" id="set_disk" value="90">
</div>
<button type="submit" class="btn-primary" data-i18n="save">Сохранить</button>
</form>
</div>
</div>
<!-- Instructions Modal -->
<div class="modal" id="instructionsModal" style="display:none">
<div class="modal-content modal-wide">
<div class="modal-header">
<h2 data-i18n="instructions_title">Инструкции и шпаргалки</h2>
<button class="btn-close" onclick="closeModal('instructionsModal')">&times;</button>
</div>
<div id="instructions-content"></div>
</div>
</div>
<!-- SSH Terminal Modal -->
<div class="modal" id="sshModal" style="display:none">
<div class="modal-content modal-large">
<div class="modal-header">
<h2 id="ssh-title">SSH Terminal</h2>
<button class="btn-close" onclick="closeSSH()">&times;</button>
</div>
<div id="terminal-container"></div>
</div>
</div>
<!-- Server Detail Modal -->
<div class="modal" id="serverDetailModal" style="display:none">
<div class="modal-content">
<div class="modal-header">
<h2 id="detail-title">Server</h2>
<button class="btn-close" onclick="closeModal('serverDetailModal')">&times;</button>
</div>
<div id="detail-content"></div>
</div>
</div>
<footer class="app-footer">
автор:&ensp;<a href="https://github.com/andrey271192" target="_blank">GitHub</a>&ensp;·&ensp;<a href="https://boosty.to/iot_andrey" target="_blank">Boosty</a>&ensp;·&ensp;<a href="https://t.me/Iot_andrey" target="_blank">Поддержка</a>&ensp;·&ensp;<a href="https://t.me/Iot_andrey" target="_blank">@Iot_andrey</a>
</footer>
<script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.min.js"></script>
<script src="/static/js/app.js"></script>
</body>
</html>