FEAT: Stockage + API logs agents côté central (entité AgentLogEntry, POST batch, GET paginé) #51
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#51
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
Le central doit recevoir, persister et exposer les logs remontés par les agents (voir ticket FEAT « Remontée des logs agents »). Aujourd'hui il ne connaît que les métriques heartbeat (Agent) et l'AuditLog des actions admin — aucune donnée de logs d'agent.
Référence spec
Complète le pattern AuditLog (P0) ; cohérent avec l'étape 6 (observabilité). Règle P1 « Secrets dans logs — sanitized » appliquée côté agent à la source.
État actuel
AgentsController:register,heartbeat,discovery,GET {id}— pas d'endpoint logsAgent(métriques live),AuditLog— pas d'entité de log d'agentJobSetup.ConfigureRecurringJobs: heartbeat-monitor, agent-failover, daily-digest, weekly-digest — pas de cleanup logsÀ faire
AgentLogEntrydansHeimdall.Domain/Entities/:Id(Guid),AgentId(FK),TimestampUtc,Level(enum : Trace/Debug/Information/Warning/Error/Critical),Message,Exception(nullable),Source(nullable, ex.AgentRegistrationService)AgentLogEntryConfiguration) : tableAgentLogEntries, index composite (AgentId,TimestampUtc) pour les lectures par agent et la purge par âgeAddAgentLogEntriesSubmitAgentLogsCommand(API Key) — insert batch, validation (taille max du batch, niveau valide, horodatages bornés), rate limitApiexistant (200 req/min)GetAgentLogsQuery(JWT, policySiteRead) — pagination page/pageSize, filtres :level,from,to,search(message), tri desc par TimestampUtcAgentsController:POST /api/agents/{id}/logs(API Key) +GET /api/agents/{id}/logs(JWT)Critères d'acceptation
POST /api/agents/{id}/logsavec API Key insère les entrées (agent du même site uniquement)GET /api/agents/{id}/logs(JWT) retourne les entrées paginées, filtrées par niveau/périodetests/Heimdall.Integration.TestsFichiers concernés
src/Heimdall.Domain/Entities/AgentLogEntry.cs(nouveau)src/Heimdall.Infrastructure/Data/Configurations/AgentLogEntryConfiguration.cs(nouveau)src/Heimdall.Application/AgentLogs/Commands/SubmitAgentLogsCommand.cs(nouveau)src/Heimdall.Application/AgentLogs/Queries/GetAgentLogsQuery.cs(nouveau)src/Heimdall.Web/Controllers/AgentsController.cssrc/Heimdall.Infrastructure/Migrations/Clôturé par le commit
6c5d455(feat logs agents). Tests : 985 verts (Domain 131, Application 354, Infrastructure 163, Agent 120, Web 217).