Projet

Général

Profil

Bug #23312

vue détaillée des logs: ça affiche "le lendemain"

Ajouté par Thomas Noël il y a environ 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
20 avril 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

0001-manager-handle-datetime-in-full-page-logs-23312.patch (1,11 ko) 0001-manager-handle-datetime-in-full-page-logs-23312.patch Thomas Noël, 20 avril 2018 15:42
0001-manager-handle-datetime-in-full-page-logs-23312.patch (1,4 ko) 0001-manager-handle-datetime-in-full-page-logs-23312.patch Thomas Noël, 20 avril 2018 16:37
0002-paginate-ressources-logs-by-200-rows-23312.patch (857 octets) 0002-paginate-ressources-logs-by-200-rows-23312.patch Benjamin Dauvergne, 20 avril 2018 17:59
0003-use-RessourceLog-default-ordering-23312.patch (984 octets) 0003-use-RessourceLog-default-ordering-23312.patch Benjamin Dauvergne, 20 avril 2018 17:59
0004-show-all-logs-after-a-date-fixes-23312.patch (840 octets) 0004-show-all-logs-after-a-date-fixes-23312.patch Benjamin Dauvergne, 20 avril 2018 17:59
0001-base-order-RessourceLog-by-timestamp-23312.patch (698 octets) 0001-base-order-RessourceLog-by-timestamp-23312.patch Benjamin Dauvergne, 20 avril 2018 17:59
0001-fix-migration-to-be-merged-in-changed-of-RessourceLo.patch (853 octets) 0001-fix-migration-to-be-merged-in-changed-of-RessourceLo.patch Benjamin Dauvergne, 20 avril 2018 18:01
0001-manager-handle-datetime-in-full-page-logs-23312.patch (1,54 ko) 0001-manager-handle-datetime-in-full-page-logs-23312.patch Thomas Noël, 20 avril 2018 18:13
0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch (8,31 ko) 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch Benjamin Dauvergne, 20 avril 2018 18:59
0001-base-order-RessourceLog-by-timestamp-23312.patch (1,25 ko) 0001-base-order-RessourceLog-by-timestamp-23312.patch Benjamin Dauvergne, 20 avril 2018 18:59
0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch (8,76 ko) 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch Benjamin Dauvergne, 20 avril 2018 19:26
0001-base-order-RessourceLog-by-timestamp-23312.patch (1,25 ko) 0001-base-order-RessourceLog-by-timestamp-23312.patch Benjamin Dauvergne, 20 avril 2018 19:26
0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch (8,76 ko) 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch Benjamin Dauvergne, 20 avril 2018 19:46
0001-base-order-RessourceLog-by-timestamp-23312.patch (1,25 ko) 0001-base-order-RessourceLog-by-timestamp-23312.patch Benjamin Dauvergne, 20 avril 2018 19:46
0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch (9,05 ko) 0002-paginate-logs-by-timestamp-and-pk-not-by-page-23312.patch Benjamin Dauvergne, 20 avril 2018 19:46
0001-base-order-RessourceLog-by-timestamp-23312.patch (1,25 ko) 0001-base-order-RessourceLog-by-timestamp-23312.patch Benjamin Dauvergne, 20 avril 2018 19:46

Révisions associées

Révision f449e282 (diff)
Ajouté par Thomas Noël il y a environ 6 ans

manager: handle datetime in full page logs (#23312)

Historique

#1

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 ?

#2

Mis à jour par Thomas Noël il y a environ 6 ans

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.

#3

Mis à jour par Thomas Noël il y a environ 6 ans

  • Statut changé de Nouveau à En cours
#4

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 ?)

#5

Mis à jour par Thomas Noël il y a environ 6 ans

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.

#6

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.)

#7

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).

#10

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.

#11

Mis à jour par Thomas Noël il y a environ 6 ans

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

#12

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).

Donc ça donnerait:
  • 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
#13

Mis à jour par Thomas Noël il y a environ 6 ans

(je ne modifierai pas mon patch)

#14

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Pas testé le moins du monde, mais donc on je réduis tout au templatags et je pagine comme dans zoo, via les index.

#15

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

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..".

#16

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Encore quelques ajustements:
  • 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...
#18

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).

#19

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)
#20

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF