site-statusというwebサイトのstatusを取るツールを作ってみた
最近は CoffeeScript も楽しいなぁと思うようになって、思いつきで書いてみました。ちなみに、coffee で書いて grunt-contrib-watch で js にしていて、出来上がったものを npm に publish しています。あとテストがありません!
詳しくは README に書いたのでそちらを見て下さい。
何ができるの?
超簡単な使い方だと、エンドポイントをとある JSON の形式で STDIN に流し込めば、非同期にダダっとリクエスト投げてくれて、レスポンスタイムとレスポンスコードを STDOUT に出力してくれます。これをまた別のツールで拾って何か他のところにつなげてあげれば、簡単にいろんなサイト(もしくは HTTP なインタフェースのサーバとか)の稼働状況をロギングできます。
ついでに、GET できた HTML に対して CSS セレクタで要素を取ってくるという機能も入っているので、その HTML の中にある何か値とかも一緒に STDOUT に吐き出すことができます。Hadoop みたいなビルトインされた HTTP のステータスページの中からこの値のトレンドを見たい!みたいな要件を想像してます。example には status.github.com の例を入れておきました。
リクエストにはタイムアウトも設定してるので、あるサイト・サーバが刺さって全部のサイト・サーバの情報が取れませんでした、みたいなことは起こらないと思います。
今後
JSON で各サーバのステータス(cpu 使用率とかいろんな情報)を返す、みたいなのは割とどこでもやられてるのかなと思うので、その JSON を JSONPath で同じようにパースして吐き出せるようにしようかなと思ってます。もしくは JSON はそのまま吐き出すとかも。
あと STDOUT に出した JSON をどっかに飛ばす何かとかも。GrowthForecast 的なものに投げたりとか、fluent-cat に食わせたら fluentd に投げるとかもできるような気がしますね。
まとめ
node/coffee も楽しい!