Aller au contenu principal

Audit de l'existant avant la téléphonie

Cet audit a été mené le 3 novembre 2026 sur le code du dépôt (branche main), avant toute écriture de code de téléphonie. Il fixe ce qui est réutilisé tel quel, ce qui est complété et ce qui manque, pour ne rien réimplémenter. Les décisions qui en découlent sont dans l'ADR-0173.

Légende : existant (fonctionne, réutilisé), partiel (présent mais à compléter pour la téléphonie), manquant (à construire), exclu (volontairement absent).

SujetÉtatConstat
Architecture du Managerexistantserveur FastAPI et PostgreSQL (navin-manager/server), moteur d'opérations en étapes et tâches, console React (navin-manager/ui), API décrite par OpenAPI et quatre SDK
Agents des hôtesexistantagent Go livré sur les hôtes (l'agent Python reste une référence) : fichiers, paquets dnf, apt et pacman, unités systemd, Podman, pare-feu firewalld et ufw, certificats, faits, métriques, mise à jour signée
Découverte et inventaireexistantune seule liste de nœuds, quatre méthodes d'ajout (commande, SSH, instance cloud, image), faits (CPU, mémoire, disques, GPU, plateforme), contrôles préalables
Catalogue des servicesexistantschéma catalog/schema/service.schema.json, modes, composants, composants suiveurs, instances nommées, liaisons entre services, TLS, blocs de haute disponibilité, consoles, commandes, sauvegardes
Méthodesexistantbinary, podman, python et package ; une méthode peut être limitée par mode ; un paquet absent pour une famille d'OS est refusé (packages_unavailable)
Clustersexistantclusters par environnement (production, préproduction, test, développement, bac à sable) et profils d'installation (standard, banking-secure, air-gapped)
Haute disponibilitéexistantmodes HA déclarés par service (Patroni pour PostgreSQL, Sentinel et Cluster pour Redis, Raft pour OpenBao), groupes HA avec tests de bascule, garanties décrites par service (ADR-0166)
Gestion des configurationsexistantversions, diff, restauration, groupes, application progressive ou complète, consommateurs marqués à appliquer quand un fournisseur change
Supervisionexistantcontrôles de santé par les agents, contrôles de service, découverte Prometheus (/clusters/{id}/sd/prometheus), alertes, tableau de bord par service
Sauvegarde et restaurationexistantsauvegardes par service, restauration vérifiée, reprise après sinistre
Installation hors ligneexistantbundle hors ligne avec dépôt de paquets de l'OS et miroir d'images, hub d'artefacts signés
Téléphoniemanquantni Asterisk, ni Kamailio, ni RTPengine, ni LiveKit SIP, Egress, Ingress ou workers d'agents au catalogue
SujetÉtatConstat
Control PlaneexistantFastAPI et PostgreSQL (services/control-plane, schéma eai, migrations sql/postgres), domaines par brique, textes d'API en français et en anglais (eai.apitext)
Tenancyexistanttenants, projets, organisations et unités (eai.domains.tenancy), tenant_id sur les tables métier
Opérations longuesexistantopérations asynchrones et worker (V188__operations.sql)
Auditexistantoutbox d'audit, événements partitionnés, scellement, conservation légale : réutilisé, pas de table d'audit propre à la téléphonie
Pont vers le Managerexistantdomaine platform_manager : lecture des services, nœuds, clusters et opérations du Manager, demandes d'opération au nom de l'utilisateur (X-NM-On-Behalf-Of), jeton du Manager dans le coffre
Voix temps réelpartieljetons de salle LiveKit signés par le Control Plane, protocole d'événements WebSocket, consentement, transcriptions et enregistrements de session (V145) ; aucune téléphonie
PortailexistantNext.js 15, React 19, Tailwind, Radix, React Query, i18next (français et anglais), Recharts, livekit-client déjà présent ; navigation par sections et rôles
Téléphoniemanquantni tenants téléphoniques, ni extensions, trunks, numéros, routage, IVR, files, agents, CDR, enregistrements, ni écrans

Stockage, bases de données et cache​

SujetÉtatConstat
SeaweedFSexistantservice du catalogue en modes single et distributed (maîtres, volumes, filer, passerelle S3, console d'administration), réplication paramétrable
Stockage côté Control Planeexistantprofils de stockage S3 (dont SeaweedFS), découverte des capacités, URL présignées, exports d'audit WORM (eai.domains.storage)
Organisation des objets téléphoniquesmanquantaucun compartiment ni préfixe par tenant et par catégorie (enregistrements, messagerie vocale, messages d'IVR)
MinIOexcluAGPL-3.0, refusé par l'ADR-0101 et test_platform_no_agpl.py ; SeaweedFS reste le seul stockage objet
PostgreSQLexistantmodes standalone et ha (Patroni 4.1.5 avec etcd), TLS, pgvector, sauvegardes pg_basebackup, instances nommées
Redisexistantmodes standalone, replication, sentinel et cluster, TLS, utilisateurs ACL ; déjà lié à LiveKit en mode distributed

Sécurité, secrets, identité et certificats​

SujetÉtatConstat
Secrets du Control PlaneexistantAPI en écriture seule, valeurs chiffrées (OpenBao ou AES-GCM local), lecture côté serveur seulement (read_secret)
Secrets du Managerexistantcoffre du Manager et synchronisation avec OpenBao ; secrets générés à l'installation, jamais affichés
AuthentificationexistantKeycloak (OIDC) et comptes locaux pour le portail ; comptes locaux, LDAP, OIDC et double facteur pour le Manager
Autorisationexistantrôles du Control Plane (eai.auth, complétés par V161), relations OpenFGA (eai.domains.authz), politiques OPA
Certificatsexistantautorité du Manager, certificats installés par les agents (clé 0640, copie pour les conteneurs), rotation, mTLS des agents
Sortie réseauexistantgarde de sortie du Control Plane (eai.security.egress) : chaque hôte joint est déclaré
Sécurité téléphoniquemanquantni anti-fraude, ni limitation CPS, ni restrictions de destinations, ni anti-bruteforce SIP

Observabilité​

SujetÉtatConstat
Métriques et alertesexistantPrometheus et Alertmanager du catalogue, découverte des cibles par le Manager
JournauxexistantAlloy vers OpenSearch, tableaux de bord OpenSearch Dashboards
TracesexistantOpenTelemetry Collector et Jaeger
Grafana et LokiexcluAGPL-3.0, refusés par l'ADR-0101 et test_platform_no_agpl.py : la téléphonie utilise Prometheus, Alertmanager, Alloy, OpenSearch et OpenTelemetry déjà en place
Métriques téléphoniquesmanquantni métriques Asterisk ou Kamailio, ni règles d'alerte, ni indicateurs métier d'appels

Ce qui est construit​

  1. Au catalogue du Manager : asterisk, kamailio, rtpengine (optionnel), livekit-sip, livekit-egress, livekit-ingress (optionnel) et livekit-agents, avec leurs ports, contrôles de santé, sauvegardes, modes HA et métriques ; livekit complété sans changer son comportement par défaut.
  2. Dans le Control Plane : le domaine eai.domains.telephony (données, API, compilateurs, publication par AMI, JSONRPC et API LiveKit, appels, CDR, enregistrements dans SeaweedFS, agents vocaux IA).
  3. Dans le portail : la section Téléphonie, l'IVR Builder et le softphone WebRTC.
  4. Les règles d'alerte, la documentation, la matrice des licences et la nomenclature logicielle.