vault backup: 2026-08-01 17:07:09
This commit is contained in:
@@ -1,86 +1,85 @@
|
|||||||
|
|
||||||
|
|
||||||
## Responsable
|
## Responsable
|
||||||
|
|
||||||
A confirmer.
|
A confirmer.
|
||||||
|
|
||||||
Responsables pressentis:
|
Responsables pressentis:
|
||||||
|
|
||||||
- Sponsor: Amadou Ndiaye
|
- Sponsor: CTO / Direction technique
|
||||||
- Responsable produit/metier: Julie Bessière
|
- Responsable produit/métier: Direction production / édition numerique
|
||||||
- Responsable execution: Joel Ymele
|
- Responsable execution: Manager équipe web / Tech lead
|
||||||
- Equipe contributrice: SN, infra, edimestres, PCI, fournisseurs sites
|
- Équipe contributrice: developpeurs web, infra, édimestres, PCI, fournisseurs sites
|
||||||
|
|
||||||
## Resultat attendu
|
## Resultat attendu
|
||||||
|
|
||||||
Quand ce projet reussit, la publication des donnees issues de Louise/Mogador vers les sites TFO, IDELLO, ONFR et lineaire devient plus fiable, plus observable et plus rapide.
|
Quand ce projet réussit, la publication des données issues de Louise/Mogador vers les sites TFO, IDELLO, ONFR et linéaire devient plus fiable, plus observable et plus rapide.
|
||||||
|
|
||||||
Concretement:
|
Concretement:
|
||||||
|
|
||||||
- on ne depend plus de trois serveurs separes qui executent chacun une copie de la meme synchro;
|
- on ne depend plus de trois serveurs séparés qui executent chacun une copie de la même synchro;
|
||||||
- les sites consomment des fichiers JSON publics, versionnes et atomiques;
|
- les sites consomment des fichiers JSON publics, versionnés et atomiques;
|
||||||
- les erreurs sont detectees avant les plaintes de production;
|
- les erreurs sont détectées avant les plaintes de production;
|
||||||
- les corrections d'urgence sont possibles via une interface interne controlee;
|
- les corrections d'urgence sont possibles via une interface interne contrôlee;
|
||||||
- l'etat des videos JWP est integre proprement sans demander a PCI de connaitre JWP;
|
- l'état des vidéos JWP est intégré proprement sans demander à PCI de connaitre JWP;
|
||||||
- Directus peut etre retire ou reduit si son role n'est plus necessaire;
|
- Directus peut être retiré ou reduit si son rôle n'est plus nécessaire;
|
||||||
- l'architecture reste compatible avec une future API Louise/Mogador v2 fournie par PCI.
|
- l'architecture reste compatible avec une future API Louise/Mogador v2 fournie par PCI.
|
||||||
|
|
||||||
## Valeur d'affaires
|
## Valeur d'affaires
|
||||||
|
|
||||||
Le systeme actuel fonctionne, mais il est fragile, lent a operer et difficile a expliquer. Il cree un risque direct sur la mise en ligne des emissions, particulierement quand une programmation doit apparaitre a une heure precise.
|
Le système actuel fonctionne, mais il est fragile, lent a operer et difficile a expliquer. Il crée un risque direct sur la mise en ligne des emissions, particulierement quand une programmation doit apparaitre a une heure précise.
|
||||||
|
|
||||||
Ce projet vise a reduire:
|
Ce projet vise a réduire:
|
||||||
|
|
||||||
- les incidents de publication;
|
- les incidents de publication;
|
||||||
- les retards de mise en ligne;
|
- les retards de mise en ligne;
|
||||||
- les interventions manuelles non tracees;
|
- les interventions manuelles non tracees;
|
||||||
- la dependance operationnelle a Directus pour des usages qu'il ne sert pas bien;
|
- la dépendance opérationnelle à Directus pour des usages qu'il ne sert pas bien;
|
||||||
- la complexite des relations collection/saison/episode;
|
- la complexite des relations collection/saison/épisode;
|
||||||
- la duplication entre TFO, IDELLO, ONFR et lineaire;
|
- la duplication entre TFO, IDELLO, ONFR et linéaire;
|
||||||
- la dependance a une API Mogador legacy lente ou limitee.
|
- la dépendance à une API Mogador legacy lente ou limitée.
|
||||||
|
|
||||||
La valeur principale est operationnelle: publier de facon previsible, auditable et recuperable.
|
La valeur principale est opérationnelle: publier de façon previsible, auditable et reçuperable.
|
||||||
|
|
||||||
La valeur secondaire est strategique: preparer une transition future vers une API Louise/Mogador v2 ou des evenements PCI sans devoir recommencer l'architecture.
|
La valeur secondaire est strategique: preparer une transition future vers une API Louise/Mogador v2 ou des événements PCI sans devoir recommencer l'architecture.
|
||||||
|
|
||||||
## Definition de termine
|
## Definition de termine
|
||||||
|
|
||||||
- [ ] Le `Content Publication Engine` genere les JSON publics pour au moins une plateforme pilote.
|
- [ ] Le `Content Publication Engine` génère les JSON publics pour au moins une plateforme pilote.
|
||||||
- [ ] Les JSON sont publies en runs immuables avec un `manifest.json` actif.
|
- [ ] Les JSON sont publiés en runs immuables avec un `manifest.json` actif.
|
||||||
- [ ] Le systeme supporte les produits, collections, programmations, `today`, `latest`, recherche/index et programmations futures jusqu'a J+10.
|
- [ ] Le système supporte les produits, collections, programmations, `today`, `latest`, recherche/index et programmations futures jusqu'à J+10.
|
||||||
- [ ] Le `Media Pipeline` alimente une table `media_assets` avec l'etat JWP.
|
- [ ] Le `Media Pipeline` alimente une table `media_assets` avec l'état JWP.
|
||||||
- [ ] Le contrat `publication_jobs` permet de republier un produit, une collection, un horaire ou une plateforme.
|
- [ ] Le contrat `publication_jobs` permet de republier un produit, une collection, un horaire ou une plateforme.
|
||||||
- [ ] Les corrections d'urgence passent par une `Publication Console` interne avec authentification, roles et audit.
|
- [ ] Les corrections d'urgence passent par une `Publication Console` interne avec authentification, rôles et audit.
|
||||||
- [ ] Un rapport compare ce qui est attendu selon Louise/Mogador et ce qui a ete publie.
|
- [ ] Un rapport compare ce qui est attendu selon Louise/Mogador et ce qui a été publié.
|
||||||
- [ ] Des alertes sont envoyees en cas d'anomalie critique.
|
- [ ] Des alertes sont envoyees en cas d'anomalie critique.
|
||||||
- [ ] Un rollback peut etre fait en repointant le `manifest.json` vers un run precedent.
|
- [ ] Un rollback peut être fait en repointant le `manifest.json` vers un run précédent.
|
||||||
- [ ] Une documentation existe pour les JSON, les schemas, les operations, les alertes et le rollback.
|
- [ ] Une documentation existe pour les JSON, les schemas, les opérations, les alertes et le rollback.
|
||||||
- [ ] Un pilote est valide avec production, edition, infra et au moins un fournisseur/site consommateur.
|
- [ ] Un pilote est valide avec production, édition, infra et au moins un fournisseur/site consommateur.
|
||||||
|
|
||||||
## Portee
|
## Portee
|
||||||
|
|
||||||
### Inclus
|
### Inclus
|
||||||
|
|
||||||
- Analyse et formalisation des regles de publication actuelles.
|
- Analyse et formalisation des règles de publication actuelles.
|
||||||
- Creation du `Content Publication Engine`.
|
- Creation du `Content Publication Engine`.
|
||||||
- Generation des JSON publics versionnes.
|
- Generation des JSON publics versionnés.
|
||||||
- Gestion des runs et retention.
|
- Gestion des runs et retention.
|
||||||
- Generation du `manifest.json`.
|
- Generation du `manifest.json`.
|
||||||
- Support des programmations futures jusqu'a J+10.
|
- Support des programmations futures jusqu'à J+10.
|
||||||
- Creation du contrat `media_assets`.
|
- Creation du contrat `media_assets`.
|
||||||
- Creation du contrat `publication_jobs`.
|
- Creation du contrat `publication_jobs`.
|
||||||
- Integration avec le `Media Pipeline` AdonisJS/JWP.
|
- Integration avec le `Media Pipeline` AdonisJS/JWP.
|
||||||
- Mini CMS interne, ou `Publication Console`, pour les corrections d'urgence.
|
- Mini CMS interne, ou `Publication Console`, pour les corrections d'urgence.
|
||||||
- Authentification et roles pour edimestres/admins internes.
|
- Authentification et rôles pour édimestres/admins internes.
|
||||||
- Rapports de validation attendu vs publie.
|
- Rapports de validation attendu vs publie.
|
||||||
- Alertes operationnelles.
|
- Alertes opérationnelles.
|
||||||
- Documentation technique et operationnelle.
|
- Documentation technique et opérationnelle.
|
||||||
- Pilote sur une plateforme.
|
- Pilote sur une plateforme.
|
||||||
- Strategie de migration progressive depuis Directus.
|
- Strategie de migration progressive depuis Directus.
|
||||||
|
|
||||||
### Exclu
|
### Exclu
|
||||||
|
|
||||||
- Refonte complete de Louise.
|
- Refonte complète de Louise.
|
||||||
- Suppression immediate de Mogador Toolkit.
|
- Suppression immediate de Mogador Toolkit.
|
||||||
- Livraison d'une API Louise/Mogador v2 par PCI.
|
- Livraison d'une API Louise/Mogador v2 par PCI.
|
||||||
- Publication directe depuis Louise vers les sites.
|
- Publication directe depuis Louise vers les sites.
|
||||||
@@ -94,7 +93,7 @@ La valeur secondaire est strategique: preparer une transition future vers une AP
|
|||||||
|
|
||||||
|Jalon|Cible|Statut|
|
|Jalon|Cible|Statut|
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|Charte validee|A definir|Brouillon|
|
|Charte validée|À définir|Brouillon|
|
||||||
|Contrats `media_assets` et `publication_jobs` valides|Semaine 1|A faire|
|
|Contrats `media_assets` et `publication_jobs` valides|Semaine 1|A faire|
|
||||||
|Prototype JSON local valide|Semaines 2-3|A faire|
|
|Prototype JSON local valide|Semaines 2-3|A faire|
|
||||||
|Integration Media Pipeline minimale|Semaines 3-4|A faire|
|
|Integration Media Pipeline minimale|Semaines 3-4|A faire|
|
||||||
@@ -102,62 +101,62 @@ La valeur secondaire est strategique: preparer une transition future vers une AP
|
|||||||
|Rapports et alertes pilote|Semaines 6-7|A faire|
|
|Rapports et alertes pilote|Semaines 6-7|A faire|
|
||||||
|Publication bucket/CDN de test|Semaines 7-8|A faire|
|
|Publication bucket/CDN de test|Semaines 7-8|A faire|
|
||||||
|Publication Console minimale|Semaines 8-10|A faire|
|
|Publication Console minimale|Semaines 8-10|A faire|
|
||||||
|Validation production/edition/infra|Semaines 10-11|A faire|
|
|Validation production/édition/infra|Semaines 10-11|A faire|
|
||||||
|Decision de generalisation|Semaine 12|A faire|
|
|Decision de generalisation|Semaine 12|A faire|
|
||||||
|
|
||||||
## Dependances
|
## Dependances
|
||||||
|
|
||||||
|Dependance|Responsable|Requis pour|Statut|
|
|Dependance|Responsable|Requis pour|Statut|
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|Acces export Louise/Mogador actuel|Interne / Infra|Snapshot source|Existant|
|
|Accès export Louise/Mogador actuel|Interne / Infra|Snapshot source|Existant|
|
||||||
|Mogador Toolkit actuel|Interne / PCI|Lecture officielle initiale|Existant, fragile|
|
|Mogador Toolkit actuel|Interne / PCI|Lecture officielle initiale|Existant, fragile|
|
||||||
|App AdonisJS/JWP|Tech lead / equipe web|Etat media JWP|A integrer|
|
|App AdonisJS/JWP|Tech lead / équipe web|Etat media JWP|A intégrer|
|
||||||
|Acces JWP|Equipe web / Infra|Media Pipeline|A confirmer|
|
|Accès JWP|Équipe web / Infra|Media Pipeline|A confirmer|
|
||||||
|Bucket/CDN|Infra|Publication JSON|A definir|
|
|Bucket/CDN|Infra|Publication JSON|À définir|
|
||||||
|Auth interne|Infra / equipe web|Publication Console|A definir|
|
|Auth interne|Infra / équipe web|Publication Console|À définir|
|
||||||
|Better Stack / alerting|Infra / equipe web|Alertes|En cours / a confirmer|
|
|Better Stack / alerting|Infra / équipe web|Alertes|En cours / a confirmer|
|
||||||
|Validation production|Production|Definition des anomalies critiques|A planifier|
|
|Validation production|Production|Definition des anomalies critiques|A planifier|
|
||||||
|Validation edimestres|Edition numerique|Corrections d'urgence|A planifier|
|
|Validation édimestres|Edition numerique|Corrections d'urgence|A planifier|
|
||||||
|Decision sur Directus|CTO / equipe web|Strategie migration|A prendre|
|
|Decision sur Directus|CTO / équipe web|Strategie migration|A prendre|
|
||||||
|Discussion PCI API v2|CTO / PCI|Evolution long terme|Separe|
|
|Discussion PCI API v2|CTO / PCI|Evolution long terme|Separe|
|
||||||
|
|
||||||
## Risques
|
## Risques
|
||||||
|
|
||||||
|Risque|Probabilite|Impact|Reponse|Responsable|
|
|Risque|Probabilite|Impact|Reponse|Responsable|
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
|Le projet devient trop large et tente de remplacer Directus, Mogador, JWP et les sites en meme temps|Elevee|Eleve|Decouper en pilote, garder API PCI comme chantier separe, livrer par increments|Sponsor / Tech lead|
|
|Le projet devient trop large et tente de remplacer Directus, Mogador, JWP et les sites en même temps|Élevée|Eleve|Decouper en pilote, garder API PCI comme chantier séparé, livrer par increments|Sponsor / Tech lead|
|
||||||
|L'equipe manque de disponibilite pour un projet d'architecture|Elevee|Eleve|Limiter le MVP, choisir une plateforme pilote, documenter les arbitrages|Manager / Tech lead|
|
|L'équipe manque de disponibilite pour un projet d'architecture|Élevée|Eleve|Limiter le MVP, choisir une plateforme pilote, documenter les arbitrages|Manager / Tech lead|
|
||||||
|Les regles metier actuelles sont implicites dans le vieux code|Elevee|Eleve|Extraire les regles, valider avec production, ajouter rapports de comparaison|Equipe web|
|
|Les règles métier actuelles sont implicites dans le vieux code|Élevée|Eleve|Extraire les règles, valider avec production, ajoutér rapports de comparaison|Équipe web|
|
||||||
|Les sites consommateurs ont des besoins differents ou non documentes|Moyenne|Eleve|Publier JSON schemas, faire valider les formats avec chaque fournisseur/site|Manager / fournisseurs sites|
|
|Les sites consommateurs ont des besoins differents ou non documentes|Moyenne|Eleve|Publier JSON schemas, faire valider les formats avec chaque fournisseur/site|Manager / fournisseurs sites|
|
||||||
|La Publication Console recree un mini Directus trop complexe|Moyenne|Eleve|Limiter aux overrides d'urgence, audit, preview et publication; ne pas refaire un CMS complet|Product / Tech lead|
|
|La Publication Console recrée un mini Directus trop complexe|Moyenne|Eleve|Limiter aux overrides d'urgence, audit, preview et publication; ne pas refaire un CMS complet|Product / Tech lead|
|
||||||
|Les corrections d'urgence entrent en conflit avec Louise au prochain export|Elevee|Eleve|Definir precedence, expiration d'override, audit et rapport d'ecart|Equipe web / edition|
|
|Les corrections d'urgence entrent en conflit avec Louise au prochain export|Élevée|Eleve|Definir precedence, expiration d'override, audit et rapport d'ecart|Équipe web / édition|
|
||||||
|Le `manifest.json` est cache trop longtemps|Moyenne|Eleve|TTL court sur manifest, runs immuables caches longuement, procedure de purge CDN|Infra / equipe web|
|
|Le `manifest.json` est cache trop longtemps|Moyenne|Eleve|TTL court sur manifest, runs immuables cachés longuement, procedure de purge CDN|Infra / équipe web|
|
||||||
|La publication atomique est mal implementee|Moyenne|Eleve|Publier d'abord un run complet, valider, puis seulement changer le manifest|Equipe web|
|
|La publication atomique est mal implementee|Moyenne|Eleve|Publier d'abord un run complet, valider, puis seulement changer le manifest|Équipe web|
|
||||||
|La gestion des programmations futures J+10 augmente le volume et la complexite|Moyenne|Moyen|Limiter explicitement a J+10, mesurer performance, eviter requetes par episode|Equipe web|
|
|La gestion des programmations futures J+10 augmente le volume et la complexite|Moyenne|Moyen|Limiter explicitement a J+10, mesurer performance, éviter requetes par épisode|Équipe web|
|
||||||
|Le Media Pipeline et le Sync Engine se couplent trop fortement|Moyenne|Eleve|Passer uniquement par `media_assets` et `publication_jobs`, eviter les appels directs obligatoires|Tech lead|
|
|Le Media Pipeline et le Sync Engine se couplent trop fortement|Moyenne|Eleve|Passer uniquement par `media_assets` et `publication_jobs`, éviter les appels directs obligatoires|Tech lead|
|
||||||
|JWP est lent ou indisponible pendant une publication|Moyenne|Eleve|Publier statut media explicite, alerter, retry, ne pas bloquer tout le run si un media est en erreur|Equipe web|
|
|JWP est lent ou indisponible pendant une publication|Moyenne|Eleve|Publier statut media explicite, alerter, retry, ne pas bloquer tout le run si un media est en erreur|Équipe web|
|
||||||
|Le systeme publie un JSON incomplet mais valide techniquement|Moyenne|Eleve|Ajouter validations metier, rapports attendu vs publie et seuils bloquants|Equipe web / production|
|
|Le système publie un JSON incomplet mais valide techniquement|Moyenne|Eleve|Ajouter validations métier, rapports attendu vs publie et seuils bloquants|Équipe web / production|
|
||||||
|L'absence d'API PCI v2 maintient certaines lenteurs|Elevee|Moyen|Concevoir le `Source Reader` remplacable et optimiser avec snapshots/diffs internes|Equipe web|
|
|L'absence d'API PCI v2 maintient certaines lenteurs|Élevée|Moyen|Concevoir le `Source Reader` remplacable et optimiser avec snapshots/diffs internes|Équipe web|
|
||||||
|PCI ne livre pas d'events/webhooks a court terme|Elevee|Moyen|Ne pas en faire une dependance du MVP; garder le polling 3h et overrides internes|Sponsor|
|
|PCI ne livre pas d'events/webhooks à court terme|Élevée|Moyen|Ne pas en faire une dépendance du MVP; garder le polling 3h et overrides internes|Sponsor|
|
||||||
|Infra refuse l'exposition de l'app interne|Moyenne|Moyen|Exposer seulement les JSON via bucket/CDN; garder la console sur reseau interne|Infra|
|
|Infra refuse l'exposition de l'app interne|Moyenne|Moyen|Exposer seulement les JSON via bucket/CDN; garder la console sur réseau interne|Infra|
|
||||||
|Les permissions edimestres sont sous-estimees|Moyenne|Moyen|Definir roles simples, audit obligatoire, environnement interne seulement|Edition / equipe web|
|
|Les permissions édimestres sont sous-estimees|Moyenne|Moyen|Definir rôles simples, audit obligatoire, environnement interne seulement|Edition / équipe web|
|
||||||
|Migration depuis Directus cause une interruption|Moyenne|Eleve|Double-run, comparaison, pilote, rollback, aucun big bang|Tech lead / Infra|
|
|Migration depuis Directus cause une interruption|Moyenne|Eleve|Double-run, comparaison, pilote, rollback, aucun big bang|Tech lead / Infra|
|
||||||
|Les couts operationnels du bucket/CDN/logs augmentent|Faible|Moyen|Retention limitee, monitoring taille, lifecycle policies|Infra|
|
|Les couts opérationnels du bucket/CDN/logs augmentent|Faible|Moyen|Retention limitée, monitoring taille, lifecycle policies|Infra|
|
||||||
|Le choix Laravel vs AdonisJS devient un debat bloquant|Moyenne|Moyen|Decider selon maintenabilite, separer contrat et implementation, timeboxer la decision|CTO / Tech lead|
|
|Le choix Laravel vs AdonisJS devient un debat bloquant|Moyenne|Moyen|Decider selon maintenabilite, séparer contrat et implementation, timeboxer la décision|CTO / Tech lead|
|
||||||
|
|
||||||
## Sante actuelle
|
## Sante actuelle
|
||||||
|
|
||||||
Jaune.
|
Jaune.
|
||||||
|
|
||||||
Le besoin est clair et la direction technique est raisonnable, mais le projet touche plusieurs systemes critiques: Louise/Mogador, Directus, JWP, sites consommateurs, infra, edition et production. Le principal risque n'est pas technique pur; c'est la portee.
|
Le besoin est clair et la direction technique est raisonnable, mais le projet touche plusieurs systèmes critiques: Louise/Mogador, Directus, JWP, sites consommateurs, infra, édition et production. Le principal risque n'est pas technique pur; c'est la portée.
|
||||||
|
|
||||||
## Statut actuel
|
## Statut actuel
|
||||||
|
|
||||||
Une proposition d'architecture Sync v2 existe. Une suite precise maintenant la separation entre:
|
Une proposition d'architecture Sync v2 existe. Une suite précise maintenant la séparation entre:
|
||||||
|
|
||||||
- le chantier interne de publication;
|
- le chantier interne de publication;
|
||||||
- le chantier PCI pour moderniser Louise/Mogador;
|
- le chantier PCI pour moderniser Louise/Mogador;
|
||||||
- le role du Media Pipeline AdonisJS/JWP;
|
- le rôle du Media Pipeline AdonisJS/JWP;
|
||||||
- les contrats `media_assets` et `publication_jobs`;
|
- les contrats `media_assets` et `publication_jobs`;
|
||||||
- les noms recommandes pour clarifier l'architecture.
|
- les noms recommandes pour clarifier l'architecture.
|
||||||
|
|
||||||
@@ -166,19 +165,19 @@ Prochain jalon recommande: valider les contrats `media_assets`, `publication_job
|
|||||||
## Decisions / aide requise
|
## Decisions / aide requise
|
||||||
|
|
||||||
- Choisir la plateforme pilote: ONFR, TFO reduit ou autre.
|
- Choisir la plateforme pilote: ONFR, TFO reduit ou autre.
|
||||||
- Decider si Directus est retire, reduit ou garde temporairement en double-run.
|
- Decider si Directus est retiré, reduit ou garde temporairement en double-run.
|
||||||
- Confirmer que les JSON publics via bucket/CDN sont acceptables pour Infra.
|
- Confirmer que les JSON publics via bucket/CDN sont acceptables pour Infra.
|
||||||
- Confirmer les roles de la Publication Console: edimestres, admins, read-only.
|
- Confirmer les rôles de la Publication Console: édimestres, admins, read-only.
|
||||||
- Valider la strategie de cache du `manifest.json`.
|
- Valider la stratégie de cache du `manifest.json`.
|
||||||
- Valider la retention des runs: recommandation initiale de 10 jours minimum.
|
- Valider la retention des runs: recommandation initiale de 10 jours minimum.
|
||||||
- Valider si le Sync Engine principal est Laravel, AdonisJS ou autre.
|
- Valider si le Sync Engine principal est Laravel, AdonisJS ou autre.
|
||||||
- Confirmer qui porte la discussion avec PCI pour l'API v2 et les events futurs.
|
- Confirmer qui porte la discussion avec PCI pour l'API v2 et les events futurs.
|
||||||
|
|
||||||
## Changements de portee
|
## Changements de portée
|
||||||
|
|
||||||
|Date|Changement|Impact|Decision|
|
|Date|Changement|Impact|Decision|
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|A definir|Ajout de l'integration JWP via Media Pipeline|Augmente la portee, mais evite une architecture incomplete|Propose|
|
|À définir|Ajout de l'integration JWP via Media Pipeline|Augmente la portée, mais evite une architecture incomplète|Proposé|
|
||||||
|A definir|Separation du chantier PCI et du chantier interne|Reduit le risque de blocage fournisseur|Propose|
|
|À définir|Separation du chantier PCI et du chantier interne|Reduit le risque de blocage fournisseur|Proposé|
|
||||||
|A definir|Ajout Publication Console pour corrections d'urgence|Ajoute auth/audit, mais remplace un besoin fort de Directus|Propose|
|
|À définir|Ajout Publication Console pour corrections d'urgence|Ajoute auth/audit, mais remplace un besoin fort de Directus|Proposé|
|
||||||
|A definir|Support des programmations futures J+10|Augmente le volume JSON, mais repond a une demande recurrente|Propose|
|
|À définir|Support des programmations futures J+10|Augmente le volume JSON, mais répond à une demande reçurrente|Proposé|
|
||||||
+27
-1
@@ -1,4 +1,3 @@
|
|||||||
# Consultation fournisseurs sites: proposition de publication JSON
|
|
||||||
|
|
||||||
## Objectif
|
## Objectif
|
||||||
|
|
||||||
@@ -224,6 +223,31 @@ Contient le détail d'un produit ou épisode.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Images
|
||||||
|
|
||||||
|
Les images pourraient être fournies avec des URLs déjà prêtes pour les principaux usages des sites.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"type": "thumbnail",
|
||||||
|
"alt": "Description de l'image",
|
||||||
|
"variants": {
|
||||||
|
"card": "https://images.example.com/tfo/card/abc.jpg",
|
||||||
|
"hero": "https://images.example.com/tfo/hero/abc.jpg",
|
||||||
|
"poster": "https://images.example.com/tfo/poster/abc.jpg",
|
||||||
|
"original": "https://assets.example.com/originals/abc.jpg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
L'objectif est de ne pas forcer les sites à télécharger des images sources trop lourdes, tout en évitant de dupliquer inutilement les fichiers. Les variants exacts restent à confirmer avec vous.
|
||||||
|
|
||||||
### collections/{biznumber}/full.json
|
### collections/{biznumber}/full.json
|
||||||
|
|
||||||
Contient une vue complète d'une collection, dans le sens attendu par les sites:
|
Contient une vue complète d'une collection, dans le sens attendu par les sites:
|
||||||
@@ -381,6 +405,8 @@ Merci de nous dire si cette approche fonctionnerait pour votre site, et de comme
|
|||||||
|
|
||||||
- Quels champs media sont requis pour votre lecteur vidéo?
|
- Quels champs media sont requis pour votre lecteur vidéo?
|
||||||
- Avez-vous besoin de plusieurs formats d'image?
|
- Avez-vous besoin de plusieurs formats d'image?
|
||||||
|
- Quels variants d'image seraient utiles pour vos pages? Exemples: `card`, `hero`, `poster`, `thumbnail`, `original`.
|
||||||
|
- Préférez-vous recevoir des URLs d'image prêtes à l'emploi ou construire les URLs à partir d'un template documenté?
|
||||||
- Avez-vous besoin de sous-titres, transcriptions, audio ou autres assets dans le JSON?
|
- Avez-vous besoin de sous-titres, transcriptions, audio ou autres assets dans le JSON?
|
||||||
|
|
||||||
### Recherche
|
### Recherche
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ Ce chantier a une relation directe avec la synchro interne, mais il ne doit pas
|
|||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart TD
|
flowchart TD
|
||||||
Louise["LouiseSysteme source editorial"]
|
Louise["LouiseSystème source éditorial"]
|
||||||
LouiseExport["Louise ExportSQL complet toutes les 3h"]
|
LouiseExport["Louise ExportSQL complet toutes les 3h"]
|
||||||
Importer["Import SQL interneBase source locale"]
|
Importer["Import SQL interneBase source locale"]
|
||||||
Toolkit["Mogador ToolkitAPI legacy actuelle"]
|
Toolkit["Mogador ToolkitAPI legacy actuelle"]
|
||||||
@@ -244,8 +244,12 @@ flowchart TD
|
|||||||
Diff["Diff Builderfabrique l'incrémentiel interne"]
|
Diff["Diff Builderfabrique l'incrémentiel interne"]
|
||||||
|
|
||||||
MediaPipeline["Media PipelineAdonisJS/JWP"]
|
MediaPipeline["Media PipelineAdonisJS/JWP"]
|
||||||
JWP["JWPplateforme video"]
|
JWP["JWPplateforme vidéo"]
|
||||||
MediaAssets["media_assetsétat media interne"]
|
MediaAssets["media_assetsétat média interne"]
|
||||||
|
|
||||||
|
AssetPipeline["Asset Pipelineimages + transcriptions"]
|
||||||
|
S3Assets["S3 Assetsoriginaux optimisés"]
|
||||||
|
ImageLayer["Image Transformation Layerresize/crop/cache"]
|
||||||
|
|
||||||
Console["Publication Consolemini CMS interne"]
|
Console["Publication Consolemini CMS interne"]
|
||||||
Overrides["overridescorrections d'urgence"]
|
Overrides["overridescorrections d'urgence"]
|
||||||
@@ -255,7 +259,7 @@ flowchart TD
|
|||||||
Validator["Validation + rapportsattendu vs publié"]
|
Validator["Validation + rapportsattendu vs publié"]
|
||||||
Runs["Published Content Feedruns JSON immuables"]
|
Runs["Published Content Feedruns JSON immuables"]
|
||||||
Manifest["manifest.jsonpointe vers le run actif"]
|
Manifest["manifest.jsonpointe vers le run actif"]
|
||||||
Bucket["Bucket/CDNexposition publique contrôlee"]
|
Bucket["Bucket/CDNexposition publique contrôlée"]
|
||||||
Sites["Sites webTFO / IDELLO / ONFR / linéaire"]
|
Sites["Sites webTFO / IDELLO / ONFR / linéaire"]
|
||||||
Alerts["Slack / Better Stackalertes anomalies"]
|
Alerts["Slack / Better Stackalertes anomalies"]
|
||||||
|
|
||||||
@@ -274,6 +278,12 @@ flowchart TD
|
|||||||
MediaPipeline --> MediaAssets
|
MediaPipeline --> MediaAssets
|
||||||
MediaPipeline --> Jobs
|
MediaPipeline --> Jobs
|
||||||
|
|
||||||
|
Snapshot --> AssetPipeline
|
||||||
|
AssetPipeline --> S3Assets
|
||||||
|
S3Assets --> ImageLayer
|
||||||
|
AssetPipeline --> Jobs
|
||||||
|
ImageLayer --> Engine
|
||||||
|
|
||||||
Console --> Overrides
|
Console --> Overrides
|
||||||
Console --> Jobs
|
Console --> Jobs
|
||||||
|
|
||||||
@@ -290,7 +300,49 @@ flowchart TD
|
|||||||
Bucket --> Sites
|
Bucket --> Sites
|
||||||
```
|
```
|
||||||
|
|
||||||
Ce schema représente ce qu'on contrôle nous-mêmes. Il ne depend pas d'une API Louise/Mogador v2.
|
Ce schéma représente ce qu'on contrôle nous-mêmes. Il ne dépend pas d'une API Louise/Mogador v2.
|
||||||
|
|
||||||
|
## Services autour du CPE
|
||||||
|
|
||||||
|
L'architecture cible doit être vue comme un ensemble de services spécialisés autour du Content Publication Engine.
|
||||||
|
|
||||||
|
La règle principale:
|
||||||
|
|
||||||
|
> Chaque service est responsable de son domaine, mais seul le CPE décide ce qui est publié aux sites.
|
||||||
|
|
||||||
|
Services proposés:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Import Service
|
||||||
|
Responsable de recevoir/importer le Louise Export SQL dans MySQL.
|
||||||
|
Produit un statut d'import lisible par le CPE.
|
||||||
|
|
||||||
|
Source Reader
|
||||||
|
Responsable de lire les données officielles via Mogador Toolkit aujourd'hui,
|
||||||
|
puis potentiellement via Louise API v2 plus tard.
|
||||||
|
|
||||||
|
Asset Pipeline
|
||||||
|
Responsable des images, transcriptions, audio et autres fichiers vers S3.
|
||||||
|
Optimise les originaux quand nécessaire, par exemple via tinyjpg.
|
||||||
|
|
||||||
|
Image Transformation Layer
|
||||||
|
Responsable du redimensionnement/crop/cache des images à la demande.
|
||||||
|
Remplace la capacité de resize on the fly qui était utile dans Directus.
|
||||||
|
|
||||||
|
Media Pipeline
|
||||||
|
Responsable des vidéos JWP et de l'état média dans `media_assets`.
|
||||||
|
|
||||||
|
Publication Console
|
||||||
|
Responsable des corrections d'urgence, overrides, audit et rollback interne.
|
||||||
|
|
||||||
|
Content Publication Engine
|
||||||
|
Responsable de valider, assembler, générer et publier les JSON.
|
||||||
|
|
||||||
|
Published Content Feed
|
||||||
|
Responsable de servir les JSON versionnés via bucket/CDN.
|
||||||
|
```
|
||||||
|
|
||||||
|
Le CPE ne doit pas faire l'import SQL, transcoder les vidéos, redimensionner les images ou devenir un CMS complet. Il orchestre la publication à partir des états produits par les autres services.
|
||||||
|
|
||||||
### Chantier B: évolution PCI
|
### Chantier B: évolution PCI
|
||||||
|
|
||||||
@@ -312,7 +364,7 @@ flowchart TD
|
|||||||
Events -.declenche une relecture officielle.-> InternalReader
|
Events -.declenche une relecture officielle.-> InternalReader
|
||||||
```
|
```
|
||||||
|
|
||||||
Ce deuxieme schema est un projet avec PCI. Il peut ameliorer fortement la vitesse et la fiabilite, mais il doit rester interchangeable.
|
Ce deuxième schéma est un projet avec PCI. Il peut améliorer fortement la vitesse et la fiabilité, mais il doit rester interchangeable.
|
||||||
|
|
||||||
Le `Content Publication Engine` devrait avoir un `Source Reader` abstrait:
|
Le `Content Publication Engine` devrait avoir un `Source Reader` abstrait:
|
||||||
|
|
||||||
@@ -342,7 +394,7 @@ Le reste du système interne ne devrait pas changer:
|
|||||||
3. Le Mogador Toolkit expose les données officielles.
|
3. Le Mogador Toolkit expose les données officielles.
|
||||||
4. Le Snapshot Collector lit les données officielles.
|
4. Le Snapshot Collector lit les données officielles.
|
||||||
5. Le Diff Builder compare le snapshot courant au snapshot précédent.
|
5. Le Diff Builder compare le snapshot courant au snapshot précédent.
|
||||||
6. Le Media Pipeline gère JWP et écrit l'état media dans `media_assets`.
|
6. Le Media Pipeline gère JWP et écrit l'état média dans `media_assets`.
|
||||||
7. La Publication Console gère les corrections d'urgence et écrit les overrides.
|
7. La Publication Console gère les corrections d'urgence et écrit les overrides.
|
||||||
8. Les changements créent des `publication_jobs`.
|
8. Les changements créent des `publication_jobs`.
|
||||||
9. Le Content Publication Engine combine données officielles, media, overrides et règles métier.
|
9. Le Content Publication Engine combine données officielles, media, overrides et règles métier.
|
||||||
@@ -750,6 +802,117 @@ Contient le détail d'un produit.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Images et resize on the fly
|
||||||
|
|
||||||
|
Un avantage important de Directus est sa capacité à redimensionner les images à la demande. Si Directus est retiré ou réduit, cette capacité doit être remplacée explicitement.
|
||||||
|
|
||||||
|
Certaines images sources peuvent être très grandes, parfois en format 4K. Le service tinyjpg peut continuer à optimiser le poids des originaux avant stockage dans S3, mais cela ne remplace pas le besoin des sites d'obtenir plusieurs tailles et ratios selon les pages.
|
||||||
|
|
||||||
|
Recommandation:
|
||||||
|
|
||||||
|
```text
|
||||||
|
S3 originaux optimisés
|
||||||
|
-> Image Transformation Layer
|
||||||
|
-> CDN cache les rendus
|
||||||
|
-> sites consomment les URLs d'images transformées
|
||||||
|
```
|
||||||
|
|
||||||
|
Options recommandées, dans l'ordre:
|
||||||
|
|
||||||
|
1. **Solution AWS/CloudFront de transformation d'images**
|
||||||
|
|
||||||
|
C'est l'option à privilégier si l'infrastructure est déjà orientée AWS/S3/CloudFront.
|
||||||
|
|
||||||
|
Avantages:
|
||||||
|
|
||||||
|
- reste dans l'écosystème AWS;
|
||||||
|
- S3 peut rester privé;
|
||||||
|
- CloudFront sert les images;
|
||||||
|
- les transformations peuvent être contrôlées par presets;
|
||||||
|
- le cache CDN absorbe la charge;
|
||||||
|
- moins de service applicatif public à opérer;
|
||||||
|
- plus facile à faire accepter par l'infrastructure.
|
||||||
|
2. **imgproxy derrière CloudFront**
|
||||||
|
|
||||||
|
Option technique solide si la solution AWS ne répond pas au besoin.
|
||||||
|
|
||||||
|
Avantages:
|
||||||
|
|
||||||
|
- service spécialisé pour resize/crop/format;
|
||||||
|
- URLs signées possibles;
|
||||||
|
- fonctionne bien avec S3/CDN;
|
||||||
|
- évite de pré-générer trop de variantes.
|
||||||
|
|
||||||
|
Point de vigilance: cela ajoute un service à opérer, patcher, surveiller et sécuriser.
|
||||||
|
|
||||||
|
3. **Cloudflare Images / Transformations**
|
||||||
|
|
||||||
|
Option intéressante techniquement si Cloudflare est déjà accepté dans l'infrastructure web.
|
||||||
|
|
||||||
|
Avantages:
|
||||||
|
|
||||||
|
- resize/optimisation à la demande;
|
||||||
|
- cache global;
|
||||||
|
- peu d'opération applicative interne.
|
||||||
|
|
||||||
|
Point de vigilance: si l'organisation veut rester principalement AWS/S3/CloudFront, cette option risque d'être moins acceptable.
|
||||||
|
|
||||||
|
|
||||||
|
La recommandation pragmatique est donc:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Choix 1: AWS/CloudFront Image Transformation
|
||||||
|
Choix 2: imgproxy derrière CloudFront
|
||||||
|
Choix 3: Cloudflare Images/Transformations
|
||||||
|
```
|
||||||
|
|
||||||
|
Cela évite de mettre du traitement image dans le CPE et évite aussi de pré-générer trop de variantes.
|
||||||
|
|
||||||
|
Le CPE ne devrait pas redimensionner les images lui-même. Il devrait seulement publier les informations nécessaires:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"type": "thumbnail",
|
||||||
|
"source_url": "https://assets.example.com/originals/abc.jpg",
|
||||||
|
"alt": "Description de l'image",
|
||||||
|
"transform": {
|
||||||
|
"base_url": "https://images.example.com",
|
||||||
|
"presets": {
|
||||||
|
"card": "w=400,h=225,fit=cover",
|
||||||
|
"hero": "w=1600,h=900,fit=cover",
|
||||||
|
"poster": "w=600,h=900,fit=cover"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Les sites peuvent ensuite utiliser les presets documentés, ou recevoir directement des URLs prêtes à l'emploi si on veut limiter la logique côté site.
|
||||||
|
|
||||||
|
Point important: il faut décider si les sites construisent les URLs de transformation ou si le CPE publie des URLs déjà construites. Pour réduire les risques d'intégration, la v1 devrait probablement publier des URLs prêtes à l'emploi pour les principaux usages:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"type": "thumbnail",
|
||||||
|
"alt": "Description de l'image",
|
||||||
|
"variants": {
|
||||||
|
"card": "https://images.example.com/tfo/card/abc.jpg",
|
||||||
|
"hero": "https://images.example.com/tfo/hero/abc.jpg",
|
||||||
|
"poster": "https://images.example.com/tfo/poster/abc.jpg",
|
||||||
|
"original": "https://assets.example.com/originals/abc.jpg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Cela garde la flexibilité du resize on the fly, tout en donnant aux sites un contrat simple.
|
||||||
|
|
||||||
### collections/{biznumber}/full.json
|
### collections/{biznumber}/full.json
|
||||||
|
|
||||||
Contient le modèle attendu par les sites.
|
Contient le modèle attendu par les sites.
|
||||||
@@ -859,7 +1022,7 @@ Principe:
|
|||||||
|
|
||||||
Si la génération du run `20260730-1200` échoue, `manifest.json` continue de pointer vers `20260730-0900`. Une sync ratée ne casse pas le site.
|
Si la génération du run `20260730-1200` échoue, `manifest.json` continue de pointer vers `20260730-0900`. Une sync ratée ne casse pas le site.
|
||||||
|
|
||||||
Cette règle s'applique aussi aux corrections rapides: si une correction d'urgence ou une republication media échoue, le manifest reste sur le dernier run valide.
|
Cette règle s'applique aussi aux corrections rapides: si une correction d'urgence ou une republication média échoue, le manifest reste sur le dernier run valide.
|
||||||
|
|
||||||
Retention proposée:
|
Retention proposée:
|
||||||
|
|
||||||
@@ -1103,7 +1266,7 @@ Tout ce qui dépasse ce périmètre doit être questionné avant d'être ajouté
|
|||||||
|
|
||||||
### Table `media_assets`
|
### Table `media_assets`
|
||||||
|
|
||||||
Cette table représente l'état media interne d'un produit.
|
Cette table représente l'état média interne d'un produit.
|
||||||
|
|
||||||
Champs proposés:
|
Champs proposés:
|
||||||
|
|
||||||
@@ -1258,7 +1421,7 @@ Produits publiés: 8139
|
|||||||
|
|
||||||
Ecarts:
|
Ecarts:
|
||||||
- 1 programme absent du JSON final
|
- 1 programme absent du JSON final
|
||||||
- 2 produits sans video JWP
|
- 2 produits sans vidéo JWP
|
||||||
- 5 images manquantes
|
- 5 images manquantes
|
||||||
- 1 produit ignoré car type extrait
|
- 1 produit ignoré car type extrait
|
||||||
|
|
||||||
@@ -1278,7 +1441,7 @@ Alertes à mettre en place:
|
|||||||
- sync trop longue;
|
- sync trop longue;
|
||||||
- écart entre attendu et publié;
|
- écart entre attendu et publié;
|
||||||
- programme prévu à 6h absent de la publication avant 6h;
|
- programme prévu à 6h absent de la publication avant 6h;
|
||||||
- video JWP manquante;
|
- vidéo JWP manquante;
|
||||||
- image ou transcription manquante;
|
- image ou transcription manquante;
|
||||||
- override actif proche expiration.
|
- override actif proche expiration.
|
||||||
|
|
||||||
@@ -1522,7 +1685,7 @@ Avec cette séparation, le Media Pipeline peut évoluer indépendamment. La nouv
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
Louise
|
Louise
|
||||||
Systeme source editorial.
|
Système source éditorial.
|
||||||
|
|
||||||
Louise Export
|
Louise Export
|
||||||
Export SQL complet génère par Louise.
|
Export SQL complet génère par Louise.
|
||||||
@@ -1537,7 +1700,7 @@ Content Publication Engine
|
|||||||
Notre moteur interne qui génère les JSON publics.
|
Notre moteur interne qui génère les JSON publics.
|
||||||
|
|
||||||
Media Pipeline
|
Media Pipeline
|
||||||
Notre service interne qui gère JWP et l'état media.
|
Notre service interne qui gère JWP et l'état média.
|
||||||
|
|
||||||
Publication Console
|
Publication Console
|
||||||
Mini CMS interne pour édimestres/admins et overrides.
|
Mini CMS interne pour édimestres/admins et overrides.
|
||||||
|
|||||||
Reference in New Issue
Block a user