Project

General

Profile

Développement #50891

dataviz: mettre à jour la liste des statistiques plus fréquemment

Added by Valentin Deniaud almost 4 years ago. Updated almost 4 years ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
04 February 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Actuellement c'est toutes les heures, ce qui peut faire long quand on commence à travailler dans bijoe en créant régulièrement de nouvelles visus.


Files

0001-dataviz-update-statistics-list-every-5-minutes-50892.patch (9.26 KB) 0001-dataviz-update-statistics-list-every-5-minutes-50892.patch Valentin Deniaud, 09 February 2021 06:09 PM
0001-dataviz-update-statistics-list-every-5-minutes-50892.patch (9.2 KB) 0001-dataviz-update-statistics-list-every-5-minutes-50892.patch Valentin Deniaud, 10 February 2021 10:24 AM
0002-dataviz-load-statistics-list-dynamically-50891.patch (8.3 KB) 0002-dataviz-load-statistics-list-dynamically-50891.patch Valentin Deniaud, 11 February 2021 02:59 PM
0001-tests-count-dataviz-queries-50891.patch (1.78 KB) 0001-tests-count-dataviz-queries-50891.patch Valentin Deniaud, 11 February 2021 02:59 PM
0003-dataviz-reduce-queries-number-on-statistics-list-upd.patch (5.56 KB) 0003-dataviz-reduce-queries-number-on-statistics-list-upd.patch Valentin Deniaud, 11 February 2021 02:59 PM
0002-dataviz-improve-queries-on-statistics-list-update-50.patch (3.56 KB) 0002-dataviz-improve-queries-on-statistics-list-update-50.patch Valentin Deniaud, 17 February 2021 11:47 AM
0001-dataviz-move-statistic-list-update-code-50891.patch (5.27 KB) 0001-dataviz-move-statistic-list-update-code-50891.patch Valentin Deniaud, 17 February 2021 11:47 AM
0004-dataviz-refresh-statistics-list-more-frequently-usin.patch (3.29 KB) 0004-dataviz-refresh-statistics-list-more-frequently-usin.patch Valentin Deniaud, 17 February 2021 11:47 AM
0003-misc-add-uwsgi-spooler-50891.patch (3.79 KB) 0003-misc-add-uwsgi-spooler-50891.patch Valentin Deniaud, 17 February 2021 11:47 AM

Associated revisions

Revision 452e671c (diff)
Added by Valentin Deniaud almost 4 years ago

