コミケ告知

サークル networkmaniacs.net(旧:浜風もっこす) 2017.02.17 デブサミ内 DevBooksに出展します。
詳細は circle タグの記事へ。
2013年4月4日木曜日

fluent-plugin-websocketのgemを公開

fluentdのプラグインとしてwebsocketに流すようなものを作ってみた…というのは前回書きました。→ Fluentdの出力をWebSocketに流すoutput pluginを書いた
その後、せっかくなのでRuby周辺をもう少し触ってみようと思い、もう少しだけ手をかけました。

  • テストを作成
  • ログ出力の変更
  • gemとして公開
  • READMEをmarkdownからrdocに変更

テストを作成

fluentd公式のドキュメントにも、作成のための情報が色々詰まっていて参考になったスライドにも、テスト関係の情報はあまりありません。そのため、fluentd本体に含まれるテストコードを参考にしました。

このpluginはwebsocket serverなので、client側が必要です。client側はブラウザであることが多いためか、client側の実装はあまり多くなさそうでした。
いくつか試した上で、websocket-eventmachine-clientで接続することは出来たものの、いまいちテストが確実に成功しません。sleepをあちこちに挟んでみたものの、接続が出来上がる前に終了してしまう事があるようで。
また、設定項目use_msgpackがtrueとfalseの2通りのテストを試したかったけども、これも上手くいっていません。 create_driverの引数にconfigを書けば、それに従ったインスタンスが出来るのかとパッと見で思いこみましたが、後に書いた方が失敗してしまいます。

ログ出力の変更

fluentdにはちゃんとロギングの仕組みがあるようなので、putsなどではなくそちらを使うことにしました。既存pluginのソースを見たところ、$log が存在して、warningとかinfoとかに出力できる模様。レベルの定義はlog.rbにありました。

  LEVEL_TRACE = 0
  LEVEL_DEBUG = 1
  LEVEL_INFO  = 2
  LEVEL_WARN  = 3
  LEVEL_ERROR = 4
  LEVEL_FATAL = 5

traceは-vv、debugは-vで出るようです。

% fluentd -h
Usage: fluentd [options]
  -v, --verbose  increase verbose level (-v: debug, -vv: trace)

待ち受けソケットを開けたときにはinfo、clientからの接続開始・終了やその他動作状況はtraceで出してみました。in_forwardがlistenのときにinfoで出していたので。
$log.trace "Started em-websocket thread."
$log.info "WebSocket server #{@host}:#{@port} [msgpack: #{@use_msgpack}]"

gemとして公開

この程度のものを公開して良いものか?と気後れしつつも、rubygems.orgで公開してみました。

gem install fluent-plugin-websocket でインストールできるようになった…と思います。
gemspecを書いて、rubygems.orgのドキュメントに従いgem buildしたら、何事もなくgemが出来ました。Publishing your gemの項にあるとおりに、curlでAPI keyを引っ張ってきたのちにgem pushしたら、これもあっさり登録されました。
最初にpublishしたものが、よりによってdependenciesという重要なところにtypoがあったため、それのために0.1.2から0.1.3に上げるという悲しいことに…(;´Д`)

この時点で自己満足完了でしたが、fluentd公式のpluginページに載っていて、現時点で80くらいのダウンロードがあるようでびびっています。(小心者)


READMEをmarkdownからrdocに変更

ついでの初体験。同じような機能なのに微妙ーにマークアップが違うんですねえ。
苦労してなんとか形にした後に、これは大変だと思ってvimで色付けしてくれるスクリプトを探しました。順序が逆ですね。 Bundle 'RDoc' で色がつくようになったので今後はきっと大丈夫!

今後

とりあえずは動くので、自分が使うのに不便はありません。安直な方向では、使っているライブラリの機能をもうちょっと使えるようにするくらいかな。https等々。
フィルタリングとか加工とかについては、独自に内部に作るのは何か違うかなーと思っています。(他のpluginってチェーンできたっけ?)

0 件のコメント:

コメントを投稿