/[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

Diff of /pgsql.monitor

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by dpavlin, Wed Jul 10 08:43:16 2002 UTC revision 1.7 by dpavlin, Fri Jul 26 10:43:47 2002 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl  #!/usr/bin/perl -w
2  #  #
3  # $Id$  # Monitor multiple postgresql databases on different hosts
4  # $Revision$  #
5  # $Author$  # Dobrica Pavlinusic <dpavlin@rot13.org>
6  #  # http://www.rot13.org/~dpavlin/sysadm.html
7  #Usage:  postresql.monitor [options]  #
8  #  # Based on postgresql.monitor 1.3
9  #   --database=<Databasename>  indicates the database to which is connected  # by Severin Luftensteiner <severin.luftensteiner@cubit.at>
10  #   --username=<Username>      DB-User which is used to connect to the DB  # it's not limited to singe host and/or singe database.
11  #   --password=<Password>      DB-Password which is used to connect to the DB  #
12  #   --host=<Databasehost>      Host of the Database (optional,default=localhost)  # Usage:  pgsql.monitor username[:password]@host/database ...
 #   --port=<Portnumber>        Port on which you want to connect (optional,default=5432)  
13  #  #
14  # a monitor to determine if a PostgreSQL database server is operational  # a monitor to determine if a PostgreSQL database server is operational
15  #  #
16  # Rather than use tcp.monitor to ensure that your SQL server is responding  # Rather than use tcp.monitor to ensure that your SQL server is responding
17  # on the proper port, this attempts to connect to and list the databases  # on the proper port, this attempts to connect to and count all tables
18  # on a given database server.  # in given database on given server.
19    #
20    # You can use this monitor along with fping+args which also knows how to
21    # ping hosts in that user@host/dabase format.
22  #  #
23  # This monitor requires the perl5 DBI, DBD::mSQL and DBD::mysql modules,  # This monitor requires the perl5 DBI, DBD::Pg modules,
24  # available from CPAN (http://www.cpan.org)  # available from CPAN (http://www.cpan.org)
25  #  #
26  #    Copyright (C) 2001, CubIT IT Solutions  #    Copyright (C) 2001, CubIT IT Solutions
27  #    Written by Severin Luftensteiner <severin.luftensteiner@cubit.at>  #    Written by Severin Luftensteiner <severin.luftensteiner@cubit.at>
28    #    Copyright (C) 2002, Dobrica Pavlinusic <dpavlin@rot13.org>
29  #  #
30  #    This program is free software; you can redistribute it and/or modify  #    This program is free software; you can redistribute it and/or modify
31  #    it under the terms of the GNU General Public License as published by  #    it under the terms of the GNU General Public License as published by
# Line 40  Line 43 
43  #  #
44    
45  use DBI;  use DBI;
46  use Getopt::Long;  use strict;
   
 GetOptions( \%options,"port=s", "username=s", "password=s", "database=s", "host=s" );  
   
 # uncomment these two lines and provide suitable information if you don't  
 # want to pass sensitive information on the command line  
 #$options{username} ||= "username";  
 #$options{password} ||= "password";  
   
 $mode="Pg";  
 if ($options{host} eq ""){  
   $options{"host"=>"localhost"};  
 }  
 if ($options{port} eq ""){  
   $options{"port"=>"5432"};  
 }    
47    
48  if (($options{username} eq "") || ($options{password} eq "") || ($options{database} eq "")){  if (! @ARGV) {
49  print <<EOP1;  print <<EOP1;
50  Usage:  postresql.monitor [options]  Usage:  postresql.monitor username[:password]\@host/database ...
   
    --database=<Databasename>  indicates the database to which is connected  
    --username=<Username>      DB-User which is used to connect to the DB  
    --password=<Password>      DB-Password which is used to connect to the DB  
    --host=<Databasehost>      Host of the Database (optional,default=localhost)  
    --port=<Portnumber>        Port on which you want to connect (optional,default=5432)  
51  EOP1  EOP1
52      die();          exit 1;
53  }  }
54    
55    my @test_db;
56    my @failures;
57    
58    foreach (@ARGV) {
59            if (m/^([^:]+):?([^\@]*)\@([^\/]+)\/?(.*)$/) {
60                    push @test_db, { user => $1, passwd => $2, host => $3, database => $4 };
61            } else {
62                    push @failures, "Can't parse configuration: host '$_' not in username:password\@host/database format!";
63            }
64    }
65    
66  my( $dbh ) = DBI->connect( "DBI:$mode:dbname=$options{database};$options{host};$options{port}", $options{username}, $options{password} );  foreach (@test_db) {
67  if( ! $dbh ) {          my $dbh = DBI->connect( "DBI:Pg:dbname=$_->{database};host=$_->{host};", $_->{user}, $_->{passwd} );
68    push( @failures, "Could not connect to $mode server $host: " . $DBI::errstr );          if( ! $dbh ) {
69                    push @failures,"Could not connect server $_->{host}, database $_->{database}: " . $DBI::errstr;
70            } else {
71                    my $sth = $dbh->prepare("select count(*) from pg_tables where tablename not like 'pg_%'");
72                    if (! $sth->execute() ) {
73                            push @failures, "Can't find out number of tables on $_->{host}, database $_->{database} " . $DBI::errstr;
74                    } else {
75                            my ($nr) = $sth->fetchrow_array;
76                            if ($nr == 0) {
77                                    push @failures, "No tables on $_->{host}, database $_->{database} (turn off monitoring for this database?)";
78                            }
79                    }
80                    $sth->finish();
81            }
82            if ($dbh) {
83                    $dbh->disconnect();
84            }
85  }  }
86    
87  if (@failures) {  if (@failures) {
88      print join (", ", @failures), "\n";      print join (", ", @failures), "\n";
89      exit 1;      exit 1;
90  };  };
 if ($dbh){  
   $dbh->disconnect();  
 }  
   
91  exit 0;  exit 0;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.26