Ajout système de priorisation de synchro : grist_priority_bals.\n modif systemd

This commit is contained in:
MAURA Mathieu
2026-06-15 15:11:56 +02:00
parent 57775c46a9
commit f8562da409
4 changed files with 51 additions and 9 deletions
+5 -1
View File
@@ -1,6 +1,10 @@
Outils de migration vers la DINUM.
# Office 365 to Dimail
# ImapSync
## cache :
https://imapsync.lamiral.info/FAQ.d/FAQ.Use_cache.txt
cp imapsync_daemon.py /root/migration/
cp .env.example /root/migration/.env
+42
View File
@@ -436,6 +436,40 @@ def grist_fetch_bals() -> list[dict]:
return []
def grist_priority_bals() -> dict:
"""
Retourne les BAL où Synchronisation = True.
Trié par 'Date_derniere_passe' (le plus vieux en premier).
Exclut les BAL dont la dernière passe a eu lieu il y a moins de MIN_INTERVAL_MINUTES.
"""
try:
# 1. Récupération triée via l'API Grist
params = {"limit": 1, "filter": {"priority": [True], COL_SYNC: [True]}}
resp = requests.get(
grist_url(TABLE_BALS), headers=GRIST_HEADERS, params=params, timeout=15
)
resp.raise_for_status()
records = resp.json().get("records", [])
# for r in records:
r = records[0]
fields = r["fields"]
# Vérification de la condition de synchronisation globale
if fields.get(COL_SYNC) is not True:
return {}
# Si le timestamp existe, on valide l'écart de temps
if fields.get("Date_derniere_passe") is not None:
return {}
return r
except requests.RequestException as e:
log.error(f"Erreur lecture Grist BALS : {e}")
return {}
def grist_add_historique(
email: str,
status: str,
@@ -754,6 +788,14 @@ def main():
futures[f] = email
log.info(f"[{email}] Job soumis au pool")
# Ajout de la BAL prioritaire
row = grist_priority_bals()
email = row.get(COL_EMAIL, "").strip()
if email not in _running and email != "":
f = pool.submit(run_sync_job, row, dry)
futures[f] = email
log.info(f"[{email}] Job soumis au pool")
if not _shutdown:
time.sleep(POLL_INTERVAL)
@@ -1,5 +1,5 @@
[Unit]
Description=Montage du système de fichiers imapsync_cache
Description=Mount imapsync_cache fs https://imapsync.lamiral.info/FAQ.d/FAQ.Use_cache.txt
Before=imapsync.service
[Mount]
@@ -10,4 +10,4 @@ Options=loop
DirectoryMode=0755
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
+2 -6
View File
@@ -1,24 +1,20 @@
[Unit]
Description=Mon script Python avec montage requis
Description=Imap sync Daemon
After=network.target home-migration-migration\x2ddinum-imapsync_cache.mount
Requires=home-migration-migration\x2ddinum-imapsync_cache.mount
[Service]
Type=simple
# L'utilisateur et le groupe qui exécuteront le script
User=migration
Group=migration
# Changement de répertoire (Equivalent d'un 'cd')
WorkingDirectory=/home/migration/migration-dinum/
# L'environnement (optionnel, utile pour le buffer Python)
#disable log buffering
Environment=PYTHONUNBUFFERED=1
# Commande à lancer (Utilisez TOUJOURS les chemins absolus)
ExecStart=/usr/bin/python3 /home/migration/migration-dinum/imapsync_daemon.py
# Comportement en cas de crash
Restart=on-failure
RestartSec=5s