Commit Graph

42 Commits

Author SHA1 Message Date
Gilles Soulier b93b55d5a8 fix: RAM déborde de la tuile, corbeille alignée à droite
- g-val : largeur fixe 34px → min-width + white-space:nowrap (RAM "3.0Go/5.8Go")
- tile-foot : justify-content:space-between + wrapper tile-foot-info
  pour que la corbeille soit toujours en bas à droite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 20:06:21 +02:00
Gilles Soulier 46209b2965 fix: chmod 644 sur config.toml (DynamicUser ne peut pas lire 640)
Avec DynamicUser=yes, le fichier config.toml créé en root:root 640
n'est pas lisible par l'utilisateur dynamique → exit 101 (panic Rust).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:58:02 +02:00
Gilles Soulier 775d54f07c feat: suppression agent, RAM en Go, métriques par défaut (cpu/mem/disk/smart)
- API DELETE /api/agents/{id} — supprime agent + métriques + config + icône
- Bouton poubelle sur chaque tuile + dialog de confirmation
- RAM : affichage "utilisé/total" en Go (ex: 6.2Go/8.0Go) au lieu du %
- Config agent par défaut : cpu, memory, disk, smart activés (UDP)
- DefaultAgentConfig() dans models pour les nouveaux agents

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:54:10 +02:00
Gilles Soulier e9524858f5 feat: commande d'installation agent dans la config serveur
Nouvelle section "INSTALLATION AGENT" en bas du popup de configuration :
champ lecture seule avec la commande curl pré-remplie (SERVER_IP auto
depuis window.location.hostname) + bouton Copier.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:46:52 +02:00
Gilles Soulier 1a1202abcf fix: valeurs par défaut install.sh (serveur 10.0.0.50, MQTT 10.0.0.3)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:42:39 +02:00
Gilles Soulier c526a6e5ca fix: cross-compilation musl pour release multi-arch
- rumqttc : use-native-tls → use-rustls (supprime dépendance OpenSSL)
- .cargo/config.toml (racine) : linkers musl + CC/AR pour ring aarch64
- deploy/release.sh : passe CC_aarch64_unknown_linux_musl au build
- .gitignore : règle config.toml affinée (exclut cargo configs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:42:08 +02:00
Gilles Soulier 91f4b43b6f feat: scripts de déploiement et release multi-arch
- deploy/install.sh  : installeur curl-able (détecte l'arch, télécharge
  depuis la dernière release Gitea, configure le service systemd)
- deploy/release.sh  : build musl statique x86_64 + aarch64, crée la
  release Gitea et uploade les binaires en asset
- deploy/install-agent.sh : installeur local depuis le binaire compilé
- server/Dockerfile.dev + docker-compose.dev.yml : stack dev Docker

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.1.0
2026-05-22 19:31:53 +02:00
Gilles Soulier 6eed88ac99 feat(server): DASHBOARD_DIR pour servir le dashboard en dev sans Nginx 2026-05-22 17:57:34 +02:00
Gilles Soulier 8a8198a51a feat: métriques serveur dans footer dashboard + notification offline WS 2026-05-22 17:46:55 +02:00
Gilles Soulier 6f79554cce docs: README installation agent, serveur et dashboard 2026-05-22 17:43:22 +02:00
Gilles Soulier c26584e4ae chore: gitignore agent/target et artefacts de build 2026-05-22 17:16:14 +02:00
Gilles Soulier a19705ffda fix(dashboard): XSS escaping, ResizeObserver leak, WS reconnect timer
- Ajout de esc() dans api.js pour échapper les valeurs serveur avant injection innerHTML
- Application de esc() sur hostname, ip et agentId dans grid.js et popups.js
- Fix fuite mémoire ResizeObserver dans showDetail : déconnexion avant recréation (_resizeObs)
- Fix WebSocket reconnect : clearTimeout avant setTimeout pour éviter les timers concurrents (_reconnectTimer)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:46:37 +02:00
Gilles Soulier 555ddc3556 feat(dashboard): app principale WebSocket + orchestration 2026-05-22 12:43:33 +02:00
Gilles Soulier 182d520675 feat(dashboard): popups détail, config agent, SMART, config serveur 2026-05-22 12:43:15 +02:00
Gilles Soulier 8cd18b14b2 feat(dashboard): rendu grille + tuiles dynamiques 2026-05-22 12:41:26 +02:00
Gilles Soulier 5f7cf9f837 feat(dashboard): courbes SVG sparklines 2026-05-22 12:40:55 +02:00
Gilles Soulier 4cfa628036 feat(dashboard): client API REST 2026-05-22 12:40:39 +02:00
Gilles Soulier 96b9885fb3 fix(dashboard): tokens glow, scroll scfg-body, déduplication polices
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:36:54 +02:00
Gilles Soulier 4265b77996 fix(dashboard): retirer user-select:none de .f-mode 2026-05-22 12:34:26 +02:00
Gilles Soulier 9e36f03a5c feat(dashboard): structure HTML + CSS complet
Ajout de la structure de base du dashboard Nanometrics :
- index.html avec header, grille agents, footer et 4 popups (détail, config agent, config serveur, SMART)
- css/app.css avec design system complet (tokens dark/light, composants, animations)
- Polices locales : Inter, JetBrains Mono, Share Tech Mono (woff2)
- Font Awesome 6.5.1 en local (vendor/fontawesome)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:33:02 +02:00
Gilles Soulier 544989542f agent + server go 2026-05-22 12:25:31 +02:00
Gilles Soulier feba5d6b93 fix(server): race WebSocket, SVG refusé, rows.Err, time.NewTicker
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:18:25 +02:00
Gilles Soulier c0c7152b47 feat(server): main.go assemblage complet + Docker + Nginx
- Assemble tous les packages (config, db, handlers, transport, websocket, prometheus)
- Boucle de rétention et détection offline toutes les minutes
- Routage REST /api/agents/, /api/config, /metrics, /ws
- Dockerfile multi-stage CGO_ENABLED=0 (alpine:3.19)
- docker-compose.yml avec service server + dashboard Nginx
- nginx.conf avec proxy WebSocket et fallback SPA

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:13:10 +02:00
Gilles Soulier 262413e2e3 feat(server): handlers REST + transport MQTT
Ajout des handlers HTTP (agents, métriques historique, config agent/serveur, icônes upload/get) et du client MQTT serveur avec subscribe automatique et PushConfig.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:10:34 +02:00
Gilles Soulier f5219f3c68 feat(server): UDP listener, hub WebSocket, Gauges Prometheus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:08:11 +02:00
Gilles Soulier bceee08ce4 feat(server): DB SQLite CRUD agents/metrics/config/icons + tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:06:11 +02:00
Gilles Soulier 2aa0c3be86 feat(server): go.mod + config + modèles de données
Initialise le module Go github.com/user/nanometrics/server avec toutes
les dépendances (SQLite, gorilla/websocket, paho.mqtt, prometheus,
imaging). Ajoute config.go (Load/Default via env vars) et models.go
(AgentMetrics, SmartMetrics, Agent, AgentConfig, ServerConfig, WSMessage).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:03:47 +02:00
Gilles Soulier 331415bbab fix(agent): filtrage CPU/RAM par config + nettoyage commentaires
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 11:49:05 +02:00
Gilles Soulier 12203f453f feat(agent): service systemd DynamicUser + documentation déploiement
- Ajoute deploy/nanometrics-agent.service avec DynamicUser, ProtectSystem,
  PrivateTmp, NoNewPrivileges et RestrictAddressFamilies
- Ajoute deploy/README.md avec procédure d'installation/désinstallation
- Corrige 3 avertissements clippy : iter_kv_map (network.rs) et
  collapsible_match (mqtt.rs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 11:44:13 +02:00
Gilles Soulier 960fd02fd7 feat(agent): boucle principale avec timers 2s/10s/60s 2026-05-22 11:42:00 +02:00
Gilles Soulier a85e5cbee2 feat(agent): transport MQTT birth/LWT/subscribe config
Implémente le transport MQTT complet avec rumqttc 0.24 :
- Birth message (online) au ConnAck + subscribe config topic
- Last Will Testament (offline) configuré au connect
- Réception config agent via topic {base}/{hostname}/config
- publish_metrics helper pour envoyer les métriques
- Transport::Tcp forcé pour broker sans TLS (malgré use-native-tls feature)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 11:39:58 +02:00
Gilles Soulier 5ef0461e65 feat(agent): transport UDP fire-and-forget + test loopback 2026-05-22 11:37:45 +02:00
Gilles Soulier b53456dad8 feat(agent): collecte SMART via smartctl -j 2026-05-22 11:36:51 +02:00
Gilles Soulier b78788b931 feat(agent): métriques disque et température 2026-05-22 11:35:24 +02:00
Gilles Soulier 22212460fc feat(agent): métriques CPU, RAM, réseau, uptime
Implémentation complète des 4 modules sysinfo 0.30 (sans default-features).
- cpu: moyenne sur tous les cœurs via refresh_cpu_usage()
- memory: used/free/total via System
- network: total_received/total_transmitted via Networks
- uptime: System::uptime() statique
10 tests unitaires passent.
2026-05-22 11:34:30 +02:00
Gilles Soulier c473ed9dfa feat(agent): payload AgentMetrics + SmartMetrics + tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 11:32:31 +02:00
Gilles Soulier 91c5f15d4c feat(agent): config struct avec valeurs par défaut MQTT + tests
TDD : 3 tests d'intégration écrits en premier (config_test.rs), puis
implémentation MqttConfig avec default_mqtt_host/port/topic_base pour
garantir des valeurs par défaut même si la section [protocols.mqtt] est
minimale dans le TOML.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 11:30:46 +02:00
Gilles Soulier 3f5c735507 feat(agent): setup Cargo.toml et structure complète
Initialise la structure de l'agent Rust avec tous les modules stub :
config, payload, metrics (cpu/memory/disk/network/uptime/temperature/smart),
transport (udp/mqtt). Corrige les features sysinfo 0.30 (pas de feature
disk/networks séparées). Compile sans erreurs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:21:34 +02:00
Gilles Soulier 395e006014 1 2026-05-22 08:19:27 +02:00
Gilles Soulier 5ea3436438 1 2026-05-22 08:18:42 +02:00
Gilles Soulier a0f47bf966 feat: add plans, design system, CONSIGNE and brainstorm assets
Ajoute les trois plans d'implémentation (agent Rust, serveur Go, dashboard),
les consignes de design, les fichiers de brainstorming et le .gitignore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:13:53 +02:00
Gilles Soulier 8e44b2f335 Initial commit: CLAUDE.md + spec de design Nanometrics
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 07:57:09 +02:00