Bug #18930
perfs : passer par la vue SQL globale pour l'API des demandes de l'utilisateur
Statut:
Fermé
Priorité:
Haut
Assigné à:
-
Version cible:
-
Début:
25 septembre 2017
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Description
user_forms = [] for formdef in formdefs: user_forms.extend(formdef.data_class().get_with_indexed_value( 'user_id', user.id)) user_forms.sort(lambda x, y: cmp(x.receipt_time, y.receipt_time))
En mode SQL on devrait passer par la vue SQL globale.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de Nouveau à En cours
--- a/wcs/api.py +++ b/wcs/api.py @@ -505,12 +505,17 @@ class ApiUserDirectory(Directory): return json.dumps(user_info) def get_user_forms(self, user): - formdefs = FormDef.select() - user_forms = [] - for formdef in formdefs: - user_forms.extend(formdef.data_class().get_with_indexed_value( - 'user_id', user.id)) - user_forms.sort(lambda x, y: cmp(x.receipt_time, y.receipt_time)) + if get_publisher().is_using_postgresql() and not get_request().form.get('full') == 'on': + from wcs import sql + from qommon.storage import Equal + user_forms = sql.AnyFormData.select([Equal('user_id', str(user.id))], order_by='receipt_time') + else: + formdefs = FormDef.select() + user_forms = [] + for formdef in formdefs: + user_forms.extend(formdef.data_class().get_with_indexed_value( + 'user_id', user.id)) + user_forms.sort(lambda x, y: cmp(x.receipt_time, y.receipt_time)) return user_forms def drafts(self):
Résultats préliminaires, en local, sur un site avec un nombre conséquent de demandes en cours (72).
Avant: forms -- start 0.221204996109 userforms -- start 0.230206012726 userforms -- end 1.91249394417 forms -- before json dumps 2.05286192894 response -- finish 2.05432701111 Après: forms -- start 0.221588134766 userforms -- start 0.233787059784 userforms -- end 0.649307012558 forms -- before json dumps 0.782056093216 response -- finish 0.783752202988
À analyser plus avant demain, notamment en le testant en vrai sur la recette gnm.
Mis à jour par Thomas Noël il y a plus de 6 ans
♥ et je ne doute pas des résultats. Et le code me parait déjà ok. Tu vois ça pour jeudi ? (si y'a des soucis de perfs actuellement, ça peut, je pense)
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-api-use-sql-global-views-to-get-all-user-forms-when-.patch 0001-api-use-sql-global-views-to-get-all-user-forms-when-.patch ajouté
- Patch proposed changé de Non à Oui
Voilà le même sous forme de patch, j'ai regardé les tests et ils me semblent couvrir de manière plutôt sûre ces API (/api/user/forms & /api/user/drafts).
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit 2cd42f04da80564d08bbc2cd9580a85807ed1a45 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Tue Sep 26 10:35:22 2017 +0200 api: use sql global views to get all user forms (when appropriate) (#18930)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: use sql global views to get all user forms (when appropriate) (#18930)