FEAT: Ordonnanceur de jobs d'analyse — routage par capacité, affinité site, priorités, timeouts #74

Closed
opened 2026-08-12 09:46:39 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

Le central reçoit les demandes d'analyse (job soumis par un agent capteur) et doit choisir quel agent GPU exécute. Stratégie retenue : (1) affinité site d'abord — un GPU du même site si disponible (latence faible, bande passante locale) ; (2) sinon site distant le moins chargé ; (3) priorité de file — analyse de sécurité (mouvement/objet) avant analyse périodique.

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

Aucun ordonnanceur : l'assignation caméras→agents est statique (CameraAssignmentService : RoundRobin/GPU/Latest + failover Hangfire). Pas de notion de job d'analyse ni de file.

🧩 À faire

  • Modèle de données jobs (JobId, type, priorité, état, exécutant, timestamps) — table dédiée ou événements
  • Service IAnalysisScheduler : sélection de l'exécutant selon la stratégie (capacités + affinité site + charge)
  • Files de priorité (ou priorité MassTransit) : sécurité > périodique
  • Timeout + mécanisme de ré-essai (réintégration du job après échec) et dead-letter après N tentatives
  • Métriques : temps d'attente en file, temps d'exécution, taux d'échec, répartition par exécutant
  • Tests : stratégie d'affinité (GPU même site préféré), charge, priorités

🧪 Critères d'acceptation

  • Un job d'un site S est routé vers un agent GPU du site S s'il en existe un d'online et capable
  • Sinon, routé vers l'agent GPU online le moins chargé (toutes capacités égales par ailleurs)
  • Un job de sécurité passe avant un job périodique dans la file
  • Un job qui dépasse le timeout est retenté puis dead-letté — visible dans l'UI/métriques
  • make test vert

📁 Fichiers concernés

src/Heimdall.Application/Services/IAnalysisScheduler.cs, src/Heimdall.Application/Jobs/ (nouveau), src/Heimdall.Infrastructure/Services/AnalysisScheduler.cs (nouveau), src/Heimdall.Domain/Entities/ (état job), tests/Heimdall.Application.Tests/

⚠️ Impact

Ajoute de la logique métier au central — à couvrir par tests de stratégie. Ne modifie pas l'existant.

📝 Notes

Consomme les capacités du ticket heartbeat. N'implique pas de changement côté agent hors mode remote.

## 🎯 Contexte Le central reçoit les demandes d'analyse (job soumis par un agent capteur) et doit choisir **quel agent GPU exécute**. Stratégie retenue : (1) **affinité site d'abord** — un GPU du même site si disponible (latence faible, bande passante locale) ; (2) sinon **site distant le moins chargé** ; (3) **priorité de file** — analyse de sécurité (mouvement/objet) avant analyse périodique. ## 🔍 État actuel (vérifié dans le code) Aucun ordonnanceur : l'assignation caméras→agents est statique (CameraAssignmentService : RoundRobin/GPU/Latest + failover Hangfire). Pas de notion de job d'analyse ni de file. ## 🧩 À faire - [ ] Modèle de données jobs (JobId, type, priorité, état, exécutant, timestamps) — table dédiée ou événements - [ ] Service `IAnalysisScheduler` : sélection de l'exécutant selon la stratégie (capacités + affinité site + charge) - [ ] Files de priorité (ou priorité MassTransit) : sécurité > périodique - [ ] Timeout + mécanisme de ré-essai (réintégration du job après échec) et dead-letter après N tentatives - [ ] Métriques : temps d'attente en file, temps d'exécution, taux d'échec, répartition par exécutant - [ ] Tests : stratégie d'affinité (GPU même site préféré), charge, priorités ## 🧪 Critères d'acceptation - [ ] Un job d'un site S est routé vers un agent GPU du site S s'il en existe un d'online et capable - [ ] Sinon, routé vers l'agent GPU online le moins chargé (toutes capacités égales par ailleurs) - [ ] Un job de sécurité passe avant un job périodique dans la file - [ ] Un job qui dépasse le timeout est retenté puis dead-letté — visible dans l'UI/métriques - [ ] `make test` vert ## 📁 Fichiers concernés src/Heimdall.Application/Services/IAnalysisScheduler.cs, src/Heimdall.Application/Jobs/ (nouveau), src/Heimdall.Infrastructure/Services/AnalysisScheduler.cs (nouveau), src/Heimdall.Domain/Entities/ (état job), tests/Heimdall.Application.Tests/ ## ⚠️ Impact Ajoute de la logique métier au central — à couvrir par tests de stratégie. Ne modifie pas l'existant. ## 📝 Notes Consomme les capacités du ticket heartbeat. N'implique pas de changement côté agent hors mode remote.
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#74
No description provided.