- HTML 46.3%
- Go 35.3%
- Go Template 10.3%
- CSS 2.2%
- Python 2.2%
- Other 3.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
🚀 CI — Build & Publish / 🚀 CI (push) Successful in 4m29s
Co-Authored-By: Claude Code <noreply@anthropic.com> |
||
| .claude | ||
| .forgejo | ||
| .ressources | ||
| _projet | ||
| cmd/pluganalytics | ||
| internal | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| Dockerfile | ||
| go.mod | ||
| README.md | ||
| TUTORIEL.md | ||
PlugAnalytics
Application web interne Orange Business de mise en forme et de diagnostic de la sortie CLI des boîtiers de raccordement téléphonique PBX Plug.
Description
Les boîtiers PBX Plug (matériel OneAccess, groupe Ekinops ; système OneOS) raccordent le PABX ou les postes analogiques d'un client Entreprise à la Livebox for Business. Quand un client signale une mauvaise qualité de voix, les équipes Orange Business doivent lire l'historique d'appels détaillé du boîtier, une sortie texte longue et pénible à exploiter à la main.
PlugAnalytics transforme cette sortie CLI brute en un diagnostic lisible : identité de l'équipement, verdict de synthèse, indicateurs de qualité VoIP (perte de paquets, gigue, note de qualité audio, écho, délai d'établissement), points d'alerte situés par rapport à la limite de responsabilité Orange Business / client, graphiques, détail par appel et exports. Il s'adresse aux techniciens terrain, au support à distance et aux ingénieurs qualité de service, et remplace l'ancien outil de bureau PlugAnalyzer.
Le détail du besoin est dans _projet/vision.md, les choix techniques dans _projet/design.md, l'interface dans _projet/ux-ui.md.
Schéma du projet
flowchart LR
boitier["PBX Plug\n(OneOS v5 / v6)"]
agent["Agent Orange Business\nterminal journalisé"]
app["PlugAnalytics\nanalyse en mémoire"]
app -- "commandes de collecte à copier" --> agent
agent -- "commandes CLI" --> boitier
boitier -- "sortie CLI (journal)" --> agent
agent -- "collage ou dépôt du journal" --> app
app -- "diagnostic + exports (web, PDF, CSV, courriel)" --> agent
app -. "aucune donnée conservée" .-> vide[("∅")]
L'outil ne se connecte jamais au boîtier : l'agent lance les commandes dans son propre terminal, puis transmet le résultat à PlugAnalytics.
Statut du projet
Version 1 en service. La branche main publie l'image de production (:latest),
la branche dev l'image de pré-production (:beta). La version affichée en pied
de page de chaque écran correspond au commit utilisé pour construire l'image.
Les 22 fonctionnalités livrées sont décrites dans _projet/features/implemented/. L'application est volontairement sans état : aucune donnée issue des historiques d'appels n'est conservée côté serveur.
Fonctionnalités
Collecte et dépôt
- Commandes de collecte (FEAT-21) : l'écran d'accueil affiche, par génération
OneOS (v6 par défaut, v5), la suite de commandes à coller dans le terminal du
boîtier, commençant par
term len 0, avec un bouton de copie et la marche à suivre. - Dépôt d'un export CLI (FEAT-01, FEAT-16) : collage du journal ou dépôt d'un fichier texte ; l'analyse part au clic sur « Analyser », ce qui laisse corriger le contenu avant validation. Une sortie non reconnue ou tronquée est signalée clairement.
Diagnostic
- Identité et verdict (FEAT-02) : génération OneOS, modèle, version, état SIP et des ports voix ; période couverte, nombre d'appels, taux d'aboutissement, part d'appels hors seuil, qualité audio moyenne, fenêtres de saturation.
- Points d'alerte (FEAT-03) : indicateurs hors seuil, priorisés, avec l'étiquette de démarcation (périmètre Orange Business ou installation client) et les causes probables.
- Qualité par appel (FEAT-04) : un graphique par indicateur (audio, réseau, écho, établissement) ; un clic sur un appel ouvre sa fiche.
- Trafic et canaux (FEAT-05, FEAT-19) : frise des appels émis et reçus dans le temps, occupation des canaux rapportée à la capacité du modèle, lecture par sens ou par port voix, usage des ports.
- Échecs et communications (FEAT-06) : répartitions par aboutissement, cause de fin d'appel et codec, avec accès direct aux appels concernés.
- Recherche et fiche d'appel (FEAT-07) : recherche par rang ou par numéro, validée par Entrée ; fiche détaillée sans quitter la page.
- Remédiation (FEAT-11) : commandes prêtes à copier pour les défauts à correction univoque côté boîtier (horloge), selon la génération.
- Seuils et glossaire (FEAT-12, FEAT-13) : seuils d'interprétation versionnés et explication de chaque indicateur, accessibles depuis le diagnostic.
Exports
- Export interne (FEAT-08) et export anonymisé pour le client (FEAT-09) : page web autonome, PDF, CSV ou synthèse pour courriel, sur tous les appels ou un périmètre choisi (non aboutis, entrants, sortants, sélection cochée avec « tout sélectionner »).
- Rapport PDF à la charte Orange Business (FEAT-20) : bandeau avec logo Orange, étiquettes de niveau colorées et libellées, pagination.
- Graphique en image (FEAT-10) : copie ou enregistrement de chaque graphique.
Interface et exploitation
- Charte Orange Unified Design System (FEAT-17, FEAT-18, FEAT-22) : en-tête collant qui se réduit au défilement, menu vers les parties du diagnostic, cartes côte à côte sur grand écran, pied de page Orange, logo Orange en icône d'onglet.
- Version affichée (FEAT-15) : commit de construction en pied de page, à communiquer lors d'un échange support.
- Journaux sobres (FEAT-14) : les accès HTTP réussis (dont les sondes de disponibilité) ne sont journalisés qu'en niveau détaillé ; erreurs et analyses restent visibles. Aucun numéro ni contenu d'appel n'est journalisé.
Stack technique
Reprise de _projet/design.md :
| Couche | Choix |
|---|---|
| Langage & runtime | Go, bibliothèque standard uniquement (serveur HTTP, gabarits, journalisation) |
| Interface | Orange Boosted Bootstrap 5.3.8 (build compilé vendoré, charte reprise telle quelle) ; icônes Solaris ; logos Orange |
| Graphiques | Chart.js 4.4.4 (UMD) vendoré dans .ressources/projet/ |
| Export PDF | Générateur intégré, sans dépendance (police Helvetica, repli prévu par la charte) |
| Persistance | Aucune — application sans état, analyse en mémoire |
| Authentification | Aucune en v1 (accès réseau interne) |
| Déploiement | Image Docker unique (construction Go 1.25, exécution distroless non root) |
| CI/CD | Forgejo Actions : dev → image :beta (profil rapide), main → image :latest (profil strict) |
Architecture : monolithe web sans état, rendu côté serveur, aucune dépendance réseau sortante.
Prérequis
- Docker — pour exécuter l'image publiée ou la construire (voie recommandée).
- ou Go 1.21 ou plus récent — pour lancer l'application sans conteneur ou exécuter les tests.
- Aucun service externe (base de données, cache) n'est requis.
Installation & Démarrage
Avec l'image publiée (production)
- Récupérer l'image :
docker pull git.bvcesctoulouse.com/onexpertise/pluganalytics:latest - Lancer le conteneur (ici publié sur le port 80 de l'hôte) :
docker run -d --name pluganalytics --restart unless-stopped -p 80:8080 git.bvcesctoulouse.com/onexpertise/pluganalytics:latest - Ouvrir
http://<hôte>/.
Pour la pré-production, remplacer :latest par :beta.
Mise à jour : docker restart relance le conteneur existant sur son image
d'origine et ne prend donc pas en compte une nouvelle image. Il faut recréer
le conteneur (ou laisser un outil de mise à jour automatique comme Watchtower le
faire) :
docker pull git.bvcesctoulouse.com/onexpertise/pluganalytics:latest
docker rm -f pluganalytics
docker run -d --name pluganalytics --restart unless-stopped -p 80:8080 git.bvcesctoulouse.com/onexpertise/pluganalytics:latest
La version affichée en pied de page permet de vérifier l'image en service.
En construisant l'image
- Depuis la racine du dépôt :
Sansdocker build --build-arg PLUGANALYTICS_VERSION=$(git rev-parse HEAD) -t pluganalytics .--build-arg, le pied de page affiche la version de replidev. - Lancer :
docker run --rm -p 8080:8080 pluganalytics - Ouvrir
http://localhost:8080/.
Avec Go, sans conteneur
- Depuis la racine du dépôt (les assets de charte sont lus dans
.ressources/) :go run ./cmd/pluganalytics - Ouvrir
http://localhost:8080/.
Suite de tests :
go test ./...
Configuration
Variables d'environnement :
| Variable | Rôle | Défaut |
|---|---|---|
PLUGANALYTICS_ADDR |
adresse d'écoute HTTP | :8080 |
PLUGANALYTICS_ASSETS_DIR |
emplacement de la charte vendorée servie par l'application | .ressources (image : /app/assets) |
PLUGANALYTICS_MAX_UPLOAD_BYTES |
plafond de taille d'une sortie CLI déposée | 10485760 (10 Mo) |
PLUGANALYTICS_LOG_LEVEL |
verbosité des journaux sur la sortie standard (debug / info / warn / error) |
info |
Pour les boîtiers OneOS v5, qui n'indiquent pas leur fuseau dans l'export CLI,
PlugAnalytics évalue l'écart d'horloge et rédige la commande de remise à l'heure
dans le fuseau de référence Europe/Paris, embarqué dans le binaire. Les
boîtiers OneOS v6 utilisent le décalage fourni par Current system time.
Argument de construction de l'image :
| Argument | Rôle | Défaut |
|---|---|---|
PLUGANALYTICS_VERSION |
version affichée en pied de page (la CI y met le commit construit) | dev |
Le détail des profils de CI/CD est dans .forgejo/workflows/README.md.
Roadmap
La fonctionnalité en cours est FEAT-23 : fiabiliser l'heure boîtier et les exports client.
Au-delà de la version 1, _projet/vision.md identifie deux évolutions possibles : un agent applicatif installé sur le poste de l'agent pour la connexion directe au boîtier (accès via rebond, authentification par clé et compte personnels), et une authentification via Orange Connect.
Licence / Confidentialité
Projet interne Orange Business, propriétaire. Les ressources de charte (Orange Boosted Bootstrap, icônes Solaris, logos Orange) sont d'usage strictement réservé aux projets Orange. Les données traitées (historiques d'appels) contiennent des numéros de téléphone de clients : elles ne sont ni stockées ni journalisées par l'application.