# BMA : améliorer les temps de réponse de \`/wot/requirements/:search\`

**URL:** https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138
**Category:** Duniter-v1
**Tags:** duniter, bma
**Created:** [15 May 2023 09:28 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138 "2023-05-15T09:28:30Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 09:28 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/1 "2023-05-15T09:28:30Z")

</div>

J’aimerai améliorer les temps de réponse de `/wot/requirements/:search` dans l’API BMA.

J’ai trouvé les test unitaires autour de cette requete, et le code impliqué (`app/service/BlockahainService.ts` notamment `requirementsOfIdentity()`).

J’ai plusieurs pistes, mais j’aurais aimé avoir l’avis des dev (cc @cgeek) :

- Éviter la phase de recherche dans la wot, lorsque `:search` est une pubkey :
  - Soit pas une regexp
  - Soit par une nouvelle URL du type `/wot/requirements/pubkey/:pubkey`

- Paralléliser les nombreux appels fait dans `requirementsOfIdentity()`, avec Promise.all(). Mais cela va complexifier la lecture du code. Ce n’est peut pas top ?
- Faire une test unitaire avec de la charge, pour mesurer le gain. Mais il me faudrait générer un WoT importante. Y a t’il moyen de faire autrement ? Par exemple existe t il des tests sur une BDD de prod ?

Question niveau IDE :

- webstorm me lance toujours 2 fois les tests unitaires, je ne comprends pas bien pourquoi. D’une manière général, j’aurais bien aimé un peu d’aide @cgeek pour configurer mon IDE.  
Aurais 15 min à m’accorder pour une visio ?

Merci pour votre aide.

---

<div class="post-metadata">

### Author: ![tuxmain](https://forum.duniter.org/user_avatar/forum.duniter.org/tuxmain/32/6423_2.png) [@tuxmain](https://forum.duniter.org/u/tuxmain)
#### Post date: [15 May 2023 09:35 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/2 "2023-05-15T09:35:51Z")

</div>

> [@kimamila](#):
>
> Éviter la phase de recherche dans la wot, lorsque `:search` est une pubkey :
> 
> - Soit pas une regexp
> - Soit par une nouvelle URL du type `/wot/requirements/pubkey/:pubkey`

Une pubkey valide est une valeur légale pour un pseudo, donc avec la solution regex il y a une ambiguïté. La deuxième solution me semble plus propre (en gardant l’ancien chemin qui cherche dans les pseudos et pubkeys, pour la rétrocompatibilité).

Mieux vaut éviter les regex (comme en atteste le dernier gros bug de Duniter, et parce que c’est lent), pour détecter une pubkey il suffit de la décoder ou de vérifier sa longueur et ses caractères.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 09:45 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/3 "2023-05-15T09:45:16Z")

</div>

Oui, cela me semble aussi une solution plus propre.  
Pourrais tu m’aider @tuxmain côté mise en oeuvre de l’environnement de dev ? (même sans parler de WebStorm)

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 09:52 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/4 "2023-05-15T09:52:19Z")

</div>

Ou au moins pour faire le diagnostique d’où est perdu le plus de temps ?

---

<div class="post-metadata">

### Author: ![tuxmain](https://forum.duniter.org/user_avatar/forum.duniter.org/tuxmain/32/6423_2.png) [@tuxmain](https://forum.duniter.org/u/tuxmain)
#### Post date: [15 May 2023 09:57 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/5 "2023-05-15T09:57:09Z")

</div>

Je peux aider sur ce qui concerne Rust, cargo, mais sinon c’est l’inconnu.

Ok je peux essayer de voir dans le code où la requête est lente.

Edit: Le plus simple serait de pouvoir faire tourner la requête isolément dans une commande, et d’utiliser un profileur comme [flamegraph](https://crates.io/crates/flamegraph)…

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 11:30 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/6 "2023-05-15T11:30:13Z")

</div>

3 posts were split to a new topic: [Débugger Duniter v1](https://forum.duniter.org/t/debugger-duniter-v1/11139)

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 12:42 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/7 "2023-05-15T12:42:35Z")

</div>

@cgeek j’ai créé le ticket [#1439](https://git.duniter.org/nodes/typescript/duniter/-/issues/1439) sur Duniter.

Peux tu regarder ma note quand tu auras un moment ?  
Désolé de te déranger avec ca…

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 13:08 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/8 "2023-05-15T13:08:07Z")

</div>

A priori, @moul me dit que Silkaj utilise `/wot/requirements/:search` comme Cesium : uniquement avec une pubkey.

