ĞDev indexer

Et maintenant, grâce à @ManUtopiK qui a publié le code de https://git.duniter.org/manutopik/duniter-indexer (j’ai complété la doc d’installation), nous avons un endpoint GraphQL public https://duniter-indexer.coinduf.eu/v1/graphql que vous pouvez tester dans une interface graphql comme https://graphiql-online.com/graphiql en attendant la prochaine release de Ǧecko qui l’utilise déjà !

(laissez un peu de temps à l’indexeur de finir de rattraper mon nœud rpc lui-même en train de rattraper le reste de la blockchain)

pour partager une requête
[details="requête"]
```graphql

```
[/details]

[details="variables"]
```json

```
[/details]

[details="réponse"]
```json

```
[/details]
5 Likes

Félicitations @ManUtopiK :clap:

Bon j’avais déjà vu les avancées en coulisse et est passé du temps à t’aider à bien concevoir tout ça aux RML et après, mais tu as été très rapide pour maturer le projet :smiley:

J’ai juste 2 petites remarques sur les dernières avancées :

  • Le numéro de bloc, nommé aussi hauteur de bloc, devrait être nommé number ou height, le terme actuel (index) ne conviens pas.
  • Les identités du genesis sont indiquées comme créées au bloc #1, alors qu’elles sont créées au bloc #0 :wink:
4 Likes

@ManUtopiK ce serait bien de fournir une image docker pour l’indexer, ainsi je pourrais l’ajouter au compose de mon nœud d’archive pour héberger une instance :slight_smile:

EDIT: Aussi on ne devrait pas avoir besoin d’installer hasura cli pour initiatiser la DB, on doit pouvoir faire ça uniquement via une config dans le compose sur un ou plusieurs micro-services, il faut donc que l’un des micro-service s’occupe d’initialiser les metadata et de run les migrations. Je vois dans la doc d’hasura que c’est possible: Auto-apply migrations/metadata when the server starts (config v2) | Hasura GraphQL Docs (lien v3).

3 Likes

Ok, je met docker dans ma todo list.
Je ne savais pas qu’on pouvais appliquer les migrations et metadata au démarage.
Le lien pour la config v3 : Auto-apply migrations/metadata when the server starts | Hasura GraphQL Docs
Je vais intégrer ça…

4 Likes

@ManUtopiK je te recommande de builder et publier l’image docker directement depuis la CI, tu as plein d’exemples dans les dépôts du groupe docker: docker · GitLab

Si tu as besoin d’aide je peux t’aider en visio, je pense que ça vaut le coup que tu apprennes à le faire, c’est des compétences qui te seront utiles :slight_smile:

C’est l’inverse qui aurait été étonnant, je suis parti du principe que c’était forcément possible, car c’est nécessaire pour pouvoir déployer en prod avec docker, à partir de là j’ai juste cherché dans leur doc et j’ai trouvé en 5 min :slight_smile:

Mais ça me semble souhaitable que pour la prod, le mieux c’est que tu es 2 docker-compose, un pour le dev et un pour la prod, car les besoins ne sont pas les mêmes :wink:

3 Likes

Tiens justement, où peut-on trouver le job qui build l’image duniter/duniter-v2s ?

bah ici, non ? https://git.duniter.org/nodes/rust/duniter-v2s/-/jobs

Ah bah oui, j’ai bêtement suivi le lien qui parlait du groupe docker contenant les projets d’exemple. Mais en effet, merci.

@cgeek c’est le job deploy_docker_release_tag tout à la fin du fichier .gitlab-ci.yml:

Mais la CI de duniter-v2s n’est pas un bon exemple pour débuter, car elle est complexe, j’utilise un « template de job » car je build plusieurs types d’images selon les conditions, et en plus je récupère le binaire buildé dans un autre job, afin de ne compiler qu’une fois.

Pour débuter il vaut mieux s’inspirer d’une CI plus simple, comme celle-ci par exemple: .gitlab-ci.yml · master · docker / dunitrust / dunitrust-rs-ci · GitLab