dataviz: move statistic list update code (#50891)

Revision 38ba201a (diff)
Added by Valentin Deniaud almost 4 years ago

dataviz: improve queries on statistics list update (#50891)

Revision a6f2a755 (diff)
Added by Valentin Deniaud almost 4 years ago

misc: add uwsgi spooler (#50891)

Revision e7670e0a (diff)
Added by Valentin Deniaud almost 4 years ago

dataviz: refresh statistics list more frequently using spooler (#50891)

History

#2

Updated by Valentin Deniaud almost 4 years ago

  • Assignee deleted (Valentin Deniaud)
#3

Updated by Valentin Deniaud almost 4 years ago

  • Assignee set to Valentin Deniaud
#4

Updated by Valentin Deniaud almost 4 years ago

Déplacement du code de hourly() vers une commande, qu'on appelle toutes les 5 minutes via cron.

#5

Updated by Thomas Noël almost 4 years ago

Ca prend du temps ? Parce qu'en prod on a bientôt 100 instances bijoe. Pour que le cron soit acceptable chaque 5 minutes il faut qu'il tourne en moins d'une minute sur ce volume (avec une marge de sécurité).

#6

Updated by Valentin Deniaud almost 4 years ago

Thomas Noël a écrit :

Ca prend du temps ? Parce qu'en prod on a bientôt 100 instances bijoe. Pour que le cron soit acceptable chaque 5 minutes il faut qu'il tourne en moins d'une minute sur ce volume (avec une marge de sécurité).

Oui c'est censé être rapide, ça fait par tenant autant de requêtes qu'il y a de sources de stats, c'est à dire deux actuellement (bijoe et a2). En prod,

 time sudo -u combo combo-manage tenant_command runscript update_available_statistics.py --all-tenant

real    1m16,605s
user    0m16,769s
sys    0m1,744s

C'est bien autour d'une minute, à toi de me dire si ça passe ou pas. J'ai rajouté un timeout=5 sur le requests.get pour être plus safe.

#7

Updated by Thomas Noël almost 4 years ago

Discuté rapido au bureau : regarder si on ne pourrait pas plutôt faire juste un cache.

#8

Updated by Valentin Deniaud almost 4 years ago

Après benchmark en prod, la mise à jour de la liste des stats prend une demie seconde au pire sur les tenants les plus chargés, sinon en dessous de 0.1s. Donc faisable de mettre à jour en temps réel pendant le chargement de la page, sans cache.

Une difficulté, c'est que si plusieurs cellules graphe sont présentes sur la même page, il ne faut effectuer cette mise à jour qu'une fois (et pas pour toutes les cellules). Heureusement le problème s'était déjà posé ailleurs, donc utilisation du décorateur cache_during_request prévu à cet effet.

0001 pour montrer que 0002 fait quand même exploser le nombre de requêtes au chargement de la page, proportionnellement au nombre de stats (mais pas au nombre de cellules grâce au décorateur cité plus haut).

Ce qui justifie 0003, ne faire des requêtes que si nécessaire (et maximum 3 si django 2).

#9

Updated by Valentin Deniaud almost 4 years ago

Valentin Deniaud a écrit :

Après benchmark en prod, la mise à jour de la liste des stats prend une demie seconde au pire sur les tenants les plus chargés, sinon en dessous de 0.1s. Donc faisable de mettre à jour en temps réel pendant le chargement de la page, sans cache.

Pour GL, 0.75s (il y a une dizaine de bijoe à aller voir).

#10

Updated by Frédéric Péters almost 4 years ago

Après benchmark en prod, la mise à jour de la liste des stats prend une demie seconde au pire

C'est quand même long une demi-seconde, ou 0,75s à GL.

#11

Updated by Thomas Noël almost 4 years ago

Frédéric Péters a écrit :

Après benchmark en prod, la mise à jour de la liste des stats prend une demie seconde au pire

C'est quand même long une demi-seconde, ou 0,75s à GL.

J'ai l'impression que l'alternative est de passer par un cache mis à jour toutes les x minutes. C'est un délai qui va être, à mon avis, assez frustrant à l'usage ("j'ai mis une visu dans bijoe et je la vois pas dans combo ?" "oui, attendez x minutes").

#12

Updated by Frédéric Péters almost 4 years ago

Ça peut être un job lancé sur la consultation de la page, qui fera qu'à coup sûr ou presque, au reload, ça sera bon. Ça peut aussi être complexifié et ne procéder ainsi qu'en présence de n sources de statistiques. (là on est sur une demi-seconde avec authentic et bijoe, ça passera facilement à une seconde voire plus avec chrono et wcs).

#13

Updated by Valentin Deniaud almost 4 years ago

Frédéric Péters a écrit :

Ça peut être un job lancé sur la consultation de la page, qui fera qu'à coup sûr ou presque, au reload, ça sera bon.

Mais il n'y a pas de système de jobs dans combo. Il s'agirait d'utiliser le spooler uwsgi comme ce qui est fait dans #50723 côté chrono ?

#14

Updated by Frédéric Péters almost 4 years ago

Oui.

#15

Updated by Valentin Deniaud almost 4 years ago

  • Status changed from Solution proposée to En cours

OK, je vais attendre que quelqu'un valide dans chrono avant de m'en inspirer.

#16

Updated by Valentin Deniaud almost 4 years ago

0002 : rescapé de mes précédents patches, c'est moins important maintenant mais toujours bon à prendre j'imagine
0003 : copié depuis chrono, full credit à Lauréline
0004 : un peu pareil

Pour lancer combo avec uwsgi,

COMBO_SETTINGS_FILE=/home/$USER/.config/publik/settings/combo/settings.py uwsgi --chdir . --module=combo.wsgi:application --env DJANGO_SETTINGS_MODULE=combo.settings --master --process 3 --pidfile=/tmp/project-master.pid --http=127.0.0.1:8004 --spooler-python-import=combo.utils.spooler --spooler /var/lib/combo/spooler/

#17

Updated by Frédéric Péters almost 4 years ago

  • Status changed from Solution proposée to Solution validée
#18

Updated by Valentin Deniaud almost 4 years ago

  • Status changed from Solution validée to Résolu (à déployer)
commit e7670e0ab1fa60de69392de687b515097387aed9
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Feb 17 11:37:13 2021 +0100

    dataviz: refresh statistics list more frequently using spooler (#50891)

commit a6f2a755e1ccf7499636615e6e35ea66cd0f06ab
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Feb 17 10:54:20 2021 +0100

    misc: add uwsgi spooler (#50891)

commit 38ba201a5f6b16365f178f387da31eba7927acd2
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Feb 11 11:59:00 2021 +0100

    dataviz: improve queries on statistics list update (#50891)

commit 452e671c7b4577c2020e6fd9930a72b0d5464564
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Feb 17 10:39:02 2021 +0100

    dataviz: move statistic list update code (#50891)
#19

Updated by Frédéric Péters almost 4 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF