9.2 KiB
Chaîne de fabrication du numérique
La chaîne de fabrication du numérique, qui s'étend de l'extraction des matières premières à l'assemblage final, joue un rôle central dans les activités économiques et sociétales.
Pourtant, cette chaîne reste insuffisamment étudiée dans son entièreté. De nombreuses analyses existantes portant sur la « criticité » des minerais ne vont pas au-delà d'une approche macroéconomique, souvent focalisée sur la seule rareté d'un métal ou sur le degré de concentration de sa production.
Or, dans le contexte actuel de « polycrise globale », marqué par des tensions géopolitiques, des aléas climatiques et une croissance rapide de la demande hors numérique (transition énergétique, défense, etc.), ces approches généralistes révèlent leurs limites.
L'objectif de ce projet est de proposer à la fois des données les plus complètes possibles sur cette chaîne, et de fournir les outils nécessaires pour la visualisation des relations, les analyses, la lecture des fiches des opérations (assemblage, fabrication, extraction, …).
Le code proposé répond à la partie outillage, avec une architecture modulaire et simplifiée pour faciliter la maintenance et l'évolution.
Principe général
Le projet est bâti sur un backeng Gitea pour la gestion des fiches et des tickets d'évolution. (Accéder au backend)[https://fabnum-git.peccini.fr/FabNum/Fiches]
Le serveur qui héberge l'application héberge aussi le service Gitea, ce qui permet d'éliminer les temps de latence dus au réseau.
L'application est écrite en python et utilise majoritairement streamlit.
Les données du code
Requirements
Le fichier requirements.txt permet d'installer tout ce qui est nécessaire pour l'application.
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Environnement
Le fichier .env.local qui contient GITEA_TOKEN n'est pas dans le dépôt car il contient la clé pour accéder au backend.
Pour l'environnement de pré-production, (https://fabnum-dev.peccini.fr)[https://fabnum-dev.peccini.fr] :
ENV_CODE = "dev"
PORT=8502
DOT_FILE = "schema.txt"
GITEA_URL = "https://fabnum-git.peccini.fr/api/v1"
ORGANISATION = "fabnum"
DEPOT_FICHES = "fiches"
DEPOT_CODE = "code"
ID_PROJET = "3"
INSTRUCTIONS = "Instructions.md"
FICHE_IHH = "Fiches/Criticités/Fiche technique IHH.md"
FICHE_ICS = "Fiches/Criticités/Fiche technique ICS.md"
FICHE_ISG = "Fiches/Criticités/Fiche technique ISG.md"
FICHE_IVC = "Fiches/Criticités/Fiche technique IVC.md"
Pour l'environnement de production, (https://fabnum.peccini.fr)[https://fabnum.peccini.fr], le fichier est identique sauf pour :
PORT=8501
La différence entre les deux environnements se fait au travers de la configuration du proxy Nginx (ici celle de dev ; il suffit de changer dev en public pour l'environnement de production) :
# Ajout d'un en-tête personnalisé pour indiquer l'environnement
add_header X-Environment "dev" always;
# Transmettre l'en-tête d'environnement au backend
proxy_set_header X-Environment "dev";
Cette configuration est utilisée par config.py.
dev et public sont les deux branches officielles du dépôt.
L'application se lance simplement sous la forme :
streamlit run fabnum.py --server.port 8502
Lancement par systemd
Ce script permet de lancer l'application en prenant en compte le fichier .env
Pour automatiser le lancement, il est intégré dans systemd :
/etc/systemd/system/multi-user.target.wants/fabnum-dev.service
[Unit]
Description=Fabnum Dev - Streamlit App
After=network.target
[Service]
User=fabnum
WorkingDirectory=/home/fabnum/fabnum-dev
ExecStart=/home/fabnum/fabnum-dev/venv/bin/streamlit run /home/fabnum/fabnum-dev/fabnum.py --server.port 8502
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
fabnum.py
Le cœur de l'application. Ce script sert de point d'entrée et d'orchestrateur pour tous les modules fonctionnels :
- Configuration de l'interface : Initialisation de Streamlit et chargement des thèmes
- Gestion de la navigation : Coordination entre les différents modules selon l'onglet sélectionné
- Chargement des données : Acquisition des données depuis le backend Gitea
- Orchestration des modules :
- Module Fiches pour la consultation documentaire
- Module Analyse pour l'étude des chaînes de dépendance
- Module Visualisations pour les représentations graphiques
- Module Personnalisation pour la modification du graphe
Ce fichier est conçu de manière modulaire, déléguant les fonctionnalités spécifiques aux modules spécialisés, ce qui facilite la maintenance et les évolutions futures.
Architecture et principes de conception
Modularité et simplification
L'application a été restructurée selon les principes suivants :
- Séparation des responsabilités : Chaque module a une fonction bien définie
- Modularité : Les fonctionnalités sont décomposées en composants réutilisables
- Simplification des fonctions : Les fonctions complexes ont été divisées en sous-fonctions plus simples
- Documentation intégrée : Chaque module dispose de sa propre documentation
Modules principaux
-
Module Analyse : Voir documentation
- Permet d'analyser les relations entre les différents éléments de la chaîne
- Génère des visualisations Sankey pour identifier les vulnérabilités
-
Module Fiches : Voir documentation
- Gère la consultation et l'affichage des fiches techniques
- Intègre un système de tickets pour la collaboration
-
Module Personnalisation : Voir documentation
- Permet d'ajouter et modifier des produits personnalisés
- Offre des fonctionnalités d'import/export de configurations
-
Module Visualisations : Voir documentation
- Propose diverses visualisations graphiques des données
- Permet d'explorer les données sous différents angles
-
Composants d'interface : Voir documentation
- Fournit des éléments d'interface réutilisables
- Assure la cohérence visuelle de l'application
-
Utilitaires partagés : Voir documentation
- Centralise les fonctions communes utilisées par les différents modules
- Gère l'interaction avec l'API Gitea et la manipulation des graphes
Organisation du code
L'application est organisée de façon modulaire, avec une structure simplifiée qui facilite la maintenance :
fabnum-dev/
├── fabnum.py # Point d'entrée principal
├── config.py # Configuration et variables d'environnement
├── app/ # Modules fonctionnels principaux
│ ├── analyse/ # Module d'analyse des chaînes de dépendance
│ │ ├── interface.py # Interface utilisateur pour l'analyse
│ │ ├── sankey.py # Génération des diagrammes Sankey
│ │ └── README.md # Documentation du module
│ ├── fiches/ # Gestion et affichage des fiches
│ │ ├── interface.py # Interface utilisateur pour les fiches
│ │ ├── generer.py # Génération des fiches
│ │ ├── utils/ # Utilitaires spécifiques aux fiches
│ │ └── README.md # Documentation du module
│ ├── personnalisation/ # Personnalisation de la chaîne
│ │ ├── interface.py # Interface principale
│ │ ├── ajout.py # Ajout de produits
│ │ ├── modification.py # Modification de produits
│ │ ├── import_export.py # Import/export de configurations
│ │ └── README.md # Documentation du module
│ └── visualisations/ # Visualisations graphiques
│ ├── interface.py # Interface des visualisations
│ ├── graphes.py # Gestion des graphes à visualiser
│ └── README.md # Documentation du module
├── components/ # Composants d'interface réutilisables
│ ├── sidebar.py # Barre latérale de navigation
│ ├── header.py # En-tête de l'application
│ ├── footer.py # Pied de page
│ └── README.md # Documentation des composants
├── utils/ # Utilitaires partagés
│ ├── gitea.py # Connexion API Gitea
│ ├── graph_utils.py # Manipulation des graphes
│ └── README.md # Documentation des utilitaires
├── assets/ # Ressources statiques
│ ├── styles/ # Feuilles de style CSS
│ └── impact_co2.js # Calcul d'impact environnemental
├── .env # Configuration versionnée
├── .env.local # Configuration locale (non versionnée)
└── requirements.txt # Dépendances Python
Chaque module dispose de sa propre documentation détaillée dans un fichier README.md.