From 26704831e4d29558a3527407b190a11852828216 Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Mon, 14 Sep 2026 12:26:12 +0200 Subject: [PATCH] chore: arborescence du monorepo EnerVision Pose les dossiers des sept domaines de la stack (backend, frontend, base, ETL, infra, CI/CD, monitoring) avec un README de cadrage par domaine. Seul apps/backend est initialise, les autres font l'objet d'un ticket dedie. Le squelette Angular n'est pas versionne a la main : apps/frontend porte la commande ng new a lancer. --- .editorconfig | 22 +++++++ .github/ISSUE_TEMPLATE/.gitkeep | 0 .github/workflows/.gitkeep | 0 .gitignore | 61 +++++++++++++++++ README.md | 65 ++++++++++++++++++- apps/frontend/README.md | 26 ++++++++ db/README.md | 10 +++ db/init/.gitkeep | 0 db/migrations/.gitkeep | 0 db/seeds/.gitkeep | 0 docs/README.md | 4 ++ docs/adr/.gitkeep | 0 docs/architecture/.gitkeep | 0 etl/README.md | 9 +++ etl/airflow/dags/.gitkeep | 0 etl/airflow/include/.gitkeep | 0 etl/airflow/plugins/.gitkeep | 0 etl/airflow/tests/.gitkeep | 0 infra/README.md | 6 ++ infra/terraform/environments/dev/.gitkeep | 0 infra/terraform/environments/prod/.gitkeep | 0 infra/terraform/modules/.gitkeep | 0 monitoring/README.md | 10 +++ monitoring/alertmanager/.gitkeep | 0 monitoring/grafana/dashboards/.gitkeep | 0 .../grafana/provisioning/dashboards/.gitkeep | 0 .../grafana/provisioning/datasources/.gitkeep | 0 monitoring/prometheus/rules/.gitkeep | 0 scripts/.gitkeep | 0 scripts/README.md | 3 + 30 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .github/ISSUE_TEMPLATE/.gitkeep create mode 100644 .github/workflows/.gitkeep create mode 100644 .gitignore create mode 100644 apps/frontend/README.md create mode 100644 db/README.md create mode 100644 db/init/.gitkeep create mode 100644 db/migrations/.gitkeep create mode 100644 db/seeds/.gitkeep create mode 100644 docs/README.md create mode 100644 docs/adr/.gitkeep create mode 100644 docs/architecture/.gitkeep create mode 100644 etl/README.md create mode 100644 etl/airflow/dags/.gitkeep create mode 100644 etl/airflow/include/.gitkeep create mode 100644 etl/airflow/plugins/.gitkeep create mode 100644 etl/airflow/tests/.gitkeep create mode 100644 infra/README.md create mode 100644 infra/terraform/environments/dev/.gitkeep create mode 100644 infra/terraform/environments/prod/.gitkeep create mode 100644 infra/terraform/modules/.gitkeep create mode 100644 monitoring/README.md create mode 100644 monitoring/alertmanager/.gitkeep create mode 100644 monitoring/grafana/dashboards/.gitkeep create mode 100644 monitoring/grafana/provisioning/dashboards/.gitkeep create mode 100644 monitoring/grafana/provisioning/datasources/.gitkeep create mode 100644 monitoring/prometheus/rules/.gitkeep create mode 100644 scripts/.gitkeep create mode 100644 scripts/README.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..87dcfe0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.py] +indent_size = 4 +max_line_length = 100 + +[*.{tf,tfvars}] +indent_size = 2 + +[Makefile] +indent_style = tab + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/ISSUE_TEMPLATE/.gitkeep b/.github/ISSUE_TEMPLATE/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/.github/workflows/.gitkeep b/.github/workflows/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af1ea90 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# Python +__pycache__/ +*.py[cod] +.venv/ +venv/ +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +.coverage +coverage.xml +htmlcov/ +dist/ +build/ +*.egg-info/ + +# Node / Angular +node_modules/ +.angular/ +apps/frontend/dist/ +apps/frontend/.angular/ +npm-debug.log* +yarn-error.log* + +# Terraform +.terraform/ +.terraform.lock.hcl +*.tfstate +*.tfstate.* +*.tfplan +crash.log +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Airflow +etl/airflow/logs/ +airflow.db +airflow-webserver.pid +standalone_admin_password.txt + +# Environnement et secrets +.env +.env.* +!.env.example +*.pem +*.key +secrets/ + +# Donnees locales +data/ +*.sqlite3 +monitoring/grafana/data/ +monitoring/prometheus/data/ + +# IDE et OS +.idea/ +.vscode/ +*.swp +.DS_Store +Thumbs.db diff --git a/README.md b/README.md index 6ee4d96..b6ab9c8 100644 --- a/README.md +++ b/README.md @@ -1 +1,64 @@ -# ProjetPiscine_EnerVision \ No newline at end of file +# EnerVision + +Monorepo de la plateforme EnerVision : collecte, stockage, analyse et restitution de +series temporelles energetiques, deployee sur une machine on-premise. + +## Stack cible + +| Domaine | Technologie | Emplacement | Etat | +|------------|-------------------------------------|---------------------|---------------| +| Backend | FastAPI, Python 3.14 | `apps/backend` | Initialise | +| Frontend | Angular, Node 24 LTS | `apps/frontend` | A initialiser | +| Base | PostgreSQL + TimescaleDB | `db` | A initialiser | +| ETL | Apache Airflow | `etl/airflow` | A initialiser | +| Infra | Terraform | `infra/terraform` | A initialiser | +| CI/CD | GitHub Actions | `.github/workflows` | A initialiser | +| Monitoring | Prometheus, Grafana, Alertmanager | `monitoring` | A initialiser | + +Seul le backend est initialise a ce stade. Les autres dossiers portent l'arborescence et +un README de cadrage, leur contenu fait l'objet d'un ticket dedie. + +## Arborescence + +``` +. +├── apps/ +│ ├── backend/ API FastAPI +│ └── frontend/ Application Angular +├── db/ +│ ├── init/ Bootstrap PostgreSQL + TimescaleDB +│ ├── migrations/ Migrations SQL versionnees +│ └── seeds/ Jeux de donnees de reference +├── etl/airflow/ +│ ├── dags/ DAGs d'ingestion et d'agregation +│ ├── plugins/ Operateurs et hooks maison +│ ├── include/ Requetes SQL et ressources des DAGs +│ └── tests/ Tests d'integrite des DAGs +├── infra/terraform/ +│ ├── modules/ Modules reutilisables +│ └── environments/ Racines Terraform, une par environnement +├── monitoring/ +│ ├── prometheus/ Collecte et regles d'alerte +│ ├── grafana/ Provisioning et dashboards +│ └── alertmanager/ Routage des alertes +├── docs/ ADR et vues d'architecture +└── scripts/ Outillage local +``` + +## Demarrage + +Prerequis : uv, Docker. Le poste doit disposer de Python 3.14, que `uv` installe seul. + +```bash +make install # dependances du backend +make dev # API sur http://localhost:8000, docs sur /docs +make check # lint + typage + tests +``` + +`make help` liste les cibles disponibles. + +## Conventions + +- Branches : `feat/`, `fix/`, `chore/`, `docs/` suivi d'un libelle court. +- Commits : Conventional Commits, portee = dossier de premier niveau concerne. +- Toute decision structurante donne lieu a un ADR dans `docs/adr`. diff --git a/apps/frontend/README.md b/apps/frontend/README.md new file mode 100644 index 0000000..36b31b4 --- /dev/null +++ b/apps/frontend/README.md @@ -0,0 +1,26 @@ +# Frontend EnerVision + +Le squelette applicatif n'est pas versionne a la main : il est genere par Angular CLI. + +## Initialisation + +Depuis `apps/` : + +```bash +npx --yes @angular/cli@latest new frontend \ + --directory frontend \ + --style=scss \ + --routing \ + --ssr=false \ + --package-manager=npm \ + --skip-git +``` + +Le dossier `apps/frontend` doit etre vide (hors ce README) avant de lancer la commande. + +## Apres generation + +1. Pointer l'API dans `src/environments/` sur `http://localhost:8000/api/v1`. +2. Ajouter le proxy de developpement (`proxy.conf.json`) vers le backend. +3. Verifier que `npm start` sert bien sur le port 4200 attendu par `docker-compose.yml`. +4. Ajouter le `Dockerfile` multi-stage (build Angular puis service statique nginx). diff --git a/db/README.md b/db/README.md new file mode 100644 index 0000000..e80cb3c --- /dev/null +++ b/db/README.md @@ -0,0 +1,10 @@ +# Base de donnees + +PostgreSQL avec l'extension TimescaleDB. Non initialise, voir le ticket dedie. + +- `init` : scripts de bootstrap joues au premier demarrage du conteneur. +- `migrations` : migrations SQL versionnees. +- `seeds` : jeux de donnees de reference. + +Les migrations du schema applicatif expose par l'API vivent dans +`apps/backend/alembic`, pas ici. diff --git a/db/init/.gitkeep b/db/init/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/db/migrations/.gitkeep b/db/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/db/seeds/.gitkeep b/db/seeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..b4ad74d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,4 @@ +# Documentation + +- `adr` : decisions d'architecture, une par fichier, numerotees et immuables. +- `architecture` : schemas et vues d'ensemble. diff --git a/docs/adr/.gitkeep b/docs/adr/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/architecture/.gitkeep b/docs/architecture/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/etl/README.md b/etl/README.md new file mode 100644 index 0000000..cac0f3d --- /dev/null +++ b/etl/README.md @@ -0,0 +1,9 @@ +# ETL + +Orchestration Apache Airflow : ingestion des mesures, agregations continues, +controles de qualite. Non initialise, voir le ticket dedie. + +- `airflow/dags` : DAGs. +- `airflow/plugins` : operateurs et hooks maison. +- `airflow/include` : requetes SQL et ressources referencees par les DAGs. +- `airflow/tests` : tests d'integrite des DAGs. diff --git a/etl/airflow/dags/.gitkeep b/etl/airflow/dags/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/etl/airflow/include/.gitkeep b/etl/airflow/include/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/etl/airflow/plugins/.gitkeep b/etl/airflow/plugins/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/etl/airflow/tests/.gitkeep b/etl/airflow/tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/infra/README.md b/infra/README.md new file mode 100644 index 0000000..bff8fbe --- /dev/null +++ b/infra/README.md @@ -0,0 +1,6 @@ +# Infrastructure + +Provisionnement Terraform de la machine on-premise. Non initialise, voir le ticket dedie. + +- `terraform/modules` : modules reutilisables. +- `terraform/environments/` : racines Terraform, une par environnement. diff --git a/infra/terraform/environments/dev/.gitkeep b/infra/terraform/environments/dev/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/infra/terraform/environments/prod/.gitkeep b/infra/terraform/environments/prod/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/infra/terraform/modules/.gitkeep b/infra/terraform/modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/monitoring/README.md b/monitoring/README.md new file mode 100644 index 0000000..d1b5254 --- /dev/null +++ b/monitoring/README.md @@ -0,0 +1,10 @@ +# Monitoring + +Prometheus, Grafana et Alertmanager. Non initialise, voir le ticket dedie. + +- `prometheus` : configuration de collecte et regles d'alerte. +- `grafana/provisioning` : sources de donnees et fournisseurs de dashboards. +- `grafana/dashboards` : dashboards versionnes au format JSON. +- `alertmanager` : routage et inhibition des alertes. + +Le backend expose deja ses metriques sur `/metrics` au format Prometheus. diff --git a/monitoring/alertmanager/.gitkeep b/monitoring/alertmanager/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/monitoring/grafana/dashboards/.gitkeep b/monitoring/grafana/dashboards/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/monitoring/grafana/provisioning/dashboards/.gitkeep b/monitoring/grafana/provisioning/dashboards/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/monitoring/grafana/provisioning/datasources/.gitkeep b/monitoring/grafana/provisioning/datasources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/monitoring/prometheus/rules/.gitkeep b/monitoring/prometheus/rules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/.gitkeep b/scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..9395406 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,3 @@ +# Scripts + +Outillage local du monorepo. Les taches courantes passent par le `Makefile` racine.