FEAT: Télémétrie agent — inventaire mémoire & disque (RAM machine, swap, capacité disques, type) #83
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#83
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
Aujourd'hui
MemoryUsageBytes= WorkingSet64 du process .NET (pas la RAM de la machine !) etDiskUsagePercentne regarde que la racine du conteneur. Pour piloter des agents (et savoir si un site peut prendre plus de caméras/GPU), il faut la RAM machine totale/utilisée/swap et les disques réels avec capacité et type.📚 Référence spec / décision
Décision : deux niveaux de métriques — machine (host) et process/conteneur — remontés distinctement.
/proc/meminfo→ MemTotal, MemAvailable, MemFree, SwapTotal, SwapFree, Buffers/Cached (Linux) ; sysctlhw.memsize+vm.swapusage(macOS)process/sys/fs/cgroup/memory.maxv2,memory.current) exposées commeContainerMemoryLimit— le conteneur peut avoir 4 Go alors que le host en a 64df//proc/mounts→ par point de montage : capacité, libre, usage %, filesystem, type SSD/HDD/NVMe (via/sys/block/*/queue/rotation+ modèle via/sys/block/*/device/model)🔍 État actuel (vérifié dans le code)
SystemMetricsProvider:MemoryUsageBytes = Process.GetCurrentProcess().WorkingSet64(process),GetTotalMemorylit MemTotal (host),GetDiskUsage= DriveInfo deAppContext.BaseDirectory(racine du conteneur).Agent:MemoryMb(long, mis une fois via UpdateCapabilities) + MemoryUsageBytes live. Pas de swap, pas de disques multiples, pas de type SSD/HDD.🧩 À faire
SystemMetricsProvider: séparer host vs process (recordSystemMetricsenrichi : MemTotalBytes, MemAvailableBytes, SwapTotalBytes, SwapFreeBytes, ProcessMemoryBytes, ContainerMemoryLimitBytes?)DiskInventoryProvider— énumérer les montages (/proc/mounts), capacité/libre/type (SSD/HDD viaqueue/rotation), filesystemContainerMemoryLimitBytesAgent+ migration (AddAgentMemoryDiskInventory) : MemTotalBytes, SwapTotalBytes, liste disques (JSON ou table liée)🧪 Critères d'acceptation
make testvert📁 Fichiers concernés
src/Heimdall.Agent/Services/SystemMetricsProvider.cs, src/Heimdall.Agent/Services/DiskInventoryProvider.cs (nouveau), src/Heimdall.Domain/Entities/Agent.cs, src/Heimdall.Infrastructure/Data/Migrations/, src/Heimdall.Web/Pages/Agents/AgentDetail.razor, tests/
⚠️ Impact
⚠️
MemoryUsageByteschange de sens (process → machine) : mettre à jour les vues UI/jauge existantes qui l'affichent (Dashboard, AllAgents, MonitoringHub).📝 Notes
Corrige une ambiguïté existante : la « RAM utilisée » affichée est aujourd'hui celle du process, pas de la machine.
Maquette
Ce ticket est couvert par la maquette du ticket #86 — UI Admin — page inventaire matériel agent (pièce maîtresse du lot télémétrie) : la section « Inventaire » de #86 maquette l'affichage des métriques et specs correspondantes (voir #86, section Maquette).
Maquette : couverte par le ticket #86 (inventaire matériel agent) — section ## Maquette ajoutée au corps.