Étiqueter les événements de progression par run pour filtrer les retardataires
This commit is contained in:
@ -12,6 +12,7 @@ ajout (une ligne < 4 Ko avec O_APPEND est atomique sur POSIX).
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
from pathlib import Path
|
||||
@ -54,6 +55,9 @@ def report_event(output_dir, tile, phase, state, detail=None, res=None):
|
||||
(ProcessPoolExecutor, 'spawn') ne partagent aucun descripteur de fichier.
|
||||
"""
|
||||
event = {"ts": round(time.time(), 3), "tile": tile, "phase": phase, "state": state}
|
||||
run_id = os.environ.get("LIDAR_RUN_ID")
|
||||
if run_id:
|
||||
event["run"] = run_id
|
||||
if detail is not None:
|
||||
event["detail"] = detail
|
||||
if res is not None:
|
||||
@ -149,6 +153,15 @@ def aggregate_tiles(events, viz_labels=None):
|
||||
return result
|
||||
|
||||
|
||||
def progress_snapshot(output_dir, viz_labels=None):
|
||||
"""État consolidé des tuiles du dernier run (prêt pour /api/status)."""
|
||||
return aggregate_tiles(read_events(output_dir), viz_labels=viz_labels)
|
||||
def progress_snapshot(output_dir, viz_labels=None, run_id=None):
|
||||
"""État consolidé des tuiles du dernier run (prêt pour /api/status).
|
||||
|
||||
run_id (LIDAR_RUN_ID posé par la webapp) : ne garde que les événements de
|
||||
CE run — les workers d'un run annulé peuvent continuer d'écrire (O_APPEND)
|
||||
après la troncature du journal par le run suivant, et pollueraient sinon
|
||||
la file affichée. Sans run_id (run CLI autonome) : tout le journal.
|
||||
"""
|
||||
events = read_events(output_dir)
|
||||
if run_id is not None:
|
||||
events = [ev for ev in events if isinstance(ev, dict) and ev.get("run") == run_id]
|
||||
return aggregate_tiles(events, viz_labels=viz_labels)
|
||||
|
||||
Reference in New Issue
Block a user