export/import metrics

This commit is contained in:
2026-05-13 13:21:49 +02:00
parent 15c01c483f
commit 01acef913b
17 changed files with 293 additions and 1426 deletions
+54
View File
@@ -0,0 +1,54 @@
# tasks.py
from celery import shared_task
from celery.utils.log import get_task_logger
from django.conf import settings
from asgiref.sync import async_to_sync
from modules.planarian_metrics import ReductStoreClient
from scanner.models import SessionExperiment
from .models import ExperimentConfig
logger = get_task_logger(__name__)
def _get_reduct_client() -> ReductStoreClient:
"""Instancie le client ReductStore depuis les settings Django."""
return ReductStoreClient(url=settings.REDUCTSTORE_URL, token=settings.REDUCTSTORE_TOKEN)
@shared_task
def export_experiment_metrics(experiment):
@async_to_sync
async def _do_export(well, planarian, record_type):
client = _get_reduct_client()
await client.connect()
try:
f, n = await client.export_csv(
experiment = experiment.identifier,
well = well,
planarian = planarian,
record_type = record_type,
output_dir = settings.CSV_EXPORT_DIR,
)
logger.warning(f"Export CSV {settings.CSV_EXPORT_DIR}/{f} done, {n} lignes")
except Exception as e:
logger.error(f"Erreur export CSV: {e}")
experiment_configs = ExperimentConfig.objects.filter(experiment_key_id=experiment.id).order_by('well').all()
for conf in experiment_configs:
well = conf.well
count = conf.planarian_count
for record_type in ["frame", "summary"]:
for planarian in range(count):
_do_export(well, planarian, record_type)
@shared_task
def export_session_metrics(session):
experiments = SessionExperiment.experiment_by_session(session.id)
for experiment in experiments:
export_experiment_metrics(experiment)