見出し画像

TWSNMP FCフィードバックの再調査結果:ポーリング結果(新ゲージ)の右クリックが反応しない問題

浦和レッズ 連敗😭
切り替えるために今朝は5時から開発開始です。助手の猫さんが4時ぐらいから騒いで起こしてくれました。

TWSNMP FCフィードバックの再調査の続きです。

の記事に書いた質問に回答を頂きました。ありがとうございます。

いつもお世話になっております。
ポーリング結果(新ゲージ)の右クリックが反応しないの問題児です。
お手数をお掛けして大変申し訳ありません。


・ノードの数:126件
・ポーリンスの数:1337件
・ポーリングの種別としては、snmp、ping、twsnmpが、多いです。(特殊な物という認識はあまりありません)
・特殊な文字も使っている認識はありません、全角と半角の()くらいかなぁと。

また、マップの画面の上部のノード選択をしようとしてもなにも候補が表示されなくなっているようです。(データはありません。)
お手数ですがよろしくお願いいたします。

Chromeの開発ツールのコンソールのエラーは下記の通りです。
3ddd6ab.js:2 Error: Navigation cancelled from "/login/" to "/" with a new navigation.
   at It (b6fa883.js:2:169444)
   at Pt (b6fa883.js:2:169308)
   at x (b6fa883.js:2:173128)
   at r (b6fa883.js:2:169739)
   at b6fa883.js:2:169758
   at b6fa883.js:2:173507
   at dr.<anonymous> (3ddd6ab.js:2:3030229)
   at l (3ddd6ab.js:2:1624808)
   at n._invoke (3ddd6ab.js:2:1624623)
   at forEach.t.<computed> [as next] (3ddd6ab.js:2:1625231)

-----
GOOS=linux,GOARCH=amd64
DBSize=10858205184
CPU=88.358561,Mem=52.775806,Load=15.860000,Disk=91.811750

ノードの数は、それほど多くないようですが、ノードの数に対してポーリング数は多いように思います。

頂いた情報を手がかりに、一晩寝ながら考えました。気になることがあると夜中に目がさめた時に、ふと調べ方のアイデアが浮かびます。
起きてから試してみました。

エラーが発生しているのは全ポーリングをノード名付きの選択リストにする処理だと思います。

    for (const k in this.map.Pollings) {
      this.map.Pollings[k].forEach((p) => {
          const nodeName = this.map.Nodes[k].Name + ':'
          this.itemPollingList.push({
            text: nodeName + p.Name,
            value: p.ID,
          })
      })
    }

のような処理です。この処理でkがノードIDなのですが、もし、これが、ノードのリスト(this.map.Nodes)に存在しないとノードの名前を取得する

          const nodeName = this.map.Nodes[k].Name + ':'

 でエラーが発生します。
試しに、そのような状態を作ってみると、リリース版ではマップが表示されない状態になりました。(デバック版だと表示はされますが、ブラウザーのコンソールにはエラーが記録されます。)

たぶん、この状態になっている可能性が高いと思います。
そこで、処理を

    for (const k in this.map.Pollings) {
      if (!this.map.Nodes[k]) {
        continue
      }
      this.map.Pollings[k].forEach((p) => {
        try {
          const nodeName = this.map.Nodes[k].Name + ':'
          this.itemPollingList.push({
            text: nodeName + p.Name,
            value: p.ID,
          })
        } catch {}
      })
    }

のように変えて、ノードが存在しないポーリングはスキップして、さらに念の為、例外が起きてもスキップする処理にしました。これで、私の環境で再現できたマップが表示されない現象は解消されました。

もし、これが原因ならば、ポーリングリストに、ノード名が空欄のポーリングがあるはずです。これを削除すれば、現在のリリース版でもマップが表示されると思います。

対策したソースでDocker版を更新しました。latestです。

TWSNMP FC v1.36.3(5b5f64d)

バージョンは同じですが、Commit 番号が変わります。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。