Plutot que de créer une nouvelle URL, je me demande donc si ce n’est pas mieux de faire simplement évoluer celle-ci en `/wot/requirements/:pubkey`. Cela permettrait de rendre tous les clients plus rapide, sans mise à jour logicielle.  
Est-ce que d’autres logiciels utilise cette URL BMA ? cc @Paidge @vit @tuxmain @gerard94 @HugoTrentesaux @poka …

D’ailleurs, j’ai la même question pour les URL `/wot/certified-by` et `/wot/certifiers-of` : N’est-ce pas toujours la pubkey qui est requeteée ?  
On pourrait corriger cela aussi, ou bien ajouter des URL `/wot/certified-by/pubkey/:pubkey` et `/wot/certifiers-of/pubkey/:pubkey`

Le problème d’ajouter de nouvelle URL, c’est que les noeuds qui n’auront pas été mises à jour deviendront incompatible avec Cesium…  
Une autre alternative est d’ajouter plutot un “query param” à la requete, par exemple :  
`/wot/requirements/:search?pubkey=true&uid=false`

Merci de me donner votre avis.

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [15 May 2023 13:28 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/9 "2023-05-15T13:28:37Z")

</div>

A vrai dire, je ne maîtrise pas BMA et ne sait pas bien à quoi corresponds `:search` en dehors d’une pubkey, c’est un `script` selon Duniter c’est ça ?

De mon côté je ne connais aucun service utilisant autre chose qu’une pubkey à cet endroit (dans ce que j’ai implémenté comme g1-stats par exemple).

Il faudrait confirmation de @Paidge pour wotwizard-ui mais je pense qu’il ne se base que sur le serveur wot-wizard, qui lui se base uniquement sur les bases de données de Duniter directement et des fichiers tampon.

> [@kimamila](#):
>
> Une autre alternative est d’ajouter plutot un “query param” à la requete, par exemple :  
> `/wot/requirements/:search?pubkey=true&uid=false`

Ca me semble une bonne idée, ça permet de ne pas casser la compatibilité avec les versions de Cesium et Duniter tout en gardant la possibilité des recherches avancés.  
Mais mon humble avis perso est de ne pas t’embêter avec ces recherches avancés qui ne semblent pas implémentés nul part (attendre confirmation de Paidge tout de même), et de simplifié l’API à ce niveau si cela permet des gains en efficacité.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 13:31 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/10 "2023-05-15T13:31:42Z")

</div>

