Hi!!!
I have written this script (see below) to check when the server or database
is not running...but I can not seem to work around the error it is giving. The
result it gave me is:
"Website is up and running
Can't connect to data source"
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use DBI;
use Net::Ping;
use MIME::Lite;
my $is_httpd_ok = &check_httpd();
my $is_db_ok = &check_database();
my $is_chat_ok = &check_chat();
my $is_prsd_ok = &check_prsd();
# if any one is not ok then send an email
if ( (!$is_httpd_ok) || (!$is_db_ok) || (!$is_chat_ok) || (!$is_prsd_ok) ) {
# use MIME::Lite to send an email.
my $msg = MIME::Lite->new(
From =>'[EMAIL PROTECTED]',
To =>'[EMAIL PROTECTED]',
Subject =>"Server error report",
Type => 'text',
Data =>"Server error report for scalar(localtime()), - " .
time(), #timestamp??
);
# also add record to monitor.log that email was sent
$msg->send();
open (FILE, ">>monitor.log");
print FILE "This is a test\n";
close (FILE);
}
exit();
# if httpd is up, then status return should be TRUE
sub check_httpd {
# use LWP to check www.example.com
my $ua = LWP::UserAgent->new();
my $request = HTTP::Request->new('GET', 'http://www.example.com');
my $response = $ua->request($request);
# if database is up, then status return should be TRUE
if ($response->is_success()) {
# This should eventually be logged - open FILE (">>monitor.log") ||
die "some error";
print "Website is up and running\n";
}
else {
# This should eventually be logged - open FILE (">>monitor.log") ||
die "some error";
print "Website is down\n";
return 0;
}
return 1;
}
sub check_database {
# use dbi to check anne (DBI->ping())
my $dbh = DBI->connect() #need to rectify error message problem
or die "Cannot connect to database! Error found: $DBI::errstr";
$dbh->ping();
# my $dbh;
# eval {
# alarm(5); # seconds before time out
# $dbh = DBI->connect("dbi:Oracle:$dsn" ... );
# alarm(0); # cancel alarm (if connect worked fast)
# };
# alarm(0); # cancel alarm (if eval failed)
# return status of running database
if ($dbh-> is_success())
{
warn "database is up";
}
else
{
warn 'database is not connected [$ping_val]\n';
}
# if chat is up, then status return should be TRUE
sub check_chat {
# use net ping to check emily on port 4674
}
sub check_prsd {
# use net ping to check emily on port 2323
}
}
---------------------------------
Talk is cheap. Use Yahoo! Messenger to make PC-to-Phone calls. Great rates
starting at 1¢/min.