diff --git a/README.md b/README.md index 7f861b9..c051d15 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/imapsync_daemon.py b/imapsync_daemon.py index e5a5e38..18d2aaf 100755 --- a/imapsync_daemon.py +++ b/imapsync_daemon.py @@ -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) diff --git "a/systemd/home-migration-migration\\x2ddinum-imapsync_cache.mount" "b/systemd/home-migration-migration\\x2ddinum-imapsync_cache.mount" index 5d2478f..b3fc3bb 100644 --- "a/systemd/home-migration-migration\\x2ddinum-imapsync_cache.mount" +++ "b/systemd/home-migration-migration\\x2ddinum-imapsync_cache.mount" @@ -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 \ No newline at end of file +WantedBy=multi-user.target diff --git a/systemd/imapsync.service b/systemd/imapsync.service index 0cf14f2..6a08f18 100644 --- a/systemd/imapsync.service +++ b/systemd/imapsync.service @@ -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