FEAT: Statut caméra en temps réel piloté par la capture agent #58

Closed
opened 2026-08-11 21:36:59 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

Quand l'agent démarre ou échoue une capture FFmpeg, le statut de la caméra côté Central ne bouge pas (reste Disabled/Unknown). L'opérateur ne voit pas si le flux est vivant.

📚 Référence spec (MASTER_SPECIFICATION.md v2.0)

Phase 10 — statuts caméra (Online/Offline/Error/Disabled) ; Phase 15 — l'agent capture chaque caméra assignée.

🔍 État actuel (vérifié dans le code)

CameraStreamService connaît ses sessions actives (ActiveCameraIds, IsStreamActive) mais ne le reporte nulle part. Le heartbeat agent remonte les métriques système, pas le statut par caméra. MonitoringHub.NotifyCameraStatusChanged existe côté central mais rien ne l'appelle depuis l'agent. Aucun endpoint API de statut caméra appelable par l'agent (le champ Status de Camera n'est mis à jour que par UpdateCameraCommand, UI/API admin).

🧩 À faire

  • Exposer un endpoint API au Central pour que l'agent reporte le statut d'une caméra (ou réutiliser le hub SignalR existant) — auth API Key, vérif que la caméra appartient au site de l'agent
  • Dans SnapshotPipelineService, après chaque sync, reporter : capture démarrée → Online ; FFmpeg en échec → Error ; caméra retirée/disabled → Disabled
  • Périodicité raisonnable (pas à chaque heartbeat), état déterministe
  • Tests : handler de statut côté central + report côté agent (fake central)

✅ Critères d'acceptation

  • Caméra avec capture active = Online dans l'UI
  • FFmpeg en échec = Error (visible dans l'UI)
  • Statut à jour sans latence > 1 min

📁 Fichiers concernés

src/Heimdall.Agent/Services/SnapshotPipelineService.cs, src/Heimdall.Web/Controllers/CamerasController.cs (ou Hubs), src/Heimdall.Application/Cameras/

## 🎯 Contexte Quand l'agent démarre ou échoue une capture FFmpeg, le statut de la caméra côté Central ne bouge pas (reste Disabled/Unknown). L'opérateur ne voit pas si le flux est vivant. ## 📚 Référence spec (MASTER_SPECIFICATION.md v2.0) **Phase 10** — statuts caméra (Online/Offline/Error/Disabled) ; **Phase 15** — l'agent capture chaque caméra assignée. ## 🔍 État actuel (vérifié dans le code) CameraStreamService connaît ses sessions actives (ActiveCameraIds, IsStreamActive) mais ne le reporte nulle part. Le heartbeat agent remonte les métriques système, pas le statut par caméra. MonitoringHub.NotifyCameraStatusChanged existe côté central mais rien ne l'appelle depuis l'agent. Aucun endpoint API de statut caméra appelable par l'agent (le champ Status de Camera n'est mis à jour que par UpdateCameraCommand, UI/API admin). ## 🧩 À faire - [ ] Exposer un endpoint API au Central pour que l'agent reporte le statut d'une caméra (ou réutiliser le hub SignalR existant) — auth API Key, vérif que la caméra appartient au site de l'agent - [ ] Dans SnapshotPipelineService, après chaque sync, reporter : capture démarrée → Online ; FFmpeg en échec → Error ; caméra retirée/disabled → Disabled - [ ] Périodicité raisonnable (pas à chaque heartbeat), état déterministe - [ ] Tests : handler de statut côté central + report côté agent (fake central) ## ✅ Critères d'acceptation - [ ] Caméra avec capture active = Online dans l'UI - [ ] FFmpeg en échec = Error (visible dans l'UI) - [ ] Statut à jour sans latence > 1 min ## 📁 Fichiers concernés src/Heimdall.Agent/Services/SnapshotPipelineService.cs, src/Heimdall.Web/Controllers/CamerasController.cs (ou Hubs), src/Heimdall.Application/Cameras/
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#58
No description provided.