> [@poka](#):
>
> A vrai dire, je ne maîtrise pas BMA et ne sait pas bien à quoi corresponds `:search` en dehors d’une pubkey, c’est un `script` selon Duniter c’est ça ?

C’est soit une pubkey, soit un uid (ou une partie de).  
Ce qui est étrange, c’est que l’implémentation depuis LevelDB n’est plus la même que quand Duniter utilisait SqlLite. LevelDB fait l’équivalent d’un like; sous SQLLite c’était un `uid = ? or pubkey = ?`  
Bref.

> [@poka](#):
>
> Ca me semble une bonne idée, ça permet de ne pas casser la compatibilité avec les versions de Cesium et Duniter tout en gardant la possibilité des recherches avancés.

Oui, je suis partie dans ce sens là.

---

<div class="post-metadata">

### Author: ![Paidge](https://forum.duniter.org/letter_avatar/paidge/32/5_5575768a8748004e209b776fc1b2916d.png) [@Paidge](https://forum.duniter.org/u/Paidge)
#### Post date: [15 May 2023 13:37 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/11 "2023-05-15T13:37:29Z")

</div>

Après vérification du script de @tuxmain pour la wotmap, il va chercher directement dans `"~/.config/duniter/duniter_default/data/leveldb"`.

Pour wotwizard-ui, c’est effectivement un serveur Wotwizard qui est interrogé. Donc, pas d’impact de ce côté- là 🙂

Même si je ne m’y connais pas tellement côté Duniter, je pense que pouvoir requêter directement sur une clé permettrait sûrement de gagner en temps de réponse (ça me paraît logique en tous cas).

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 13:48 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/12 "2023-05-15T13:48:51Z")

</div>

Voici une [merge request](https://git.duniter.org/nodes/typescript/duniter/-/merge_requests/1422) qui implémente donc :

- `/wot/requirements/:search?pubkey=true` =\> recherche uniquement par clef publique
- tests unitaires : je me suis basé sur ceux testant sur `/wot/requirements/:search`

Reste à voir les question que j’ai laissé en suspends (utilisant du `merge()` - cf les 2 TODO dans la merge request)

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [15 May 2023 14:09 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/13 "2023-05-15T14:09:03Z")

</div>

> [@kimamila](#):
>
> d’autres logiciels

Perso j’ai jamais utilisé d’API Duniter, sauf dans Datajune où je récupérais uniquement les blocs avec `/blockchain/block/000`. Par contre sur la v2, je devrais pouvoir répondre à toutes les questions \>\<.

---

<div class="post-metadata">

### Author: ![Pini](https://forum.duniter.org/user_avatar/forum.duniter.org/pini/32/6819_2.png) [@Pini](https://forum.duniter.org/u/Pini)
#### Post date: [15 May 2023 14:47 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/14 "2023-05-15T14:47:04Z")

</div>

@kimamila : cette version est maintenant en service sur mon noeud mirroir [duniter.pini.fr](http://duniter.pini.fr) (cumulée avec la MR précédente).

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [15 May 2023 15:17 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/15 "2023-05-15T15:17:23Z")

</div>

Tikka est pour Duniter v2S donc pas de soucis pour modifier BMA de mon côté.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 15:46 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/16 "2023-05-15T15:46:04Z")

</div>

> [@Pini](#):
>
> @kimamila : cette version est maintenant en service sur mon noeud mirroir [duniter.pini.fr](http://duniter.pini.fr) (cumulée avec la MR précédente).

Merci @Pini !!  
Je viens de tester : on est passé de 30s à 3s sur ton instance 🙂 donc **gain x10**  
Sur [g1.duniter.org](http://g1.duniter.org), ont devrait passer à 200ms, ce qui me semble déjà plus acceptable.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [15 May 2023 16:31 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/17 "2023-05-15T16:31:48Z")

</div>

Voila, j’ai également fait une MR sur optimisation des `/wot/certifiers-of/:search` et `/wot/certified-by/:search` en traitant la présence de `?pubkey` : [[enh] Optimize BMA `/wot/certifiers-of/:search` and `/wot/certified-by/:search` - Close #1440 (!1423) · Merge requests · nodes / typescript / duniter · GitLab](https://git.duniter.org/nodes/typescript/duniter/-/merge_requests/1423)

@Pini si tu as le temps de déployer ca ? (pas urgent, hein). Je penses qu’on aura déjà optimiser la navigation dans les comptes/profiles, dans Cesium.

---

<div class="post-metadata">

### Author: ![Pini](https://forum.duniter.org/user_avatar/forum.duniter.org/pini/32/6819_2.png) [@Pini](https://forum.duniter.org/u/Pini)
#### Post date: [15 May 2023 17:00 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/18 "2023-05-15T17:00:25Z")

</div>

> [@kimamila](#):
>
> @Pini si tu as le temps de déployer ca ?

C’est fait.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [17 May 2023 08:01 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/19 "2023-05-17T08:01:53Z")

</div>

2 posts were merged into an existing topic: [Débugger Duniter v1](https://forum.duniter.org/t/debugger-duniter-v1/11139/5)

---

<div class="post-metadata">

### Author: ![Pini](https://forum.duniter.org/user_avatar/forum.duniter.org/pini/32/6819_2.png) [@Pini](https://forum.duniter.org/u/Pini)
#### Post date: [16 May 2023 14:47 UTC](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138/21 "2023-05-16T14:47:09Z")

</div>

La CI pour cette MR plante sur le job `tests` :

```auto
$ npm run format:check
> duniter@1.9.0-dev format:check /builds/nodes/typescript/duniter
> prettier --list-different 'app/**/*.{ts,json}'
app/lib/dal/indexDAL/leveldb/LevelDBIindex.ts
app/lib/dal/indexDAL/sqlite/SqliteIIndex.ts
app/lib/dal/sqliteDAL/IdentityDAL.ts
app/modules/bma/lib/controllers/wot.ts
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! duniter@1.9.0-dev format:check: `prettier --list-different 'app/**/*.{ts,json}'`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the duniter@1.9.0-dev format:check script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/user/.npm/_logs/2023-05-16T14_33_27_147Z-debug.log
Cleaning up project directory and file based variables 00:01
ERROR: Job failed: exit code 1

```

Ça vous parle ?

[Next page](https://forum.duniter.org/t/bma-ameliorer-les-temps-de-reponse-de-wot-requirements-search/11138.md?page=2)
