feat: interface admin complète pour gestion système (Phase 2.3)

Implémentation complète de l'interface d'administration web :

Backend (server/api/admin.js) :
- Endpoints CRUD pour gestion des groupes (GET/POST/PUT/DELETE /admin/groups)
- Gestion utilisateurs connectés en temps réel (GET/DELETE /admin/users)
- Monitoring statistiques système (GET /admin/stats)
- Affichage logs serveur avec filtrage (GET /admin/logs)
- Configuration audio globale (PUT /admin/config/audio)
- Système de tracking des connexions/déconnexions
- Export fonctions registerUser, unregisterUser, addLog

Frontend (client/src/Admin.jsx + Admin.css) :
- Interface admin complète avec 4 onglets (Groupes, Utilisateurs, Stats, Logs)
- Gestion groupes : création, modification, suppression avec formulaires
- Gestion canaux audio par groupe (inputs/outputs)
- Liste utilisateurs connectés avec déconnexion forcée
- Dashboard statistiques temps réel (connexions, uptime, mémoire)
- Viewer logs avec code couleur par niveau (debug/info/warn/error)
- Rafraîchissement auto toutes les 3s
- Design responsive et mode sombre

Intégration système :
- Routes admin montées sous /admin dans index.js
- Enregistrement automatique des utilisateurs lors de la génération de token
- Logs serveur centralisés dans le système admin
- Routing simple frontend pour /admin (main.jsx)

🎛️ Interface accessible via https://localhost:5173/admin

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-05-24 20:13:20 +02:00
parent 7e42164c5c
commit 637cc3e3a7
6 changed files with 1538 additions and 10 deletions
+12
View File
@@ -9,6 +9,7 @@ import { dirname, join } from 'path';
import { networkInterfaces } from 'os';
import YAML from 'yaml';
import { AccessToken } from 'livekit-server-sdk';
import adminRouter, { registerUser, addLog } from './api/admin.js';
const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -83,6 +84,9 @@ function log(level, ...args) {
if (msgLevel >= configLevel) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] [${level.toUpperCase()}]`, ...args);
// Ajouter au système de logs admin
addLog(level, args.join(' '));
}
}
@@ -174,6 +178,11 @@ app.use((req, res, next) => {
next();
});
// ========== Routes Admin ==========
// Monter les routes admin sous /admin
app.use('/admin', adminRouter);
// ========== Routes API ==========
/**
@@ -269,6 +278,9 @@ app.post('/token', async (req, res) => {
log('info', `Token généré: ${username}${groupId}`);
// Enregistrer l'utilisateur dans le système admin
registerUser(participantIdentity, username, groupId, roomName);
res.json({
token,
url: LIVEKIT_URL,