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 も楽しい!