Skip to content
Snippets Groups Projects
Commit 748aca8e authored by Mark Harrison's avatar Mark Harrison
Browse files

Split out the modules from Modules.pm to the Modules/ directory. Also made

sure each module returned a true value.


git-svn-id: https://labs.omniti.com/resmon/trunk@92 8c0face9-b7db-6ec6-c4b3-d5f7145c7d55
parent 9e52c9e9
No related branches found
No related tags found
No related merge requests found
Showing
with 191 additions and 187 deletions
...@@ -73,186 +73,6 @@ sub config_as_hash { ...@@ -73,186 +73,6 @@ sub config_as_hash {
} }
return $conf; return $conf;
} }
#### Begin actual monitor functions ####
package Resmon::Module::DATE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $arg->set_status("OK(".time().")");
}
package Resmon::Module::DISK;
use Resmon::ExtComm qw/cache_command/;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
my $dfcmd = ($^O eq 'linux') ? 'df -kP' : 'df -k';
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $devorpart = $arg->{'object'};
my $output = cache_command("$dfcmd", 120);
my ($line) = grep(/$devorpart\s*/, split(/\n/, $output));
if($line =~ /(\d+)%/) {
if($1 > $arg->{'limit'}) {
return $arg->set_status("BAD($1% full)");
}
if(exists $arg->{'warnat'} && $1 > $arg->{'warnat'}) {
return $arg->set_status("WARNING($1% full)");
}
return $arg->set_status("OK($1% full)");
}
return $arg->set_status("BAD(no data)");
}
package Resmon::Module::LOGFILE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
my %logfile_stats;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my $match = $arg->{'match'};
my $max = $arg->{'max'} || 8;
my @statinfo = stat($file);
if(exists($arg->{file_dev})) {
if(($arg->{file_dev} == $statinfo[0]) &&
($arg->{file_ino} == $statinfo[1])) {
if($arg->{lastsize} == $statinfo[7]) {
if($arg->{errors}) {
return $arg->set_status("BAD($arg->{nerrs}: $arg->{errors})");
}
return $arg->set_status("OK(0)");
}
} else {
# File is a different file now
$arg->{lastsize} = 0;
$arg->{nerrs} = 0;
$arg->{errors} = '';
}
}
if(!open(LOG, "<$file")) {
return $arg->set_status("BAD(ENOFILE)");
}
seek(LOG, $arg->{lastsize}, 0);
while(<LOG>) {
chomp;
if(/$match/) {
if($arg->{nerrs} < $max) {
$arg->{errors} .= " " if(length($arg->{errors}));
$arg->{errors} .= $_;
}
$arg->{nerrs}++;
}
}
# Remember where we were
$arg->{file_dev} = $statinfo[0];
$arg->{file_ino} = $statinfo[1];
$arg->{lastsize} = $statinfo[7];
if($arg->{nerrs}) {
return $arg->set_status("BAD($arg->{nerrs}: $arg->{errors})");
}
return $arg->set_status("OK(0)");
}
package Resmon::Module::FILESIZE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my @statinfo = stat($file);
my $size = $statinfo[7];
my $minsize = $arg->{minimum};
my $maxsize = $arg->{maximum};
return $arg->set_status("BAD(too big, $size > $maxsize)")
if($maxsize && ($size > $maxsize));
return $arg->set_status("BAD(too small, $size < $minsize)")
if($minsize && ($size > $minsize));
return $arg->set_status("OK($size)");
}
package Resmon::Module::REMOTEFILESIZE;
use vars qw/@ISA/;
use Resmon::ExtComm qw/cache_command/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $host = $arg->{'host'};
my $file = $arg->{'object'};
my $output = cache_command("ssh -i /root/.ssh/id_dsa $host du -b $file", 600);
$output =~ /^(\d+)\s/;
my $size = $1;
my $minsize = $arg->{minimum};
my $maxsize = $arg->{maximum};
return $arg->set_status("BAD(too big, $size > $maxsize)")
if($maxsize && ($size > $maxsize));
return $arg->set_status("BAD(too small, $size < $minsize)")
if($minsize && ($size > $minsize));
return $arg->set_status("OK($size)");
}
package Resmon::Module::FILEAGE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my @statinfo = stat($file);
my $age = time() - $statinfo[9];
return $arg->set_status("BAD(too old $age seconds)")
if($arg->{maximum} && ($age > $arg->{maximum}));
return $arg->set_status("BAD(too new $age seconds)")
if($arg->{minimum} && ($age > $arg->{minimum}));
return $arg->set_status("OK($age)");
}
package Resmon::Module::NETSTAT;
use Resmon::ExtComm qw/cache_command/;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $output = cache_command("netstat -an", 30);
my @lines = split(/\n/, $output);
@lines = grep(/\s$arg->{state}\s*$/, @lines) if($arg->{state});
@lines = grep(/^$arg->{localip}/, @lines) if($arg->{localip});
@lines = grep(/^\s*[\w\d\*\.]+.*[\.\:]+$arg->{localport}/, @lines) if($arg->{localport});
@lines = grep(/[\d\*\.]+\d+\s+$arg->{remoteip}/, @lines)
if($arg->{remoteip});
@lines = grep(/[\d\*\.]+\s+[\d\*\.]+[\.\:]+$arg->{remoteport}\s+/, @lines)
if($arg->{remoteport});
my $count = scalar(@lines);
return $arg->set_status("BAD($count)")
if($arg->{limit} && ($count > $arg->{limit}));
return $arg->set_status("BAD($count)")
if($arg->{atleast} && ($count < $arg->{atleast}));
return $arg->set_status("OK($count)");
}
$rmloading = "Demand loading"; $rmloading = "Demand loading";
1; 1;
...@@ -16,4 +16,4 @@ sub handler { ...@@ -16,4 +16,4 @@ sub handler {
} }
return $arg->set_status("BAD(no data)"); return $arg->set_status("BAD(no data)");
}; };
1;
package Resmon::Module::DATE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $arg->set_status("OK(".time().")");
}
1;
...@@ -51,3 +51,4 @@ sub handler { ...@@ -51,3 +51,4 @@ sub handler {
return($arg->set_status("BAD($actives leases > $crit!)")); return($arg->set_status("BAD($actives leases > $crit!)"));
} }
}; };
1;
package Resmon::Module::DISK;
use Resmon::ExtComm qw/cache_command/;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
my $dfcmd = ($^O eq 'linux') ? 'df -kP' : 'df -k';
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $devorpart = $arg->{'object'};
my $output = cache_command("$dfcmd", 120);
my ($line) = grep(/$devorpart\s*/, split(/\n/, $output));
if($line =~ /(\d+)%/) {
if($1 > $arg->{'limit'}) {
return $arg->set_status("BAD($1% full)");
}
if(exists $arg->{'warnat'} && $1 > $arg->{'warnat'}) {
return $arg->set_status("WARNING($1% full)");
}
return $arg->set_status("OK($1% full)");
}
return $arg->set_status("BAD(no data)");
}
1;
...@@ -40,4 +40,4 @@ sub handler { ...@@ -40,4 +40,4 @@ sub handler {
return $arg->set_status("BAD(eccmgr not running: $version)"); return $arg->set_status("BAD(eccmgr not running: $version)");
} }
}; };
1;
...@@ -16,4 +16,4 @@ sub handler { ...@@ -16,4 +16,4 @@ sub handler {
} }
return $arg->set_status("OK(no faults)"); return $arg->set_status("OK(no faults)");
}; };
1;
package Resmon::Module::FILEAGE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my @statinfo = stat($file);
my $age = time() - $statinfo[9];
return $arg->set_status("BAD(too old $age seconds)")
if($arg->{maximum} && ($age > $arg->{maximum}));
return $arg->set_status("BAD(too new $age seconds)")
if($arg->{minimum} && ($age > $arg->{minimum}));
return $arg->set_status("OK($age)");
}
1;
package Resmon::Module::FILESIZE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my @statinfo = stat($file);
my $size = $statinfo[7];
my $minsize = $arg->{minimum};
my $maxsize = $arg->{maximum};
return $arg->set_status("BAD(too big, $size > $maxsize)")
if($maxsize && ($size > $maxsize));
return $arg->set_status("BAD(too small, $size < $minsize)")
if($minsize && ($size > $minsize));
return $arg->set_status("OK($size)");
}
1;
...@@ -63,3 +63,4 @@ sub handler { ...@@ -63,3 +63,4 @@ sub handler {
} }
} }
} }
1;
...@@ -34,4 +34,3 @@ sub handler { ...@@ -34,4 +34,3 @@ sub handler {
} }
1; 1;
package Resmon::Module::LOGFILE;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
my %logfile_stats;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $file = $arg->{'object'};
my $match = $arg->{'match'};
my $max = $arg->{'max'} || 8;
my @statinfo = stat($file);
if(exists($arg->{file_dev})) {
if(($arg->{file_dev} == $statinfo[0]) &&
($arg->{file_ino} == $statinfo[1])) {
if($arg->{lastsize} == $statinfo[7]) {
if($arg->{errors}) {
return $arg->set_status("BAD($arg->{nerrs}: $arg->{errors})");
}
return $arg->set_status("OK(0)");
}
} else {
# File is a different file now
$arg->{lastsize} = 0;
$arg->{nerrs} = 0;
$arg->{errors} = '';
}
}
if(!open(LOG, "<$file")) {
return $arg->set_status("BAD(ENOFILE)");
}
seek(LOG, $arg->{lastsize}, 0);
while(<LOG>) {
chomp;
if(/$match/) {
if($arg->{nerrs} < $max) {
$arg->{errors} .= " " if(length($arg->{errors}));
$arg->{errors} .= $_;
}
$arg->{nerrs}++;
}
}
# Remember where we were
$arg->{file_dev} = $statinfo[0];
$arg->{file_ino} = $statinfo[1];
$arg->{lastsize} = $statinfo[7];
if($arg->{nerrs}) {
return $arg->set_status("BAD($arg->{nerrs}: $arg->{errors})");
}
return $arg->set_status("OK(0)");
}
1;
...@@ -24,4 +24,4 @@ sub handler { ...@@ -24,4 +24,4 @@ sub handler {
} }
return $arg->set_status("OK($up UP)\n"); return $arg->set_status("OK($up UP)\n");
}; };
1;
package Resmon::Module::NETSTAT;
use Resmon::ExtComm qw/cache_command/;
use vars qw/@ISA/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $output = cache_command("netstat -an", 30);
my @lines = split(/\n/, $output);
@lines = grep(/\s$arg->{state}\s*$/, @lines) if($arg->{state});
@lines = grep(/^$arg->{localip}/, @lines) if($arg->{localip});
@lines = grep(/^\s*[\w\d\*\.]+.*[\.\:]+$arg->{localport}/, @lines) if($arg->{localport});
@lines = grep(/[\d\*\.]+\d+\s+$arg->{remoteip}/, @lines)
if($arg->{remoteip});
@lines = grep(/[\d\*\.]+\s+[\d\*\.]+[\.\:]+$arg->{remoteport}\s+/, @lines)
if($arg->{remoteport});
my $count = scalar(@lines);
return $arg->set_status("BAD($count)")
if($arg->{limit} && ($count > $arg->{limit}));
return $arg->set_status("BAD($count)")
if($arg->{atleast} && ($count < $arg->{atleast}));
return $arg->set_status("OK($count)");
}
1;
...@@ -17,4 +17,4 @@ sub handler { ...@@ -17,4 +17,4 @@ sub handler {
} }
return($arg->set_status("BAD(no output)")); return($arg->set_status("BAD(no output)"));
}; };
1;
package Resmon::Module::REMOTEFILESIZE;
use vars qw/@ISA/;
use Resmon::ExtComm qw/cache_command/;
@ISA = qw/Resmon::Module/;
sub handler {
my $arg = shift;
my $os = $arg->fresh_status();
return $os if $os;
my $host = $arg->{'host'};
my $file = $arg->{'object'};
my $output = cache_command("ssh -i /root/.ssh/id_dsa $host du -b $file", 600);
$output =~ /^(\d+)\s/;
my $size = $1;
my $minsize = $arg->{minimum};
my $maxsize = $arg->{maximum};
return $arg->set_status("BAD(too big, $size > $maxsize)")
if($maxsize && ($size > $maxsize));
return $arg->set_status("BAD(too small, $size < $minsize)")
if($minsize && ($size > $minsize));
return $arg->set_status("OK($size)");
}
1;
...@@ -24,3 +24,4 @@ sub handler { ...@@ -24,3 +24,4 @@ sub handler {
} }
return $arg->set_status("OK(no services in maintenance mode)"); return $arg->set_status("OK(no services in maintenance mode)");
}; };
1;
...@@ -64,4 +64,4 @@ sub handler { ...@@ -64,4 +64,4 @@ sub handler {
return $arg->set_status( "OK(pitr replay is $tsplit[2] hours, $tsplit[1] minutes behind)"); return $arg->set_status( "OK(pitr replay is $tsplit[2] hours, $tsplit[1] minutes behind)");
} }
} }
1;
...@@ -16,3 +16,4 @@ sub handler { ...@@ -16,3 +16,4 @@ sub handler {
} }
return $arg->set_status("OK(All services running)"); return $arg->set_status("OK(All services running)");
}; };
1;
...@@ -21,3 +21,4 @@ sub handler { ...@@ -21,3 +21,4 @@ sub handler {
} }
return $arg->set_status("OK(all pools are healthy)"); return $arg->set_status("OK(all pools are healthy)");
}; };
1;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment