GeotrekCE / Geotrek-admin

Paths management for National Parks and Tourism organizations
https://geotrek.fr
BSD 2-Clause "Simplified" License
136 stars 76 forks source link

Treks list export fails with timeout error #4054

Open marcantoinedupre opened 7 months ago

marcantoinedupre commented 7 months ago

Suite au clic sur le bouton export GPX sur la page liste des Itinéraires, après un temps de chargement long (plusieurs minutes), l'erreur 504 Gateway Time-out s'affiche.

Analyse

Les données exportées sont préparées directement dans la réponse au clic sur l'un des outils d'export (CSV, ShapeFile, GPX). Cette approche est facile à mettre en place et fonctionne pour des volumes de données restreints. Elle pose deux problèmes :

Piste

Pour résoudre ce problème il faudrait implémenter la préparation de l'export par une tâche asynchrone suivi de la notification de l'utilisateur une fois l'export prêt.

  1. clic sur export, un message dit « Préparation export en cours » et la navigation sur geotrek-admin reste possible.
  2. le serveur prépare les données de l'export dans un tâche asynchrone (avec Celery)
  3. le fichier de l'export est enregistré sur le serveur, un lien de téléchargement est mis à disposition de l'utilisateur dans une notification (par mail, ou sur une page de GTA + une notif popup ?, etc)
camillemonchicourt commented 7 months ago

Oui avoir des tâches asynchrones serait une évolution intéressante.

Mais certainement à prévoir de manière globale pour pouvoir les utiliser sur différents modules, différentes tâches (import, exports, ...).

Et cela serait l'occasion de mettre en place un mécanisme de notifications qui lui aussi mériterait d'être global, car il peut être utilisé pour différentes tâches et modules (un de mes objets a été modifié, un signalement auquel j'ai participé a été traité, mon import est terminé...).

Et les notifications pourraient être envoyés par email mais tous les utilisateurs n'en ont pas, au PNE on a aucun email renseigné dans notre Geotrek) et donc aussi dans l'interface avec un espace regroupant toutes les notifications (lues / non lues).