Long time without post but not dead blog. Du coup juste un passage rapide avant de reprendre une activité plus dense ici (bientôt j'espère) pour lister quelques outils opensource disponibles sous Github.
Analyser les optimisation JIT de la JVM
https://github.com/AdoptOpenJDK/jitwatch
Analyse des temps de réponse en percentile
https://github.com/giltene/jHiccup
Outil pour insérer de la fragmentation dans le heap afin de tester son application
https://github.com/giltene/HeapFragger
Mesure de la latence
https://github.com/LatencyUtils/LatencyUtils
Mesure des temps de réponse de socket
https://github.com/LatencyUtils/jRT
Ensemble d'outil pour l'analyse du comportement de la jvm
https://github.com/aragozin/jvm-tools
Manipulation des output de jstack pour faciliter l'analyse
https://github.com/lifey/mjprof
PlugIn pour MAT et requeter la Heap
https://github.com/vlsi/mat-calcite-plugin
mardi 26 septembre 2017
mardi 14 février 2017
Chemin de Maven dependency tree à Neo4j
Histoire de jouer un peu avec la techno, l'objet de ma recherche était de trouver le chemin le plus pour passer de l'output Maven dependency:tree à un joli graph Neo4j (en version 3.0.6).
Premier constat pas de solution directe remontée par google sur des personnes ayant eu la même problématique. Du coup plusieurs approches possibles :
Par soucis d'efficacité pour un besoin plus de l'ordre du tooling je vois ce que je peux faire sans avoir à coder.
"mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml" (et si besoin j'utilise les -Dincludes et excludes qui vont bien)
A partir de là j'ai mes dépendances dans un fichier Graphml.
Je lance ma console Neo4j (url disponible sous http://localhost:7474/)
Je lance mon shell (sous bin) et tape la ligne de commande qui va bien :
neo4j-sh (?)$ import-graphml -i "file:///c:/My/LocalPath/toMyFile/dependency.graphml" -r DEPENDS_ON -t
Je retourne dans ma console et visualise le graph. Problème malgré l'option -t je perd mes labels et propriétés .... après avoir creusé pas de pistes sérieuses, peut être problème de format du graphml.
Je tente ma chance, récupération d'APOC
CALL apoc.import.graphml("file:///c:/My/LocalPath/toMyFile/dependency.graphml", {batchSize: 10000, readLabels: true, storeNodeIds: true, defaultRelationshipType:"DEPENDSON"});
Cela ne marche pas mieux ... Je tente un export de graph histoire de voir le format (call apoc.export.graphml.all("test",{}) me génère un fichier graphml a la racine de ma base neo4j)
Du coup 3e voie je passe par jEd (https://www.yworks.com/downloads#yEd) pour visualiser mon graph. A voir aussi Gephi (https://gephi.org/)
Quelques commandes de mise en forme :
Je continu à explorer
J'ai un résultat visualisation de mon graph mais pas dans l'outil souhaité. Ce n'est que partie remise et compte bien retourner sur Neo4j qui fait quand même des choses sympa (https://gist.github.com/jexp/90f590ad1d125284bc35223c86bebd33)
Premier constat pas de solution directe remontée par google sur des personnes ayant eu la même problématique. Du coup plusieurs approches possibles :
Je code
- je recode vraiment tout, je récupère un output de mvn dependency tree (Plugin Maven dependency tree) et je parse le resultat (sorti console ou output spécifié au plugin) dans mon langage favori. Une fois que j'ai mon modèle objet je le parcours et l'insère dans Neo4j
- Si Maven dependency peut me sortir un ascii art, c'est du code Java autant réutiliser son tree model
- Je parcours le web et vois ce qui peut m'aider : Aether (https://wiki.eclipse.org/Aether/Transitive_Dependency_Resolution)
Ou maximum de reuse
Par soucis d'efficacité pour un besoin plus de l'ordre du tooling je vois ce que je peux faire sans avoir à coder.
Export côté Maven
Plutôt que réutilisé la sortie console j'utilise le plugin et spécifie on output. Tiens je peux produire du Graphml :"mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml" (et si besoin j'utilise les -Dincludes et excludes qui vont bien)
A partir de là j'ai mes dépendances dans un fichier Graphml.
Import côté Neo4j
Je lance ma console Neo4j (url disponible sous http://localhost:7474/)
- Voir le résultat de mon import : MATCH (n) RETURN n;
- Tout effacer pour recommencer : MATCH (n), ()-[r]-() DELETE n,r
- Ou encore pour partir d'une base vide avant de lancer ma base effacer le contenu de \data\databases\
Import via neo4j-shell
Je lance mon shell (sous bin) et tape la ligne de commande qui va bien :
neo4j-sh (?)$ import-graphml -i "file:///c:/My/LocalPath/toMyFile/dependency.graphml" -r DEPENDS_ON -t
Je retourne dans ma console et visualise le graph. Problème malgré l'option -t je perd mes labels et propriétés .... après avoir creusé pas de pistes sérieuses, peut être problème de format du graphml.
Import via APOC
Je tente ma chance, récupération d'APOC
- download : https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/tag/3.0.4.2
- je le place dans le répertoire plugin de mon Neo4j
- je modifie ma configuration neo4j pour ajouter les 2 propriétées suivante
- apoc.export.file.enabled=true
- apoc.import.file.enabled=true
- je démarre mon neo4j et teste : call apoc.help("apoc")
CALL apoc.import.graphml("file:///c:/My/LocalPath/toMyFile/dependency.graphml", {batchSize: 10000, readLabels: true, storeNodeIds: true, defaultRelationshipType:"DEPENDSON"});
Cela ne marche pas mieux ... Je tente un export de graph histoire de voir le format (call apoc.export.graphml.all("test",{}) me génère un fichier graphml a la racine de ma base neo4j)
On fait quoi ....
Je reste sur ma ligne on a dit sans code ....
Du coup 3e voie je passe par jEd (https://www.yworks.com/downloads#yEd) pour visualiser mon graph. A voir aussi Gephi (https://gephi.org/)
Quelques commandes de mise en forme :
- Open Document -> dependency.graphml > OK.
- Tools > Fit Note to Label … > OK
- Layout > Hierarchical > Orientation > Left to Right > OK
Quand j'aurais le temps de coder
Je continu à explorer
- neo4j-shell (https://github.com/jexp/neo4j-shell-tools#graphml-import)
- APOC
- Maven dependency plugin (ses tests unitaires sont un bon point d'entré)
- Aether
- https://github.com/finn-no/maven-dependency-mapper
- https://github.com/jcaddel/graph-maven-plugin
Conclusion
J'ai un résultat visualisation de mon graph mais pas dans l'outil souhaité. Ce n'est que partie remise et compte bien retourner sur Neo4j qui fait quand même des choses sympa (https://gist.github.com/jexp/90f590ad1d125284bc35223c86bebd33)
Inscription à :
Articles (Atom)