/[mon-modules]/sap.monitor
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /sap.monitor

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (show annotations)
Tue Nov 5 08:53:26 2002 UTC (21 years, 5 months ago) by dpavlin
Branch: MAIN
Changes since 1.11: +1 -0 lines
fix "Use of uninitialized value" warnings

1 #!/usr/bin/perl -w
2 # File: sap.monitor
3 # Author: Dobrica Pavlinusic, dpavlin@rot13.org
4 # http://www.rot13.org/~dpavlin/sysadm.html
5 # Description: monitor sap servers using sapinfo from RFCSDK
6 #
7 # Usage: sap.monitor [-[hH] ashost only/ignore] [-[sS] sysnr only/ignore]
8 #
9 # e.g. sap.monitor -s 20 will scan only hosts with sysnr == 20
10 # sap.monitor -S 20 will scan only hosts with sysnr != 20
11
12 # configuration file in /usr/local/etc/sap-mon.conf describes which
13 # hosts (ashost) and systems (sysnr) you want to check.
14 #
15 # format of line is:
16 #
17 # ashost [tab|space] sysnr # optional comment
18 #
19 # you can spacify host as hostname (sap01) or with sap routers in-between
20 # to test routers too (/H/saprtr/H/sap01)
21
22 use strict;
23 use Getopt::Std;
24
25 # change paths here if you want to
26 my $CONFIG = "/usr/local/etc/sap-mon.conf";
27 my $SAPINFO = "/usr/local/bin/sapinfo";
28 # number of tries to repeat sapinfo if it fails first time
29 my $repeat = 3;
30 # seconds to wait between retries
31 my $repeat_wait = 5;
32
33 my %opts;
34 getopt('h:s:H:S:', \%opts);
35
36 my @config;
37 open(C, $CONFIG) || die "sap-mon.conf: $!";
38 @config = <C>;
39 close(C);
40
41 my @failed;
42 my @ok;
43 my $fail_msg = "";
44
45 # sap info leaves trace files, so create dir without write permission
46 # and chdir to it!
47 mkdir "/tmp/sap$$",0555 || die "can't make /tmp/sap$$: $!";
48 chdir "/tmp/sap$$" || die "can't chdir in /tmp/sap$$: $!";
49
50 foreach (@config) {
51 chomp;
52 s/#.+$//g; # nuke comments
53 s/^\s+$//g; # remove empty lines
54 my ($ashost,$sysnr,undef) = split(/\s+/,$_,3);
55 if ($ashost && $ashost ne "" && $sysnr && $sysnr ne "" &&
56 (($opts{h} && $ashost =~ m/$opts{h}/) || not $opts{h}) &&
57 (($opts{s} && $sysnr =~ m/$opts{s}/) || not $opts{s}) &&
58 (($opts{H} && $ashost !~ m/$opts{H}/) || not $opts{H}) &&
59 (($opts{S} && $sysnr !~ m/$opts{S}/) || not $opts{S}) ) {
60 my $ret = 1;
61 my $loop = 0;
62 my $output;
63 my $sys_id;
64 for(my $i=0; $i<$repeat; $i++) {
65 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;
72 $output = "" if (! defined $output);
73 if ($output =~ m/System\s+ID\s+(\w+)/i) {
74 $sys_id = $1;
75 last;
76 }
77 # print "$loop: $ashost $sysnr $ret\n";
78 $loop++;
79 sleep $repeat_wait;
80 }
81 if (! $sys_id) {
82 push @failed, "$ashost ($sysnr)";
83 $fail_msg .= $output;
84 } else {
85 push @ok, "$ashost ($sys_id)";
86 }
87 }
88 }
89
90 my $exit = 0;
91
92 if (@failed) {
93 print join(", ",@failed)," FAILED\n\n";
94 print "$fail_msg\n";
95 $exit = 1;
96 }
97
98 print "ALL OK\nCHECKED HOSTS (which are OK): ",join(", ",@ok),"\n\n";
99
100 rmdir "/tmp/sap$$" || die "can't rmdir in /tmp/sap$$: $!";
101
102 exit $exit;

  ViewVC Help
Powered by ViewVC 1.1.26