見出し画像

TWSNMP FCのSNMPポーリングをJavaScript対応していて497日問題のバグを発見

浦和レッズ なんとかルヴァンカップグループステージ突破!
今朝は5時半に起きて6時から開発開始です。昨日取り付けた照明は快適です。
さて、HTTPのポーリングで、あみだした技をSNMPにも応用することにしました。JavaScriptの判定スクリプトに関数を追加してSNMPのGETリクエストで自由に値を取得して変数にいれる仕組みです。

のような感じで、モードをscriptにすれば、getSNMP()という関数が使えます。

var sysUpTime = snmpGet("sysUpTime.0") * 1;
var last = getResult("sysUpTime") ||  0;
setResult("sysUptime",sysUpTime) ;
sysUpTime > last;

という判定スクリプトにすれば、SNMPで管理対象から取得したsysUpTime.0の値を前回取得したものと比較することができます。
getResultが前回setResultで保存した値を取得する関数です。

さて、この仕組みのソースコードを作って、いざテストしてみようとしたところ、異常に不明の状態のSNMPのポーリングが多いことに気づきました。

どうも同じノードのSNMPポーリングです。SNMPのポーリングが全滅というわけではもなくトラフィック関連だけのようです。調べてみるとsysUpTimeの値が前回よりも小さくなっているエラーが発生していることがわかりました。497日問題です。

この問題を検知するコードは作っていましたが、回復する処理がなかったので、発生すると永久にポーリングの状態が不明になってしまいます。
この問題も修正しました。

判定のJavaScriptに関数を追加する手法は、かなり気に入っています。
これから作るポーリング機能は、この仕組みを使おうと思っています。
これからLXIのポーリングを追加するつもりですが、最初に考えていたものより、すごい仕様にできそうです。

明日に続く

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