/[mon-modules]/pgsql.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 /pgsql.monitor

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (show annotations)
Wed Jul 10 12:04:01 2002 UTC (16 years, 11 months ago) by dpavlin
Branch: MAIN
Changes since 1.4: +12 -16 lines
better instructions

1 #!/usr/bin/perl -w
2 #
3 # Monitor multiple postgresql databases on different hosts
4 #
5 # Based on postgresql.monitor 1.3
6 # by Severin Luftensteiner <severin.luftensteiner@cubit.at>
7 #
8 #Usage: postresql.monitor username[:password]\@host/database ...
9 #
10 # a monitor to determine if a PostgreSQL database server is operational
11 #
12 # Rather than use tcp.monitor to ensure that your SQL server is responding
13 # on the proper port, this attempts to connect to and count all tables
14 # in given database on given server.
15 #
16 # You can use this monitor along with fping+args which also knows how to
17 # ping hosts in that user@host/dabase format.
18 #
19 # This monitor requires the perl5 DBI, DBD::mSQL and DBD::mysql modules,
20 # available from CPAN (http://www.cpan.org)
21 #
22 # Copyright (C) 2001, CubIT IT Solutions
23 # Written by Severin Luftensteiner <severin.luftensteiner@cubit.at>
24 # Copyright (C) 2002, Dobrica Pavlinusic <dpavlin@rot13.org>
25 #
26 # This program is free software; you can redistribute it and/or modify
27 # it under the terms of the GNU General Public License as published by
28 # the Free Software Foundation; either version 2 of the License, or
29 # (at your option) any later version.
30 #
31 # This program is distributed in the hope that it will be useful,
32 # but WITHOUT ANY WARRANTY; without even the implied warranty of
33 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34 # GNU General Public License for more details.
35 #
36 # You should have received a copy of the GNU General Public License
37 # along with this program; if not, write to the Free Software
38 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
39 #
40
41 use DBI;
42 use strict;
43
44 if (! @ARGV) {
45 print <<EOP1;
46 Usage: postresql.monitor username[:password]\@host/database ...
47 EOP1
48 exit 1;
49 }
50
51 my @test_db;
52 my @failures;
53
54 foreach (@ARGV) {
55 if (m/^([^:]+):?([^\@]*)\@([^\/]+)\/?(.*)$/) {
56 push @test_db, { user => $1, passwd => $2, host => $3, database => $4 };
57 } else {
58 push @failures, "Can't parse configuration: host '$_' not in username:password\@host/database format!";
59 }
60 }
61
62 foreach (@test_db) {
63 my $dbh = DBI->connect( "DBI:Pg:dbname=$_->{database};host=$_->{host};", $_->{user}, $_->{passwd} );
64 if( ! $dbh ) {
65 push @failures,"Could not connect server $_->{host}, database $_->{database}: " . $DBI::errstr;
66 } else {
67 my $sth = $dbh->prepare("select count(*) from pg_tables where tablename not like 'pg_%'");
68 if (! $sth->execute() ) {
69 push @failures, "Can't find out number of tables on $_->{host}, database $_->{database} " . $DBI::errstr;
70 } else {
71 my ($nr) = $sth->fetchrow_array;
72 if ($nr == 0) {
73 push @failures, "No tables on $_->{host}, database $_->{database} (turn off monitoring for this database?)";
74 }
75 }
76 $sth->finish();
77 }
78 if ($dbh) {
79 $dbh->disconnect();
80 }
81 }
82
83 if (@failures) {
84 print join (", ", @failures), "\n";
85 exit 1;
86 };
87 exit 0;

  ViewVC Help
Powered by ViewVC 1.1.26