1

Réorganisation

This commit is contained in:
2025-11-19 17:01:45 +01:00
parent 566d4400ce
commit 617b12c02e
91 changed files with 874 additions and 1715 deletions

View File

@@ -0,0 +1,65 @@
# tests/test_influx_connection.py
from __future__ import annotations
from pathlib import Path
import sys
from contextlib import closing
from influxdb_client.client.exceptions import InfluxDBError
PROJECT_ROOT = Path(__file__).resolve().parents[3]
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from meteo.config import InfluxSettings
from meteo.influx_client import create_influx_client, test_basic_query
def main() -> None:
"""
Teste la communication avec le serveur InfluxDB :
1. Chargement de la configuration depuis l'environnement.
2. Ping du serveur.
3. Exécution d'une requête simple sur le bucket configuré.
"""
settings = InfluxSettings.from_env()
print("Configuration InfluxDB chargée :")
print(f" URL : {settings.url}")
print(f" Org : {settings.org}")
print(f" Bucket : {settings.bucket}")
print()
# Utilisation de `closing` pour garantir la fermeture du client.
with closing(create_influx_client(settings)) as client:
print("→ Ping du serveur InfluxDB…")
if not client.ping():
raise SystemExit("Échec du ping InfluxDB. Vérifiez l'URL et l'état du serveur.")
print("✔ Ping OK")
print("→ Requête de test sur le bucket…")
tables = test_basic_query(client, settings.bucket)
# On fait un retour synthétique
nb_tables = len(tables)
nb_records = sum(len(table.records) for table in tables)
print(f"✔ Requête de test réussie : {nb_tables} table(s), {nb_records} enregistrement(s) trouvés.")
if nb_records == 0:
print("⚠ Le bucket est accessible, mais aucune donnée sur la dernière heure.")
else:
# Affiche un aperçu de la première table / premier record
first_table = tables[0]
first_record = first_table.records[0]
print("Exemple de point :")
print(f" time : {first_record.get_time()}")
print(f" measurement : {first_record.get_measurement()}")
print(f" field : {first_record.get_field()}")
print(f" value : {first_record.get_value()}")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,68 @@
# tests/test_influx_entities.py
from __future__ import annotations
from pathlib import Path
import sys
from contextlib import closing
PROJECT_ROOT = Path(__file__).resolve().parents[3]
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from meteo.config import InfluxSettings
from meteo.influx_client import create_influx_client
from meteo.schema import (
list_measurements,
list_measurement_tag_keys,
list_measurement_tag_values,
)
def main() -> None:
"""
Explore les tags des measurements du bucket :
- affiche les keys de tags pour chaque measurement
- si un tag `entity_id` est présent, affiche la liste de ses valeurs
"""
settings = InfluxSettings.from_env()
print(f"Bucket InfluxDB : {settings.bucket}")
print()
with closing(create_influx_client(settings)) as client:
measurements = list_measurements(client, settings.bucket)
if not measurements:
print("⚠ Aucun measurement trouvé dans ce bucket.")
return
for meas in measurements:
print(f"Measurement « {meas} »")
tag_keys = list_measurement_tag_keys(client, settings.bucket, meas)
if not tag_keys:
print(" (aucun tag trouvé)")
print()
continue
print(" Tag keys :")
for key in tag_keys:
print(f" - {key}")
if "entity_id" in tag_keys:
entity_ids = list_measurement_tag_values(
client,
settings.bucket,
meas,
tag="entity_id",
)
print(" entity_id possibles :")
for eid in entity_ids:
print(f" - {eid}")
print()
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,54 @@
# tests/test_influx_schema.py
from __future__ import annotations
from pathlib import Path
import sys
from contextlib import closing
PROJECT_ROOT = Path(__file__).resolve().parents[3]
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from meteo.config import InfluxSettings
from meteo.influx_client import create_influx_client
from meteo.schema import list_measurements, list_measurement_fields
def main() -> None:
"""
Explore le schéma du bucket InfluxDB configuré :
- liste des measurements disponibles
- pour chacun, liste des champs (_field) et de leur type
"""
settings = InfluxSettings.from_env()
print(f"Bucket InfluxDB : {settings.bucket}")
print()
with closing(create_influx_client(settings)) as client:
measurements = list_measurements(client, settings.bucket)
if not measurements:
print("⚠ Aucun measurement trouvé dans ce bucket.")
return
print("Measurements disponibles :")
for name in measurements:
print(f" - {name}")
print()
for name in measurements:
print(f"Champs pour measurement « {name} » :")
fields = list_measurement_fields(client, settings.bucket, name)
if not fields:
print(" (aucun champ trouvé)")
else:
for field in fields:
print(f" - {field.name} (type: {field.type})")
print()
if __name__ == "__main__":
main()