115 lines
3.6 KiB
Python
Executable File
115 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Reconstruit l'index.json de la webapp à partir de l'inventaire complet.
|
|
Prend en compte tous les fichiers HDF5 sur tous les disques.
|
|
"""
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
from collections import defaultdict
|
|
|
|
def main():
|
|
# Charger l'inventaire
|
|
inv_path = Path(r'F:\seismic_webapp\inventory.json')
|
|
inv = json.load(open(inv_path))
|
|
print(f"Inventaire charge: {len(inv)} fichiers")
|
|
|
|
# Charger l'index existant pour garder les positions
|
|
idx_path = Path(r'F:\seismic_webapp\data\index.json')
|
|
old_idx = json.load(open(idx_path))
|
|
print(f"Index existant: {len(old_idx.get('nodes', {}))} nodes")
|
|
|
|
# Construire le nouvel index
|
|
nodes = {}
|
|
|
|
# Copier les positions existantes
|
|
for node_id, node_data in old_idx.get('nodes', {}).items():
|
|
nodes[node_id] = {
|
|
'position': node_data.get('position'),
|
|
'dates': {},
|
|
'hasDates': False
|
|
}
|
|
|
|
# Ajouter les fichiers de l'inventaire
|
|
files_added = 0
|
|
for f in inv:
|
|
bumper_id = f['bumper_id']
|
|
if not bumper_id:
|
|
continue
|
|
|
|
# Créer le node s'il n'existe pas
|
|
if bumper_id not in nodes:
|
|
nodes[bumper_id] = {
|
|
'position': None,
|
|
'dates': {},
|
|
'hasDates': False
|
|
}
|
|
|
|
# Calculer la date depuis l'epoch
|
|
if f['epoch_time']:
|
|
dt = datetime.fromtimestamp(f['epoch_time'])
|
|
date_str = dt.strftime('%Y-%m-%d')
|
|
else:
|
|
continue
|
|
|
|
# Ajouter à la liste des dates
|
|
if date_str not in nodes[bumper_id]['dates']:
|
|
nodes[bumper_id]['dates'][date_str] = []
|
|
|
|
# Déterminer les canaux (extraire du nom de fichier)
|
|
channel = f['channel']
|
|
channels = [channel] if channel else []
|
|
|
|
# Ajouter le fichier
|
|
file_info = {
|
|
'path': f['filepath'],
|
|
'timestamp': f['epoch_time'],
|
|
'channels': channels,
|
|
'size_bytes': 0 # On n'a pas cette info
|
|
}
|
|
|
|
# Éviter les doublons
|
|
existing_paths = [fi['path'] for fi in nodes[bumper_id]['dates'][date_str]]
|
|
if f['filepath'] not in existing_paths:
|
|
nodes[bumper_id]['dates'][date_str].append(file_info)
|
|
files_added += 1
|
|
|
|
# Marquer les nodes qui ont des dates
|
|
for node_id, node_data in nodes.items():
|
|
node_data['hasDates'] = len(node_data['dates']) > 0
|
|
|
|
# Statistiques
|
|
nodes_with_data = sum(1 for n in nodes.values() if n['hasDates'])
|
|
total_files = sum(
|
|
len(files)
|
|
for n in nodes.values()
|
|
for files in n['dates'].values()
|
|
)
|
|
|
|
print(f"\nNouvel index:")
|
|
print(f" Nodes total: {len(nodes)}")
|
|
print(f" Nodes avec donnees: {nodes_with_data}")
|
|
print(f" Fichiers indexes: {total_files}")
|
|
|
|
# Sauvegarder
|
|
new_idx = {
|
|
'nodes': nodes,
|
|
'sampleRateHz': old_idx.get('sampleRateHz', 200),
|
|
'generated': datetime.now().isoformat()
|
|
}
|
|
|
|
# Backup de l'ancien
|
|
backup_path = idx_path.with_suffix('.json.bak')
|
|
with open(backup_path, 'w') as f:
|
|
json.dump(old_idx, f)
|
|
print(f"\nBackup sauvegarde: {backup_path}")
|
|
|
|
# Sauvegarder le nouveau
|
|
with open(idx_path, 'w') as f:
|
|
json.dump(new_idx, f, indent=2)
|
|
print(f"Nouvel index sauvegarde: {idx_path}")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|