1 |
#!/usr/bin/perl -w |
#!/usr/bin/perl -w |
2 |
# File: sap.monitor |
# File: sap.monitor |
3 |
# Author: Dobrica Pavlinusic, dpavlin@rot13.org |
# Author: Dobrica Pavlinusic, dpavlin@rot13.org |
4 |
|
# http://www.rot13.org/~dpavlin/sysadm.html |
5 |
# Description: monitor sap servers using sapinfo from RFCSDK |
# Description: monitor sap servers using sapinfo from RFCSDK |
6 |
# |
# |
7 |
# Usage: sap.monitor [-[hH] ashost only/ignore] [-[sS] sysnr only/ignore] |
# Usage: sap.monitor [-[hH] ashost only/ignore] [-[sS] sysnr only/ignore] |
27 |
my $SAPINFO = "/usr/local/bin/sapinfo"; |
my $SAPINFO = "/usr/local/bin/sapinfo"; |
28 |
# number of tries to repeat sapinfo if it fails first time |
# number of tries to repeat sapinfo if it fails first time |
29 |
my $repeat = 3; |
my $repeat = 3; |
30 |
|
# seconds to wait between retries |
31 |
|
my $repeat_wait = 5; |
32 |
|
|
33 |
my %opts; |
my %opts; |
34 |
getopt('h:s:H:S:', \%opts); |
getopt('h:s:H:S:', \%opts); |
62 |
my $output; |
my $output; |
63 |
my $sys_id; |
my $sys_id; |
64 |
for(my $i=0; $i<$repeat; $i++) { |
for(my $i=0; $i<$repeat; $i++) { |
65 |
$output = `$SAPINFO trace=0 ashost=$ashost sysnr=$sysnr`; |
eval { |
66 |
|
local $SIG{ALRM} = sub { die "timeout\n"; }; |
67 |
|
alarm 30; # wait for sapinfo to finish |
68 |
|
$output = `$SAPINFO trace=0 ashost=$ashost sysnr=$sysnr`; |
69 |
|
}; |
70 |
|
alarm 0; # turn alarm off |
71 |
undef $sys_id; |
undef $sys_id; |
72 |
|
$output = "" if (! defined $output); |
73 |
if ($output =~ m/System\s+ID\s+(\w+)/i) { |
if ($output =~ m/System\s+ID\s+(\w+)/i) { |
74 |
$sys_id = $1; |
$sys_id = $1; |
75 |
last; |
last; |
76 |
} |
} |
77 |
# print "$loop: $ashost $sysnr $ret\n"; |
# print "$loop: $ashost $sysnr $ret\n"; |
78 |
$loop++; |
$loop++; |
79 |
sleep 5; |
sleep $repeat_wait; |
80 |
} |
} |
81 |
if (! $sys_id) { |
if (! $sys_id) { |
82 |
push @failed, "$ashost ($sysnr)"; |
push @failed, "$ashost ($sysnr)"; |