NAME

TRD::Warch::DB - データベースの死活監視

VERSION

Version 0.0.5

SYNOPSIS

use TRD::Watch::DB; use DBI;

my $db_th = new1 TRD:Watch::DB( $name, '-db_sid' => 'Oracle:emp', '-db_user' => 'sccot', '-db_pass' => 'tiger', '-sql' => q!select TO_CHAR( sysdate, 'YYYY-MM-DD' ) from dual!, '-checkfunc' => \&checkfunc, '-errorfunc' => \&errorfunc, '-recoverfunc' => \&recoverfunc ); $db_th->start;

sub checkfunc($$) { my( $name, $sth ) = @_; my $stat = -1; # 0=normal, 0!=error

my( $row ) = $sth->fetchrow_array();
if( $row=~m/^\d\d\d\d-\d\d-\d\d$/ ){
	$stat = 0;	# normal
} else {
	$stat = 1;	# error
}

return $stat;
}

sub errorfunc($$) { my( $name, $db_sid ) = @_; &send_error_mail( 'DB', $name, $db_sid ); }

sub recoverfunc($$) { my( $name, $db_sid ) = @_; &send_recover_mail( 'DB', $name, $db_sid ); }

DESCRIPTION

DBIでアクセスできるデータベースを死活監視します。

METHODS

Constractor

TRD::Watch::DBのコンストラクタです。

$db_th = new TRD::Watch::DB( $name [, '-db_sid' => $db_sid] [, '-db_user' => $db_user] [, '-db_pass' => $db_pass] [, '-sql' => $sql] [, '-errorfunc' => \$errorfunc] [, '-recoverfunc' => \$recoverfunc] [, '-checkfunc' => \$checkfunc] [, '-timeout' => $timeout] [, '-interval' => $interval] );

TRD::Watch::DBオブジェクトを作成するコンストラクタです。

最初の引数は、オブジェクトの名前で、必須です。 その他のオプションは、省略可能です。

'-db_sid'

DBIに設定するデータソースを指定します。

'-db_user'

DBIに設定するユーザ名を指定します。

'-db_pass'

DBIに設定するパスワードを指定します。

'-sql'

死活監視で発行するSQL文を指定します。

'-errorfunc'

障害が発生したときに呼び出されるコールバック関数を指定します。

'-recoverfunc'

障害が回復したときに呼び出されるコールバック関数を指定します。

'-checkfunc'

監視を行うコールバック関数を指定します。

'-timeout'

監視のタイムアウトを秒で指定します。

'-interval'

死活監視の間隔を秒で指定します。

setName( $name )

オブジェクトの名前を設定します。

$db_th->setName( 'test' );

死活監視のコールバック関数が呼ばれる際に名前がわたされます。 死活監視が開始されていた場合、再起動されます。

setDbSid( $db_sid )

DBIに指定するデータソースを設定します。

$db_th->setDbSid( 'Oracle:emp' );

死活監視のコールバック関数が呼ばれる際にデータソース名がわたされます。 死活監視が開始されていた場合、再起動されます。

setDbUser( $db_user )

DBIに指定するユーザ名を設定します。

$db_th->setDbUser( 'sccot' );

死活監視が開始されていた場合、再起動されます。

setDbPassword( $db_password )

DBIに指定するパスワードを設定します。

$db_th->setDbPassword( 'tiger' );

死活監視が開始されていた場合、再起動されます。

setSql( $sql )

死活監視で発行するSQLを設定します。

$db_th->setSql( q!select sysdate from dual! );

死活監視が開始されていた場合、再起動されます。

setWatchSleep( $name, $datetime, $sleeptime );

死活監視を休止する時間を設定します。

$db_th->setWatchSleep( 'cron time sleep', '59 3 * * *', 60*60 );

設定した時間、死活監視を休止(sleep)し、計画的な障害検知を回避します。

$name

休止に名前を設定します。

$datetime

休止する開始時間をcronのような形式で設定します。 5つの空白で区切られた値を設定します。 詳しくはcrontabを参考にしてください。

$sleeptime

休止時間を秒で設定します。 死活監視が開始されていた場合、再起動されます。

setTimeout( $timeout );

監視のタイムアウトを設定します。

$db_th->setTimeout( 30 );

DBからタイムアウト値までに返答が来ない場合、障害として扱います。 死活監視が開始されていた場合、再起動されます。

setInterval( $interval )

死活監視の間隔を設定します。

$db_th->setInterval( 60 );

死活監視が開始されていた場合、再起動されます。

setErrorFunc( \&errorfunc )

障害が発生したときに呼ばれるコールバック関数を指定します。

$db_th->setErrorFunc( \&errorfunc );

コールバック関数には死活監視の名前($name)とデータソース名($db_sid)が渡されます。 死活監視が開始されていた場合、再起動されます。

setRecoverFunc( \&recoverfunc )

障害が回復したときに呼ばれるコールバック関数を設定します。

$db_th->setRecoverFunc( \&recoverfunc );

コールバック関数には死活監視の名前($name)とデータソース名($db_sid)が渡されます。 死活監視が開始されていた場合、再起動されます。

setCheckFunc( \&checkfunc )

死活監視を行うコールバック関数を設定します。

$db_th->setCheckFunc( \&checkfunc );

コールバック関数には死活監視の名前($name)とDBIからのステートメントハンドル($sth)が渡されます。 死活監視が開始されていた場合、再起動されます。

start

死活監視を開始します。

$db_th->start();

死活監視を開始し、checkfuncがinterval間隔で呼び出されます。 障害が発生するとerrorfuncが呼び出され、障害が回復するとrecoverfuncが呼び出されます。

stop

死活監視を停止します。

$db_th->stop();

死活監視を停止します。

db_thread

内部関数:死活監視を行うスレッド関数 監視はforkで起動される。

checkSleep

内部関数:休止時期を取得する。

db

内部関数:監視を行う。

default_errorfunc( $name, $db_sid )

内部関数:デフォルトの要害発生時のコールバック関数。

default_recoverfunc( $name, $db_sid )

内部関数:デフォルトの障害回復時のコールバック関数。

default_checkfunc( $name, $db_sid )

内部関数:デフォルトの監視コールバック関数。

SEE ALSO

Mention other useful documentation such as the documentation of related modules or operating system documentation (such as man pages in UNIX), or any relevant external documentation such as RFCs or standards.

If you have a mailing list set up for your module, mention it here.

If you have a web site set up for your module, mention it here.

AUTHOR

Takuya Ichikawa, <ichi@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2009 Takuya Ichikawa, all rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 15:

Non-ASCII character seen before =encoding in 'データベースの死活監視'. Assuming UTF-8