TheSchwartzの拡張:続き(Prefork,log)

前回の日記からもうちょい進めてみました。

http://code.google.com/p/theschwartz-plugin/source/browse/#svn/trunk

とりあえず、以前に適当に作ってたリポジトリのブランチ作業というのが
猛烈に恥ずかしくなったので、新プロジェクトにしてみました。
前回が適当すぎてゴメンナサイ。
節操なくプロジェクト作ってゴメンナサイ。

変更点は
・log機能の追加実装
・ForkをParallel::FockManagerからParallel::Preforkへ
・それらを使うManagerを作成
の3点になります。


◎log機能
これは実際、社内のプロジェクトにTheSchwartzを導入したときに
取り入れたもの。
そのプロジェクトでは、割と重要処理のトリガとしてTheSchwartzを
使っていたので、やりっぱなしというのはマズかった。
が、本体にはファイル出力系のログがない。
(エラーが発生すると、標準のerrorテーブルにインサートされるという意味でログはある)
ということで、処理結果用のログを残すものを実装してみた。

ちょっと冷静になってみると、社内で使ったままの状態で
日付ごとに管理される部分なんかが丸々残っているけど、
この辺ももっと緩くしてもよかったかもです。。。。


◎ForkをParallel::Preforkへ
前回のエントリ時点ではParallel::FockManagerを使っていましたけど、
シグナルに対応するのにPreforkが良いというのを聞きまして、
ちょっといじってみました。

結果的にはうまく行ったように思えるというか、
id:tokuhiromさんのを参考にさせてもらったらほとんど一緒になっちゃいました。あわわ。。
http://d.hatena.ne.jp/tokuhirom/20081110/1226291955


◎Managerを作成
前回ので、もうちょっとスマートに呼べるようなクラスを用意すべきかも、と
自問自答してた部分の一つの解決策ということでManagerとでっちあげた
ものを作ってみました。
管理するというよりはラップしてるだけ程度のものですが。


◎動作実験
プロジェクト直下にある
・manager_client.pl がジョブのインサート側、
・test_manager_worker.pl がワーカー側です。
処理される内容は
・lib/MyApp/Async/Test3.pm
・lib/MyApp/Async/Test4.pm
にそれぞれ書かれているあたりは前回と同じです。

MyApp::Async::Test3 1226941406 moge : 3
MyApp::Async::Test3 1226941406 moge : 1
MyApp::Async::Test4 1226941408 fuga : 2
MyApp::Async::Test4 1226941408 fuga : 3
MyApp::Async::Test4 1226941410 fuga : 4
MyApp::Async::Test3 1226941410 moge : 2
MyApp::Async::Test3 1226941412 moge : 4
MyApp::Async::Test4 1226941412 fuga : 5
MyApp::Async::Test4 1226941414 fuga : 1
MyApp::Async::Test3 1226941414 moge : 5


◎次回
テスト書きます。
はい、ホントすみません><
ありえないです。
手探りでやってたので、とりあえず作る事に意識がいってました。

とは言いつつ、ラップしてるのが全体的に多いですが、
こういうテストってどうやって書くのがいいんでしょう。。