Symbolノードの接続関係を表示するnem2-peers-graphつくった
はじめに
カタパルトのRESTに/node/peers
というエンドポイントができて、対応するAPIノードが他のどんなノードと接続しているのかがわかるようになった。
本家githubのv0.7.20にはそれが見つけられないが、
こちらにはあった
RESTは基本的にはmongoDBの情報を参照している。しかし、APIノードが接続している他ノードの情報は、mongoDBに書かれているとは思えない。
なのでこれは、ノードのがそういう機能を持っていて、RESTは直接ノードに問い合わせていると思った。
もしそうならば、APIノードでもPeerノードでも、接続しているノードの情報が取れるのではないか。
それが取れたら、ノード間の接続図なんかも作れそうだ。
作った
ノードの接続先情報を取得する
catapult-sdkを使う。catapult-sdkとは、catapult-restに同梱されているNodejsで作られたライブラリで、APIノードやPeerノードと直接やりとりすることができる。
これ単体ではnpmなどにパブリッシュされていないので、プロジェクト内に手動でコピーして利用する。
ここに、nodeDiscoveryPullPeers
といういかにも、なワードがあるので、これを利用する。
できあがったのがこちら
できるだけ多くのノードから情報を取得したい
ノードの他ノード接続一覧が取得できるのだから、そこから芋づる式に情報を取得していけばよい。
再帰を使って、こんな感じになりました。
グラフを作る
vis.jsというのを使った。
ドキュメントによれば、
var nodes = new vis.DataSet([
{id: 1, label: 'Node 1'},
{id: 2, label: 'Node 2'},
{id: 3, label: 'Node 3'},
{id: 4, label: 'Node 4'},
{id: 5, label: 'Node 5'}
]);
// create an array with edges
var edges = new vis.DataSet([
{from: 1, to: 3},
{from: 1, to: 2},
{from: 2, to: 4},
{from: 2, to: 5}
]);
こんなデータを作って、
var network = new vis.Network(container, data, options);
こうすればいいらしい。
出来上がったのが、こちら
ノード一覧を作る
併せて、テーブル形式でノード一覧を表示したい。
テーブル表示ライブラリには、Tabulatorを使った。
地理情報を表示
ノードのIPから、地理情報を取得する。
これは、IP-API.comを使った。
次に、これをマップで表示したい。
amChartsを使った。
いい感じ。
その他
あとは、どのマシンで動かすか。
- ノードの情報を取得するプログラム
- vis.js用にデータを整形するプログラム
- 地理情報を取得するプログラム
- マップにデータを整形するプログラム
これらは、Azure Functionsで定期実行することにした。
Webサイトは、すべて静的とし、Azure BLOB Storageに配置した。
おわりに
こういうのは、すでに、いろんな人が、いろんなものを作っているので、特に目新しいわけではないけれど、作ってみたので、記事にしてみた。
Author And Source
この問題について(Symbolノードの接続関係を表示するnem2-peers-graphつくった), 我々は、より多くの情報をここで見つけました https://qiita.com/planethouki/items/59ae4a85f14f4d6d4340著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .