LoginSignup
7
4

More than 3 years have passed since last update.

Symbolノードの接続関係を表示するnem2-peers-graphつくった

Last updated at Posted at 2020-02-22

はじめに

カタパルトのRESTに/node/peersというエンドポイントができて、対応するAPIノードが他のどんなノードと接続しているのかがわかるようになった。

本家githubのv0.7.20にはそれが見つけられないが、

こちらにはあった

RESTは基本的にはmongoDBの情報を参照している。しかし、APIノードが接続している他ノードの情報は、mongoDBに書かれているとは思えない。

なのでこれは、ノードのがそういう機能を持っていて、RESTは直接ノードに問い合わせていると思った。

もしそうならば、APIノードでもPeerノードでも、接続しているノードの情報が取れるのではないか。

それが取れたら、ノード間の接続図なんかも作れそうだ。

作った

image.png

ノードの接続先情報を取得する

catapult-sdkを使う。catapult-sdkとは、catapult-restに同梱されているNodejsで作られたライブラリで、APIノードやPeerノードと直接やりとりすることができる。

これ単体ではnpmなどにパブリッシュされていないので、プロジェクト内に手動でコピーして利用する。

catapult-sdkの使い方はこちら

ここに、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を使った。

image.png

地理情報を表示

ノードのIPから、地理情報を取得する。

これは、IP-API.comを使った。

次に、これをマップで表示したい。

amChartsを使った。

image.png

いい感じ。

その他

あとは、どのマシンで動かすか。

  • ノードの情報を取得するプログラム
  • vis.js用にデータを整形するプログラム
  • 地理情報を取得するプログラム
  • マップにデータを整形するプログラム

これらは、Azure Functionsで定期実行することにした。

Webサイトは、すべて静的とし、Azure BLOB Storageに配置した。

おわりに

こういうのは、すでに、いろんな人が、いろんなものを作っているので、特に目新しいわけではないけれど、作ってみたので、記事にしてみた。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4