Sortie de la version 2.0 de WotWizard

J’ai le plaisir d’annoncer que la version 2.0 de WotWizard est disponible sur Github. Les nouveautés :

  • Deux exécutables :

    • WWServer.exe fait tous les calculs et sort les résultats sous la forme de deux fichiers au format json
    • WotWizard.exe lit ces fichiers et les affiche ; il relance périodiquement WWServer.exe
  • Production et affichage (éventuel) de métadonnées, incluant notamment la structure File à la base des calculs, ce qui peut faciliter la compréhension des résultats finaux.

Un serveur Web n’aura qu’à installer WWServer.exe et exploiter ses fichiers de sortie. Pour une utilisation individuelle, l’installation de WotWizard.exe peut être souhaitable.

6 Likes

Version dores et déjà déployée sur wot-wizard.duniter.org.

5 Likes

Je suis entrain de tenter une intégration de WotWizard via gitlab-ci, mais il semblerait que WWServer.exe ai quand même besoin d’une environnement graphique pour fonctionner :confused:

Est-ce que je m’y prend mal ?


(outre le faite que mon script sera à améliorer coté perf/cache une fois qu’il sera fonctionnel)

PS : test complémentaire sous windows :

Non c’est un false flag, le vrai problème est que ton wine doit configurer le lecteur “e:” qui doit pointer vers le $HOME/.config/duniter de ta machine hôte. Et ce répertoire d’être alimenté par un nœud Duniter qui utilise le dossier duniter_default.

Quand ce sera le cas, tu pourras voir la création d’un dossier “Duniter” aux côtés de WWServer.exe, et si tout se passe bien tu devrais constater la création d’un fichier “DBase.data” qui est la base de données propre à WotWizard, alimentée donc à partir de la base de données de Duniter. Voir ce fichier exister et être alimenté signifie que to WWServer.exe tourne correctement.

1 Like

Ok, donc sous Windows 7, avec WWServer.exe dans un dossier, accompagné de sqlite3.dll, de duniter.db et d’un dossier Duniter contenant un dossier Rsrc contenant Init.txt contenant “duniter.db”

J’obtiens bien après quelques minutes (entre 4 et 5 minutes) les fichiers WWByDate.json et WWMeta.json attendu.

En-revanche, quand je tente de faire la même chose sous linux, sans environnement graphique, avec wine (dans des conteneur docker pour être exact. Rien à faire.
Tout semble se passer bien (outre les messages d’erreur relatif au serveur X), il génère bien un fichier DBase.data ainsi qu’un Log.txt dont voici le contenu :

Duniter database: duniter.db
Scan of block 0
End of scan of block 0. Time spent: ?
Version 1.3.5
Stack length limit for calculating entries: 800000000
Updating blockchain in DBase.data
End updating blockchain in DBase.data. Time spent: ?
It is now 12/10/2017 ? - block 76685
Calculating sentries
End calculating sentries. Time spent: ?
Loading sandbox
End loading sandbox. Time spent: ?
Loading File of Dossier(s) and Certif(s)
There are 23 Dossier(s) in File
There are 64 Certif(s) in File
End loading File of Dossier(s) and Certif(s). Time spent: ?
Calculating entries
Going down
End going down
Stack size: 2324440
Going up
End going up
72 different permutations calculated
Calculation completed
End calculating entries. Time spent: ?
Writing json

Mais après, impossible de situer les fameux json produit.

Il y a vraiment des point d’interrogation ? Ou c’est une abréviation de ta part ?

Au moins il manque les deux dernières lignes :

End writing json. Time spent: 00:00:00
Total execution time: 00:00:07

Apparemment, les json n’ont donc pas été écrits. Pourtant, les calculs se sont bien terminés. La seule erreur possible que je vois est qu’il ne peut pas écrire dans le répertoire où tu as mis WWServer.exe. Pourtant, il n’y a pas de problème pour écrire dans Duniter/DBase.data. Bizarre !

C’est bien un copier/coller, je n’ai rien abrégé :wink:

Je rajoute un chmod 777 pour voir si ça l’arrange.

OK. Donc WWServer.exe n’a pas accès à la fonction GetTimeFormatW de la dll Windows (KERNEL32.dll). Et ce n’est peut-être pas la seule.

Puisque GetTimeFormatW est une fonction qui ramène un format de localisation, le problème est peut-être que la localisation par défaut n’est pas définie dans docker. Tu peux la forcer en ajoutant une des options -lang fr ou -lang en à la ligne de commande qui lance WWServer.

Tu me tiens au courant.

étrange, GetTimeFormatW semble supporté par wine dans ce que je vois de documentation wine en ligne.

et je viens de vérifier, j’utilise bien une version récente de wine.

J’utilise déjà wine WWServer.exe -lang fr

chmod 777 n’y change rien :confused:

C’est peut-être aussi la localisation qui n’est pas fixée. Essaie de lancer WWServer avec l’option -lang fr ou -lang en.
Mais le plus embêtant est la non-écriture des fichiers. Je pense qu’une erreur doit s’afficher en mode graphique, mais je suppose que tu n’y a pas accès. Je vais modifier le code, au moins sur cette partie là, pour que les erreurs s’affichent dans le log. Ce sera fait un peu plus tard dans la journée.
Edit:

J’avais lu trop vite. Alors, c’est peut-être les ressources de localisation qui ne sont pas accessibles.

En effet, bien loin d’avoir accès au mode graphique, voici ce que j’ai lors de l’exécution comme “false flag” pour reprendre les termes de @cgeek :

$ wine WWServer.exe -lang fr || true
wine: created the configuration directory '/home/wine/.wine'
err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
err:ole:get_local_server_stream Failed: 80004002
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
err:ole:apartment_createwindowifneeded CreateWindow failed with error 14007
err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x800736b7
err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 800736b7
err:ole:get_local_server_stream Failed: 800736b7
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
Could not load wine-gecko. HTML rendering will be disabled.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
Could not load wine-gecko. HTML rendering will be disabled.
wine: configuration in '/home/wine/.wine' has been updated.
err:winediag:nulldrv_CreateWindow Application tried to create a window, but no driver could be loaded.
err:winediag:nulldrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
err:ole:RegisterDragDrop invalid hwnd (nil)
fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
err:ole:CoReleaseMarshalData IMarshal::ReleaseMarshalData failed with error 0x8001011d

Les tentatives d’accès au serveur X pourraient correspondre à l’affichage des erreurs. Pour le reste, je ne sais pas. Je t’envoie une nouvelle version avec erreurs dans le log ce soir.

Je t’envoie une nouvelle version de WWServer.exe en message privé. Les erreurs de fichiers seront maintenant dans le log, dans le répertoire Duniter/Rsrc.

Voila ce que j’obtiens :

$ cat Duniter/Rsrc/Log.txt || true
Duniter database: duniter.db
Scan of block 0
End of scan of block 0. Time spent: ?
Version 2.1.0
Stack length limit for calculating entries: 800000000
Updating blockchain in DBase.data
End updating blockchain in DBase.data. Time spent: ?
It is now 12/13/2017 ? - block 77368
Calculating sentries
End calculating sentries. Time spent: ?
Loading sandbox
End loading sandbox. Time spent: ?
Loading File of Dossier(s) and Certif(s)
There are 21 Dossier(s) in File
There are 65 Certif(s) in File
End loading File of Dossier(s) and Certif(s). Time spent: ?
Calculating entries
Going down
End going down
Stack size: 372676
Going up
End going up
24 different permutations calculated
Calculation completed
End calculating entries. Time spent: ?
Writing json
$

Apparemment, ça ne donne pas beaucoup plus d’informations. BlackBox semble s’entêter à donner les messages d’erreur sous forme graphique. Je vais devoir faire une version spéciale du système de gestion de fichiers débarrassé de ce travers. Ça va sûrement me prendre un peu de temps.

@cgeek Ton serveur est en 64bit ?
@gerard94 me dit que WotWizard ne tourne qu’en 32bit. Des retour sur le mix wine/32/64 ?

Oui le serveur qui éxécute wotwizard est un serveur 64 bit et de ce que j’en vois wotwizard ne me semble pas etre dans une VM ni un container donc il doit y avoir une astuce au niveau de wine pour faire la conversion !

Il te faut installer wine 32 bits. Je ne sais plus comment, mais tu devrais trouver. C’est dans les dépôts Debian a minima.