http://d.hatena.ne.jp/woremacx/20080404/1207260356 を使って tiarra のログを DB に保存するようにしたので記録。
※ http://d.hatena.ne.jp/h_kenan/20090716 を参考にさせていただきました。
モジュールを配置
/locate/to/tiarra/module/Log に DBI.pm を配置します。
そのままだと動かない箇所があったので、一部ソースを修正しました。
% diff -c DBI.pm.orig DBI.pm *** DBI.pm.orig 2011-07-31 23:36:26.000000000 +0900 --- DBI.pm 2011-07-31 23:36:02.000000000 +0900 *************** *** 65,73 **** my $self = shift; my $param; ! for (qw/source user pass/) { ! $param->{$_} = $self->config->DBI->get($_); ! } my $dbh = DBI->connect($param->{source}, $param->{user}, $param->{pass}, { RaiseError => 1, AutoCommit => 1 }) --- 65,74 ---- my $self = shift; my $param; ! $param->{source} = $self->config->source; ! $param->{user} = $self->config->user; ! $param->{pass} = $self->config->pass; ! my $dbh = DBI->connect($param->{source}, $param->{user}, $param->{pass}, { RaiseError => 1, AutoCommit => 1 }) *************** *** 122,128 **** $param->{nick_id} = $self->_resolve_id('Nick', delete($param->{nick})); my @key = keys(%$param); ! my @val = @{%$param}{@key}; (my $str = ('?,' x @key)) =~ s/,$//; my $sql = sprintf("insert into log (%s) values (%s)", --- 123,132 ---- $param->{nick_id} = $self->_resolve_id('Nick', delete($param->{nick})); my @key = keys(%$param); ! my @val = (); ! foreach my $value (@key) { ! push(@val, $param->{$value}); ! } (my $str = ('?,' x @key)) =~ s/,$//; my $sql = sprintf("insert into log (%s) values (%s)", *************** *** 249,252 **** %{$this->{writer_cache}} = (); } ! 1; --- 253,256 ---- %{$this->{writer_cache}} = (); } ! 1;
その他
で、配置したら http://d.hatena.ne.jp/h_kenan/20090716 にあるように設定ファイルの編集と DB + テーブル作成。
この辺りは特に変更点もないので割愛します。
ひと通り終わったら tiarra 再起動で、エラーがでなければok。
これでとりあえずログをDBに保存できるようになったんですが、過去一年分のテキストデータのログをどうしようかなってことで、今度は tiarra のテキストログを DB へインポートするスクリプトを作成しました。とりあえず今日はここまで。