Bug #23312
vue détaillée des logs: ça affiche "le lendemain"
0%
Description
On fait un
qs = qs.filter(timestamp__gte=date, timestamp__lt=date + datetime.timedelta(days=1))
mais on affiche les logs du plus vieux au plus récent (order_by('-timestamp')), donc quand on demande l'affichage des logs du 2018-04-18 11:00 on se retrouve en haut de l'écran avec les logs du 19 avril à 11h.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 6 ans
L'idée c'était de taper une date, et d'avoir les dates, mais si on a un datetime on pourrait alors le range devrait être différent, genre cinq minutes avant → cinq minutes après ? et/ou début et inverser le tri ?
Mis à jour par Thomas Noël il y a environ 6 ans
- Fichier 0001-manager-handle-datetime-in-full-page-logs-23312.patch 0001-manager-handle-datetime-in-full-page-logs-23312.patch ajouté
- Patch proposed changé de Non à Oui
Mon cahier des charges mental pour cette vue des logs, c'était "pouvoir voir ce qui s'est passé hier à 9h43".
Un patch attaché qui permet de taper "YYYY-MM-DD hh:mm:ss" et ça affiche ce qui s'est passé pile à cette seconde là.
Et sur #23298 les affichages & liens cohérents avec cette idée.
Mis à jour par Frédéric Péters il y a environ 6 ans
Étendre le commentaire "just a date" et y poser quelque chose de l'ordre "just a date, display all events for that date".
Pour l'autre situation, seconds=1, ça ne fait pas un peu court ? (genre taper seconds=60) ? (ou faire ça uniquement sur le date.second==0 ?)
Mis à jour par Thomas Noël il y a environ 6 ans
- Fichier 0001-manager-handle-datetime-in-full-page-logs-23312.patch 0001-manager-handle-datetime-in-full-page-logs-23312.patch ajouté
Ouaip, j'avais pensé au coup du second==0, en me disant que ça serait "dommage" quand on clique sur un log qui s'est effectivement déroulé à 9h43:00... mais en testant en vrai, ça va, ça reste parfaitement utilisable. Allons-y.
Mis à jour par Frédéric Péters il y a environ 6 ans
Mmm, en fait ma lecture initiale était différente, je n'avais pas fait gaffe à :
qs = qs.filter(timestamp__lte=date, timestamp__gt=date - datetime.timedelta(days=1))
J'imaginais la plage restreinte selon qu'on soit sur date, date heure/minute, date heure/minute/secondes; genre,
if date.hour == 0 and date.minute == 0 and date.second == 0: qs = qs.filter(timestamp__gte=date, timestamp__lt=date + datetime.timedelta(days=1)) elif date.second == 0: qs = qs.filter(timestamp__gte=date, timestamp__lt=date + datetime.timedelta(seconds=60)) else: qs = qs.filter(timestamp=date)
(j'ai du mal à me concentrer et à comprendre ces différences gte/lt, +, -, par rapport à l'origine.)
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Et moi j'avais dit que la borne haute ne sert à rien, on a la pagination pour ça mais l'ordre devrait être du plus vieux au plus récent forcément sinon c'est con (le même ordre que dans un fichier de log donc) (d'ailleurs la description du ticket est fausse on affiche du plus récent au plus vieux ce qui est idiot justement).
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0002-paginate-ressources-logs-by-200-rows-23312.patch 0002-paginate-ressources-logs-by-200-rows-23312.patch ajouté
- Fichier 0003-use-RessourceLog-default-ordering-23312.patch 0003-use-RessourceLog-default-ordering-23312.patch ajouté
- Fichier 0004-show-all-logs-after-a-date-fixes-23312.patch 0004-show-all-logs-after-a-date-fixes-23312.patch ajouté
- Fichier 0001-base-order-RessourceLog-by-timestamp-23312.patch 0001-base-order-RessourceLog-by-timestamp-23312.patch ajouté
Je pense que c'est beaucoup plus simple de faire comme ça (manque la migration qui ne sert à rien).
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0001-fix-migration-to-be-merged-in-changed-of-RessourceLo.patch 0001-fix-migration-to-be-merged-in-changed-of-RessourceLo.patch ajouté
Le fix de migration.
Mis à jour par Frédéric Péters il y a environ 6 ans
Arriver sur une page où les lignes affichées correspondent aux plus récentes garde un certain sens; et avoir l'ordre qui change au moment de la recherche, ça peut être bizarre. (note que inverser le tri était déjà noté dans mon premier commentaire) (idéalement ça se combine avec au moins un indicateur du tri sur la colonne).
Mais ici je trouve qu'à la recherche d'une date avoir les logs correspondant à cette date, ça a du sens, chercher une heure précise et avoir les logs lui correspondant, aussi.
Mis à jour par Thomas Noël il y a environ 6 ans
- Fichier 0001-manager-handle-datetime-in-full-page-logs-23312.patch 0001-manager-handle-datetime-in-full-page-logs-23312.patch ajouté
Frédéric Péters a écrit :
J'imaginais la plage restreinte selon qu'on soit sur date, date heure/minute, date heure/minute/secondes; genre
On a chacun un rêve dans cette affaire, le mien c'est uniquement d'afficher les logs de ce qui s'est passé "sur tel appel", ie en général sur les secondes autour d'un certain moment.
Mais ce que tu proposes ça me va aussi, ça colle à mon usage, et le code est plus clair ; cependant le qs.filter(timestamp=date) ne va pas marcher (parce que microsecondes dans les timestamp) donc j'ai remplacé par date→date+1s
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Frédéric Péters a écrit :
Arriver sur une page où les lignes affichées correspondent aux plus récentes garde un certain sens; et avoir l'ordre qui change au moment de la recherche, ça peut être bizarre. (note que inverser le tri était déjà noté dans mon premier commentaire) (idéalement ça se combine avec au moins un indicateur du tri sur la colonne).
Sûr, à la rigueur ça je comprends.
Mais ici je trouve qu'à la recherche d'une date avoir les logs correspondant à cette date, ça a du sens, chercher une heure précise et avoir les logs lui correspondant, aussi.
Pour rester simple on peut inverser l'ordre en cas de recherche sans date mais c'est vrai que c'est surprenant ou alors on muscle un peu la pagination (et ListView ne sera plus suffisant dans ce cas), on permet soit de spécifier une date avant ou après la page et on pose une ancre en fin de page sur laquelle on pointe tout le temps (en ajoutant #end
à tous les liens vers les logs).
- sans filtre sur la date on utilise -timestamp et on fait un reversed() sur le résultat avant de le passer au template
- en fin de template on a un <span id="end"/> sur lequel on peut pointer
- quand on cherche par date ça ajoute un
after=<timestamp>
- dans tous les cas: on conserve l'id et timestamp de la première et de la dernière ligne et on a deux liens:
- un lien "Avant" qui ajoute
?before=<timestamp-première-ligne>,<id-première-ligne>
quand on reçoit ça la vue fait.filter(Q(timestamp__lt=timestamp)|(Q(timestamp=timestamp,id__lt=<id-première-ligne>)).order_by('-timestamp','-id')[:200])
et on affiche en reversed() - un lien "Après" qui ajoute
?after=<timestamp-dernière-ligne>,<id-dernière-ligne>
quand on reçoit ça la vue fait.filter(Q(timestamp__gt=timestamp)|(Q(timestamp=timestamp,id__gt=<id-dernière-ligne).order_by('timestamp', 'id')[:200]
et on affiche dans l'ordre qu'on reçoit
- un lien "Avant" qui ajoute
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch ajouté
- Fichier 0001-base-order-RessourceLog-by-timestamp-23312.patch 0001-base-order-RessourceLog-by-timestamp-23312.patch ajouté
Pas testé le moins du monde, mais donc on je réduis tout au templatags et je pagine comme dans zoo, via les index.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch ajouté
- Fichier 0001-base-order-RessourceLog-by-timestamp-23312.patch 0001-base-order-RessourceLog-by-timestamp-23312.patch ajouté
En plus testé.
Je verrai en plus le rappel du mode de pagination en cours, "après le xxx et contenant blabla", "avant le et contenant etc..".
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch ajouté
- Fichier 0001-base-order-RessourceLog-by-timestamp-23312.patch 0001-base-order-RessourceLog-by-timestamp-23312.patch ajouté
- je cache les liens before/after si je sais qu'il n'y a rien à montrer
- j'ai enlevé le dayfirst=True parce que ça parsait 2018-01-06 en 2018-06-01...
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Fichier 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch ajouté
- Fichier 0001-base-order-RessourceLog-by-timestamp-23312.patch 0001-base-order-RessourceLog-by-timestamp-23312.patch ajouté
Les bons patchs.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Ça peut être intéressant aussi d'avancer/reculer par demi-page (i.e. par paquet de 100 lignes et pas de 200).
Mis à jour par Frédéric Péters il y a environ 6 ans
- Statut changé de En cours à Résolu (à déployer)
Je viens de pousser le dernier patch de Thomas, pour ne pas repartir sur un long tour de commentaires. (notamment aussi, on essaie de mutualiser le code de pagination dans gadjo, ça revenait à nouveau en arrière là-dessus)
commit f449e2826719194b0167808ba04b2b8cd55c66d9 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Fri Apr 20 15:39:44 2018 +0200 manager: handle datetime in full page logs (#23312)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
manager: handle datetime in full page logs (#23312)