✨ Features: - Backend FastAPI complete (25 Python files) - 5 SQLAlchemy models (Device, HardwareSnapshot, Benchmark, Link, Document) - Pydantic schemas for validation - 4 API routers (benchmark, devices, links, docs) - Authentication with Bearer token - Automatic score calculation - File upload support - Frontend web interface (13 files) - 4 HTML pages (Dashboard, Devices, Device Detail, Settings) - 7 JavaScript modules - Monokai dark theme CSS - Responsive design - Complete CRUD operations - Client benchmark script (500+ lines Bash) - Hardware auto-detection - CPU, RAM, Disk, Network benchmarks - JSON payload generation - Robust error handling - Docker deployment - Optimized Dockerfile - docker-compose with 2 services - Persistent volumes - Environment variables - Documentation & Installation - Automated install.sh script - README, QUICKSTART, DEPLOYMENT guides - Complete API documentation - Project structure documentation 📊 Stats: - ~60 files created - ~5000 lines of code - Full MVP feature set implemented 🚀 Ready for production deployment! 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
167 lines
5.7 KiB
HTML
167 lines
5.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Device Detail - Linux BenchTools</title>
|
|
<link rel="stylesheet" href="css/main.css">
|
|
<link rel="stylesheet" href="css/components.css">
|
|
</head>
|
|
<body>
|
|
<!-- Header -->
|
|
<header class="header">
|
|
<div class="container">
|
|
<h1>🚀 Linux BenchTools</h1>
|
|
<p>Détail du device</p>
|
|
|
|
<!-- Navigation -->
|
|
<nav class="nav">
|
|
<a href="index.html" class="nav-link">Dashboard</a>
|
|
<a href="devices.html" class="nav-link">Devices</a>
|
|
<a href="settings.html" class="nav-link">Settings</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Main Content -->
|
|
<main class="container">
|
|
<!-- Loading State -->
|
|
<div id="loadingState" class="loading">Chargement du device</div>
|
|
|
|
<!-- Device Content -->
|
|
<div id="deviceContent" style="display: none;">
|
|
<!-- Device Header -->
|
|
<div class="card">
|
|
<div style="display: flex; justify-content: space-between; align-items: start;">
|
|
<div>
|
|
<h2 id="deviceHostname" style="color: var(--color-success); margin-bottom: 0.5rem;">--</h2>
|
|
<p id="deviceDescription" style="color: var(--text-secondary);">--</p>
|
|
</div>
|
|
<div id="globalScoreContainer"></div>
|
|
</div>
|
|
|
|
<div id="deviceMeta" style="margin-top: 1rem; display: flex; gap: 1.5rem; flex-wrap: wrap;"></div>
|
|
<div id="deviceTags" style="margin-top: 1rem;"></div>
|
|
</div>
|
|
|
|
<!-- Hardware Summary -->
|
|
<div class="card">
|
|
<div class="card-header">💻 Résumé Hardware</div>
|
|
<div class="card-body">
|
|
<div id="hardwareSummary" class="hardware-summary">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Last Benchmark Scores -->
|
|
<div class="card">
|
|
<div class="card-header">📊 Dernier Benchmark</div>
|
|
<div class="card-body">
|
|
<div id="lastBenchmark">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tabs -->
|
|
<div class="tabs-container">
|
|
<div class="tabs">
|
|
<button class="tab active" data-tab="tab-benchmarks">Historique Benchmarks</button>
|
|
<button class="tab" data-tab="tab-documents">Documents</button>
|
|
<button class="tab" data-tab="tab-links">Liens</button>
|
|
</div>
|
|
|
|
<!-- Tab: Benchmarks -->
|
|
<div id="tab-benchmarks" class="tab-content active">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div id="benchmarkHistory">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tab: Documents -->
|
|
<div id="tab-documents" class="tab-content">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<!-- Upload Form -->
|
|
<div class="form-group">
|
|
<label class="form-label">Uploader un document</label>
|
|
<div style="display: flex; gap: 0.5rem; align-items: end;">
|
|
<div style="flex: 1;">
|
|
<input type="file" id="fileInput" class="form-control" accept=".pdf,.jpg,.jpeg,.png,.doc,.docx">
|
|
</div>
|
|
<div style="width: 200px;">
|
|
<select id="docTypeSelect" class="form-control">
|
|
<option value="manual">Manuel</option>
|
|
<option value="warranty">Garantie</option>
|
|
<option value="invoice">Facture</option>
|
|
<option value="photo">Photo</option>
|
|
<option value="other">Autre</option>
|
|
</select>
|
|
</div>
|
|
<button class="btn btn-primary" onclick="uploadDocument()">Upload</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Documents List -->
|
|
<div id="documentsList">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tab: Links -->
|
|
<div id="tab-links" class="tab-content">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<!-- Add Link Form -->
|
|
<div style="display: grid; grid-template-columns: 1fr 2fr auto; gap: 0.5rem; margin-bottom: 1.5rem;">
|
|
<input type="text" id="linkLabel" class="form-control" placeholder="Label (ex: Support HP)">
|
|
<input type="url" id="linkUrl" class="form-control" placeholder="URL (https://...)">
|
|
<button class="btn btn-primary" onclick="addLink()">Ajouter</button>
|
|
</div>
|
|
|
|
<!-- Links List -->
|
|
<div id="linksList">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<!-- Footer -->
|
|
<footer class="footer">
|
|
<p>© 2025 Linux BenchTools - Self-hosted benchmarking tool</p>
|
|
</footer>
|
|
|
|
<!-- Modal for Benchmark Details -->
|
|
<div id="benchmarkModal" class="modal">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3 class="modal-title">Détails du Benchmark</h3>
|
|
<button class="modal-close">×</button>
|
|
</div>
|
|
<div class="modal-body" id="benchmarkModalBody">
|
|
<div class="loading">Chargement...</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn btn-secondary" onclick="BenchUtils.closeModal('benchmarkModal')">Fermer</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Scripts -->
|
|
<script src="js/utils.js"></script>
|
|
<script src="js/api.js"></script>
|
|
<script src="js/device_detail.js"></script>
|
|
</body>
|
|
</html>
|