symbol-node-watcherでSymbolノードを監視する

## ディスコードに通知用のサーバーを作る
左下部の＋ボタンを押す。
![discord01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/602edc91-8b31-6e1c-013d-6918a2b6218f.jpeg)

「オリジナルの作成」を選択。
![discord02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/6702c322-749c-9191-abda-c3f0c4bca5ca.jpeg)

「自分と友達のため」を選択。
![discord03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/e1e47520-70fe-26d6-39e2-0cb911ac4a50.jpeg)

アイコンとサーバー名を適当に決めて「新規作成」を押す。
![discord04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/9ec0fb0e-3c79-a4d3-52a7-76f384a1e4e0.jpeg)

サーバーが出来たら左のテキストチャンネル 一般の歯車を押す。
![discord05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/03696c92-0127-006e-12aa-6477bc9706a3.jpeg)

連携サービスから「ウェブフックを作成」を押す。
![discord06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/357cbd51-0858-d9c1-2e5d-381363a0e486.jpeg)

作成されたウェブフックを押す。
![discord07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/67419d36-2af9-acee-46d4-c57424b2e062.jpeg)

「ウェブフックURLをコピー」を押す。
![discord08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/cde441a3-e1d4-564d-54a1-c247ba4deed6.jpeg)

## インストール
```sh
git clone https://github.com/0x070696E65/symbol-node-watcher.git
cd symbol-node-watcher
npm i
sudo npm i -g .
```

:::note info
npmでもインストールできますが、私の環境ではログ出力でパーミッションエラーが出たのでクローンしてインストールしてます。
:::

## 設定
設定ファイルを作成します。
設定ファイルを置く場所はノードと同じディレクトリにしました。
```sh
cd symbol-bootstrap
vi config.json
```

```config.json
{
  "nodePath": "/home/harvestasya/symbol-bootstrap",
  "discordWebhookUrl": (ディスコードのウェブフックURL),
  "cronExpression": "0 0 * * * *",
  "symbolServiceUrl": "https://symbol.services/nodes?filter=suggested&limit=5",
  "differenceHeight": 5,
  "stopCommand": "symbol-bootstrap stop",
  "runCommand": "symbol-bootstrap run -d"
}
```

<dl>
  <dt>nodePath</dt>
  <dd>普段symbol-bootstrap コマンドを実行しているディレクトリ。</dd>
  <dt>discordWebhookUrl</dt>
  <dd>ディスコードのウェブフックURL。</dd>
  <dt>cronExpression</dt>
  <dd>実行タイミング。秒/分/時/日/月/曜日。</dd>
  <dt>symbolServiceUrl</dt>
  <dd>他のノードのURL一覧。基本的に変更不要。</dd>
  <dt>differenceHeight</dt>
  <dd>のノード群の最大ブロックと自分のブロックの差がこれ以上になると異常と判断します。</dd>
  <dt>stopCommand</dt>
  <dd>ノードの停止コマンド。</dd>
  <dt>runCommand</dt>
  <dd>ノードの起動コマンド。</dd>
</dl>

### 起動
```sh
symbol-node-watcher start
```

### 停止
```sh
symbol-node-watcher stop
```

## 稼働確認
### ログを見る
```sh
less /usr/lib/node_modules/symbol-node-watcher/logfile.log
```
「started to watch node.」が出力されていれば動作しているかと。
起動/停止時に通知は来ないようです。

### 監視されているかノードを停止して確認する
毎時0分のチェックにしているので、毎分チェックに変えてノードを落として通知が来るか確認する。

symbol-node-watcherが稼働しているので一旦停止する。
```sh
symbol-node-watcher stop
```

毎分0秒にチェックするよう変更する。
```config.json
{
  "nodePath": "/home/harvestasya/symbol-bootstrap",
  "discordWebhookUrl": (ディスコードのウェブフックURL),
  "cronExpression": "0 * * * * *",
  "symbolServiceUrl": "https://symbol.services/nodes?filter=suggested&limit=5",
  "differenceHeight": 5,
  "stopCommand": "symbol-bootstrap stop",
  "runCommand": "symbol-bootstrap run -d"
}
```

symbol-node-watcherを起動せさる。
```sh
symbol-node-watcher start
```

Symbolノードを停止させる。
```sh
symbol-bootstrap stop
```

通知が来る。
![discord09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622558/11c42c79-eeda-09ff-716e-b268dd5bd87d.jpeg)
二重起動してて通知がダブってきてますが…

## 参考
https://github.com/0x070696E65/symbol-node-watcher