Si tu veux je viens de te faire une MR.

1 Like

Génial ! Merci :slight_smile:

1 Like

Bon, avec tout ça, j’ai pris du retard sur mon taf, puis la fin d’année scolaire tout le monde s’excite…
Je vais pas trop pouvoir me mettre dessus cette semaine.

Du coup j’ai créé des tickets, si ça vous avez envie de contribuer !

@elois Il y a pas le feu, mais si tu peux jetter un oeil sur pourquoi la subscription au storage ne retourne rien ? Est-ce que c’est bien le bon ?

1 Like

Oui moi c’est pareil haha, je vais être obligé de lever un peu le pied :sweat_smile:

Est-ce quelqu’un peut ajouter la dockerisation ? peut-être @Pini ?

C’est juste ton préfix qui n’est pas bon, je t’ai répondu dans l’issue dédiée :slight_smile:

2 Likes

J’ai tenté de faire un build Prod, mais j’ai rencontré l’erreur pnpm start: ERR_REQUIRE_ESM. Aurais-tu une piste ?

1 Like

Oui. Je suis parti avec mon boilerplate fastify-vite qui utilse vite-plugin-node qui est bien pratique quand on fait du front, mais pas trop pour cet indexer en fait.
Et mon plugin fastify-hasura marche pas avec vite parce qu’il est fait en type module (import … from …) ou peut-être que c’est juste qu’il a type:module dans le package.json.

Bref, pas eu le temps de corriger tout ça…
Soit je vire vite, mais c’est dommage car on perd vitest qui est excellent. Soit je met à jour mon plugin fastify-hasura…
J’aurais plus de temps la semaine prochaine pour ça.

2 Likes

J’ai pris quelques jours de vacance. Je jetterai un oeil.

1 Like

J’ai déjà regardé, mais pas encore publié. En fait comme indiqué ci-dessus je bloque sur le build « prod » avec l’erreur ERR_REQUIRE_ESM, qui nécessite une expertise un peu trop coûteuse pour moi, @ManUtopiK sera plus efficace.

1 Like

Salut à tous !

De mon côté j’avance aussi, avec un indexeur ES sur la GDev, qui me permettra de maintenir les services Cesium+ et Gchange (suivi des TX pour les financements participatifs).
Il a une lib PolkaJ qui permet d’accéder à l’API RPC, en Java, et qui me va très bien (pour le moment).
Il sera ensuite facile de mettre en place une API GraphQL au dessus du cluster ES, pour servir les logiciels clients (wallets).

J’utilise PostgreSQL au boulot, en prod, et je peux assurer que les perfs n’ont rien à voir. Et puis je voudrais faire en sorte que l’existant continuer de fonctionner.
Après si on peut harmoniser les API GraphQL qui en sorte, c’est mieux. Mais de toute manière je n’en suis pas encore rendu là.

a+

2 Likes

Je me suis rabattu sur la solution consistant à forker fastify-hasura et à lui retirer son "type": "module". MR!5.

Avec cette MR, on peut lancer la stack complète depuis les sources avec :

cp .env.production .env
docker-compose -f docker-compose.yaml -f docker-compose.prod.yaml up -d

Et il existe la même idée mais pour lancer en mode dev.

J’ai déjà testé cette nouvelle version chez moi en déployant : https://idx.gdev.cgeek.fr.

@poka voudrais-tu bien tester de brancher Gecko dessus ? Il me semble que tu peux le faire.
Tu devrais avoir des données plus à jour car l’indexeur était buggué et ne réalisait qu’une indexation initiale et n’indexait pas les blocs suivants, or j’ai corrigé ce point sur mon noeud.

3 Likes

Je n’arrive pas à requêter de endpoint à cette adresse.

Il devrait y avoir un endpoint du style https://idx.gdev.cgeek.fr/v1/graphql, ainsi qu’un accès à la console hasura ici https://idx.gdev.cgeek.fr/console, comme pour ce endpoint: https://duniter-indexer.coinduf.eu/console

1 Like