FEAT: Télémétrie agent — OS, conteneur Docker & réseau (host vs container, IPs, températures) #85
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall#85
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🎯 Contexte
Compléter la photo machine : OS/kernel, hostname réel, infos conteneur (ID, image, limites cgroup), interfaces réseau/IP, température système. Objectif : en cas d'incident sur un site distant, le central doit pouvoir dire « cet agent tourne dans tel conteneur, sur tel OS, avec telle IP, et le host a tel uptime » — sans SSH.
📚 Référence spec / décision
Décision : collecte host + conteneur, remontée distincte.
/etc/os-release(PRETTY_NAME),uname -r(kernel),uname -m(arch) — attention : dans le conteneur, /etc/os-release est celui du conteneur (Debian slim) ; le host est visible si/etc/hostnamemonté ou vialscpu/dmiHOSTNAMEenv,/proc/self/cgroup(ID conteneur),/.dockerenv(indicateur), limites cgroup CPU/mémoire/sys/class/dmi/id/product_name,board_vendor,board_name(si monté/lisible) — nom du PC serveur/proc/net/dev), IP (ip/ifconfig si dispo, sinon parsing), MAC, débit ?/sys/class/thermal/thermal_zone*/temp(CPU/board),sensorssi dispo/proc/uptime(≠ uptime du process actuel)🔍 État actuel (vérifié dans le code)
Agent:Hostname(déjà envoyé au register),Version(agent),PublicIp(via ipify/ifconfig.me au register).SystemMetricsProvidercalculeUptimeSeconds= uptime du process .NET (Process.StartTime), pas de la machine. Aucune info OS/kernel/conteneur/réseau/température.🧩 À faire
HostInfoProvider: OS (os-release), kernel (uname), arch, uptime machine (/proc/uptime), hostnameContainerInfoProvider: détection Docker (/.dockerenv, cgroup), ID conteneur, image (env ou /proc/1/cgroup), limites cgroup CPU/mémoireAgent+ migration (AddAgentHostInventory) : OsName, KernelVersion, Arch, ContainerId, ContainerImage, ContainerCpuLimit, ContainerMemoryLimit, Interfaces (JSON), UptimeMachineSeconds🧪 Critères d'acceptation
make testvert📁 Fichiers concernés
src/Heimdall.Agent/Services/HostInfoProvider.cs, src/Heimdall.Agent/Services/ContainerInfoProvider.cs, src/Heimdall.Agent/Services/NetworkInfoProvider.cs (nouveaux), src/Heimdall.Domain/Entities/Agent.cs, src/Heimdall.Infrastructure/Data/Migrations/, src/Heimdall.Web/Pages/Agents/AgentDetail.razor, tests/
⚠️ Impact
Le conteneur voit l'OS du conteneur, pas du host : c'est une limite Docker normale — à documenter dans l'UI (ne pas faire croire que c'est l'OS du host).
📝 Notes
L'uptime machine est utile pour détecter un reboot du site (≠ redémarrage du conteneur agent).