diff --git a/lib/Resmon/Module_to_convert/A1000.pm b/lib/Resmon/Module_to_convert/A1000.pm deleted file mode 100644 index 41d757efb82de9fb0883683ebe30cbe1752be29c..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/A1000.pm +++ /dev/null @@ -1,17 +0,0 @@ -package Resmon::Module::A1000; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $unit = $arg->{'object'}; - my $output = cache_command("/usr/lib/osa/bin/healthck -a", 500); - my ($line) = grep(/^$unit:/, split(/\n/, $output)); - if ($line =~ /:\s+(.+)/) { - return "OK($1)") if($1 eq $arg->{'status'}; - return "BAD($1)"; - } - return "BAD(no data)"; -}; -1; diff --git a/lib/Resmon/Module_to_convert/ADAPTEC.pm b/lib/Resmon/Module_to_convert/ADAPTEC.pm deleted file mode 100644 index 53ef2fb036b713ad34edc81ae3568cc98830ac27..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ADAPTEC.pm +++ /dev/null @@ -1,44 +0,0 @@ -package Resmon::Module::ADAPTEC; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -use strict; -@ISA = qw/Resmon::Module/; - -# Adaptec RAID status -# requires the arcconf program to be installed (defaults to /usr/StorEdge, but -# you can specify this in the config variable arcconf. -# -# Example config: -# ADAPTEC { -# 1 : noop -# } -# -# ADAPTEC { -# 1 : arcconf => /usr/StorMan/arcconf -# } - -sub handler { - my $arg = shift; - # Unit number - my $unit = $arg->{'object'}; - # Path to arcconf program - my $arcconf = $arg->{'arcconf'} || '/usr/StorMan/arcconf'; - - my $status = "BAD"; - my $message = "No output"; - - my $output = cache_command("$arcconf getconfig $unit AD", 500); - foreach (split(/\n/, $output)) { - if (/Logical devices\/Failed\/Degraded\s+:\s+\d+\/(\d+)\/(\d+)/) { - my $failed = $1; - my $degraded = $2; - if ($failed == 0 || $degraded == 0) { - $status = "OK"; - } - $message = "$failed Failed, $degraded Degraded"; - last; - } - } - return $status, $message; -}; -1; diff --git a/lib/Resmon/Module_to_convert/ALTQSTAT.pm b/lib/Resmon/Module_to_convert/ALTQSTAT.pm deleted file mode 100644 index b7799ef9d294bb010752cc1fd55b8ae9a4da12bb..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ALTQSTAT.pm +++ /dev/null @@ -1,21 +0,0 @@ -package Resmon::Module::ALTQSTAT; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $os = $arg->fresh_status(); - return $os if $os; - my $unit = $arg->{'object'}; - my $status = cache_command("pfctl -sq 2>&1 | grep 'Bad file descriptor'", 500); - chomp $status; - if($status) { - return $arg->set_status("BAD(ALTQ needs reloading - $status)\n"); - } else { - return $arg->set_status("OK(ALTQ running fine)\n"); - } -}; - -1; diff --git a/lib/Resmon/Module_to_convert/BACULADIR.pm b/lib/Resmon/Module_to_convert/BACULADIR.pm deleted file mode 100644 index 513bf1ce8538a5fc8abce3b48f8c6f13071a5c7a..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/BACULADIR.pm +++ /dev/null @@ -1,21 +0,0 @@ -package Resmon::Module::BACULADIR; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $os = $arg->fresh_status(); - return $os if $os; - my $unit = $arg->{'object'}; - my $status = cache_command("echo 'st dir' | /opt/bacula/sbin/bconsole | grep '^Daemon'", 500); - chomp $status; - if($status) { - return $arg->set_status("OK(UP $status)\n"); - } else { - return $arg->set_status("BAD(BAD no status returned)\n"); - } -}; - -1; diff --git a/lib/Resmon/Module_to_convert/BACULAJOBS.pm b/lib/Resmon/Module_to_convert/BACULAJOBS.pm deleted file mode 100755 index c02fd3a31dfae0371283b6e85ef5b4a1c9b02fc3..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/BACULAJOBS.pm +++ /dev/null @@ -1,42 +0,0 @@ -package Resmon::Module::BACULAJOBS; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -use lib qw(/www/CPAN/lib/site_perl /opt/CPAN/lib/site_perl); -use DBI; -use DBD::Pg; - -sub handler { - my $arg = shift; - my $jobname = $arg->{'object'}; - my $level = $arg->{'level'}; - my $age = $arg->{'age'}; - print "$jobname, $level, $age\n"; - - my $db_name= 'bacula'; - my $db_user = 'bacula'; - my $db_pass = ''; - - my $dsn = "DBI:Pg:database=$db_name;host=127.0.0.1;port=5432"; - my $dbh = DBI->connect($dsn, $db_user, $db_pass, { PrintError => 1, AutoCommit => 1 }); - my $query = "SELECT count(*) FROM job j WHERE j.name=? AND j.type='B' AND j.level=? AND j.jobstatus='T' AND j.starttime > current_timestamp - ? * interval '1 hours'"; - my $sth = $dbh->prepare($query); - $sth->execute($jobname, $level, $age) || die $dbh->errstr; - - my $count = $sth->fetchrow_hashref->{'count'}; - my $status; - - if ($count > 0) { - $status = 'OK'; - } else { - $status = 'BAD'; - } - - $sth->finish; - $dbh->disconnect; - - return $status, "$count job(s) in the last $age hours"; -} - -1; diff --git a/lib/Resmon/Module_to_convert/BACULATAPE.pm b/lib/Resmon/Module_to_convert/BACULATAPE.pm deleted file mode 100644 index 74d2b84159b1825c0e63429f2b6462c7df4b464b..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/BACULATAPE.pm +++ /dev/null @@ -1,21 +0,0 @@ -package Resmon::Module::BACULATAPE; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $os = $arg->fresh_status(); - return $os if $os; - my $unit = $arg->{'object'}; - my $drives_up = cache_command("echo 'status storage=$unit' | /opt/bacula/sbin/bconsole | /bin/grep $unit | /bin/grep Device | /bin/grep -c 'is mounted'", 500); - chomp $drives_up; - if($drives_up > 0) { - return $arg->set_status("OK($drives_up UP)\n"); - } else { - return $arg->set_status("BAD($drives_up UP)\n"); - } -}; - -1; diff --git a/lib/Resmon/Module_to_convert/BSD_CHECK_TEMP.pm b/lib/Resmon/Module_to_convert/BSD_CHECK_TEMP.pm deleted file mode 100644 index 0f5d6d98e38b0a8c734cb1ede9a24e0e2c440443..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/BSD_CHECK_TEMP.pm +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl -use strict; -package Resmon::Module::BSD_CHECK_TEMP; -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; -my $DEBUG=1; - - -sub handler { - my $arg = shift; - my ($sensor,$chip)=split('@', $arg->{'object'}); - print STDERR "sensor=$sensor; chip=$chip\n" if $DEBUG; - $sensor =~s/\+/ /g; - my $warning = $arg->{'warning'}; - my $critical = $arg->{'critical'}; - $warning = $critical if not $warning; - my $output = cache_command("sysctl -n hw.sensors.$chip.$sensor", 30); - print STDERR $output if $DEBUG; - my $temp; - my $units; - $output =~ m/(-?\d+\.?\d*)\s+(\w+)/; - ($temp, $units) = ($1, $2); - - return "OK", { - message => "$temp $units $sensor\@$chip", - temp => [$temp, "i"], - } if ($temp && ($temp < $warning)); - - return "WARNING", { - message => "$temp $units $sensor\@$chip", - temp => [$temp, "i"], - } if ($temp && ($temp < $critical)); - - return "BAD", { - message => "$temp $units $sensor@$chip", - temp => [$temp, "i"], - }; -}; -1; - diff --git a/lib/Resmon/Module_to_convert/BSD_DISK_TEMP.pm b/lib/Resmon/Module_to_convert/BSD_DISK_TEMP.pm deleted file mode 100644 index 51aaa817b93acbfe69b607b6cbc56c2b4c2e5099..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/BSD_DISK_TEMP.pm +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl -use strict; -package Resmon::Module::BSD_DISK_TEMP; -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; -my $DEBUG=2; - - -sub handler { - my $arg = shift; - my $disk=$arg->{'object'}; - print STDERR "disk: $disk\n" if $DEBUG>1; - my $warning = $arg->{'warning'}; - print STDERR "warning: $warning\n" if $DEBUG>1; - my $critical = $arg->{'critical'}; - print STDERR "critical: $critical\n" if $DEBUG>1; - $warning = $critical if not $warning; - my $output = cache_command("/sbin/atactl /dev/$disk readattr", 30); - print STDERR "output:$output\n" if $DEBUG>1; - my ($line) = grep (/Temperature/, split(/\n/, $output)); - print STDERR "line:$line\n" if $DEBUG>1; - print STDERR "arr:",join("|",split(/\s+/,$line)),"\n" if $DEBUG>1; - my $temp = (split(/\s+/,$line))[3]; - return "OK($temp $disk)" if ($temp && ($temp<$warning)); - return "WARNING($temp disk)" if ($temp && ($temp<$critical)); - return "BAD($temp $disk)"; -}; -1; diff --git a/lib/Resmon/Module_to_convert/CHECK_DISK_TEMP.pm b/lib/Resmon/Module_to_convert/CHECK_DISK_TEMP.pm deleted file mode 100644 index bf87ba23c2ee156c4741949b3ae74d22dcdfec19..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/CHECK_DISK_TEMP.pm +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl -use strict; -package Resmon::Module::CHECK_DISK_TEMP; -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; -my $DEBUG=2; - - -sub handler { - my $arg = shift; - my $disk=$arg->{'object'}; - print STDERR "disk: $disk\n" if $DEBUG>1; - my $warning = $arg->{'warning'}; - print STDERR "warning: $warning\n" if $DEBUG>1; - my $critical = $arg->{'critical'}; - print STDERR "critical: $critical\n" if $DEBUG>1; - $warning = $critical if not $warning; - my $output = cache_command("/usr/sbin/smartctl -a /dev/$disk", 30); - print STDERR "output:$output\n" if $DEBUG>1; - my ($line) = grep (/Current Drive Temperature/, split(/\n/, $output)); - print STDERR "line:$line\n" if $DEBUG>1; - print STDERR "arr:",join("|",split(/\s+/,$line)),"\n" if $DEBUG>1; - my $temp = (split(/\s+/,$line))[3]; - return "OK($temp $disk)" if ($temp && ($temp<$warning)); - return "WARNING($temp disk)" if ($temp && ($temp<$critical)); - return "BAD($temp $disk)"; -}; -1; diff --git a/lib/Resmon/Module_to_convert/DATE.pm b/lib/Resmon/Module_to_convert/DATE.pm deleted file mode 100644 index 6901af6285a523a42a010ab705bc642081cc42f4..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/DATE.pm +++ /dev/null @@ -1,10 +0,0 @@ -package Resmon::Module::DATE; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - return "OK(".time().")"; -} - -1; diff --git a/lib/Resmon/Module_to_convert/DHCPLEASES.pm b/lib/Resmon/Module_to_convert/DHCPLEASES.pm deleted file mode 100755 index 787efc81eb6fa96fa67f370056e693980bf784d3..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/DHCPLEASES.pm +++ /dev/null @@ -1,57 +0,0 @@ -package Resmon::Module::DHCPLEASES; -use Resmon::ExtComm qw/cache_command run_cmd/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $net = $arg->{'object'}; - my $file = "/var/db/dhcpd.leases"; - my %ips; - open (IN, '<', $file); - my $date = run_cmd("date -u +'%Y/%m/%d %H:%M:%S;'"); - my ($actives,$mynet,$ip,$starts,$ends)=(0,'','','',''); - while (<IN>) { - if (/^lease/) { - my $lease=$_; - $mynet = ($lease =~ m/($net.\d+)/); - $ip = $1; - ($starts,$ends)=('',''); - ## print STDERR "mynet:($mynet,$net)\n"; - } - if ($mynet) { - ## print STDERR "in mynet:"; - if(/starts/) { - s/\s+starts\s+\d\s+//; - $starts = $_; - ## print STDERR "starts:($starts)\n"; - }elsif (/ends/) { - s/\s+ends\s+\d\s+//; - $ends = $_; - ## print STDERR "ends:($ends)\n"; - }elsif (/^}/) { - if (($starts le $date ) && ($ends ge $date)){ - if (!$ips{$ip}) { - $actives +=1; - $ips{$ip} = 1; - } - ## print STDERR "ACTIVE!}", $_; - }else{ - ## print STDERR "not active}", $_; - ## print STDERR "because today:($date)\n"; - } - } - }elsif (/^}/) { - ## print STDERR "not in mynet}", $_; - } - } - my ($warn,$crit)=($arg->{'warn'},$arg->{'crit'}); - if ($actives < $warn) { - return("OK($actives leases)"); - }elsif ($actives < $crit) { - return("WARNING($actives leases)"); - }else { - return("BAD($actives leases)"); - } -}; -1; diff --git a/lib/Resmon/Module_to_convert/DNS.pm b/lib/Resmon/Module_to_convert/DNS.pm deleted file mode 100755 index 3d1b93415f3dc6ebba9a0486b158abb825b09ad9..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/DNS.pm +++ /dev/null @@ -1,32 +0,0 @@ -package Resmon::Module::DNS; - -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; - -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# Checks the dns server status on onager - -sub handler { - my $self = shift; - my $object = $self->{object}; - - my $key = "-k $self->{key}" if $self->{key}; - - my $output = cache_command("rndc $key status 2>&1", 600); - if ($output) { - foreach (split(/\n/, $output)) { - if (/server is up and running/) { - return "OK", "$_"; - } elsif (/^rndc: neither \S+ nor (\S+) was found$/) { - return "BAD", "Key file $1 not found"; - } elsif (/connection refused/) { - return "BAD", "$_"; - } - } - } - return "BAD", "no data"; -} - -1; diff --git a/lib/Resmon/Module_to_convert/ECCMGR.pm b/lib/Resmon/Module_to_convert/ECCMGR.pm deleted file mode 100644 index 745d156f257311013fb9ce28e124953c4a009be0..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ECCMGR.pm +++ /dev/null @@ -1,41 +0,0 @@ -package Resmon::Module::ECCMGR; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# Note: This requires you have access to the ecelerity control lib. The -# easiest way to do this is to start resmon using ecelerity's perl install. -use Ecelerity::Control; - -# Sample config for resmon.conf -# (The module doesn't actually use anything other than 'services' to use as -# a label) -# ECCMGR { -# eccmgr : socket => /tmp/2026 -# } - -sub handler { - my $arg = shift; - my $proc = $arg->{'object'}; - my $socket = $arg->{'socket'} || '/tmp/2026'; - # Connect to ecelerity - my $ec = Ecelerity::Control->new({"Control" => $socket}); - eval { - # Check the version - $version = $ec->command('version'); - }; - if ($@) { - # Catch any could not connect error - $@ =~ /^(.*) at/; # Fetch just the error message and no file/line no. - return "BAD($1)"; - } - if ($version =~ /(eccmgr version: .*)\n/) { - return "OK($1)"; - } else { - # Something other than eccmgr responded, print out a version string - $version =~ s/\n/ /g; - $version =~ s/#//g; - return "BAD(eccmgr not running: $version)"; - } -}; -1; diff --git a/lib/Resmon/Module_to_convert/FRESHSVN.pm b/lib/Resmon/Module_to_convert/FRESHSVN.pm deleted file mode 100644 index 0134d18b7758b6d9301fcc2e726a41c74b858f29..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/FRESHSVN.pm +++ /dev/null @@ -1,66 +0,0 @@ -package Resmon::Module::FRESHSVN; -use strict; -use Resmon::ExtComm qw/cache_command run_cmd/; -use vars qw/@ISA/; -use File::Find; - -@ISA = qw/Resmon::Module/; - -sub handler { - # Find location of subversion binary - my $svn = 'svn'; - for my $path (qw(/usr/local/bin /opt/omni/bin)) { - if (-x "$path/svn") { - $svn = "$path/svn"; - last; - } - } - - my $arg = shift; - my $dir = $arg->{'object'}; - my $moutput = cache_command("$svn info $dir", 60); - my @mlines = split (/\n/,$moutput); - my ($URL,$mr); - for(@mlines) { - if (/^URL:\s*(.*)$/) { $URL=$1; } - elsif (/^Revision:\s*(\d+)/) { $mr = $1; } - } - return ("BAD(wrong URL, in conf:".$arg->{'URL'}.", checked out: $URL)") if ($URL ne $arg->{'URL'}); - my $uoutput = cache_command("$svn info --non-interactive $URL", 60); - my @ulines = split (/\n/,$uoutput); - my ($ur); - for(@ulines) { - if (/^Last Changed Rev:\s*(\d+)/) { $ur = $1; } - } - if(!$ur){ return "BAD(Unable to determine latest revision in repository)"; } - if($ur <= $mr){ return "OK(rev:$ur)"; } - else{ - my ($cY,$cM,$cD,$ch,$cm,$cs) = split (/ /, - run_cmd("date '+%Y %m %d %H %M %S'")); - my $cTime=$cs+60*($cm+60*($ch+24*($cD+31*($cM+12*$cY)))); - my $dNow = "$cM/$cD/$cY $ch:$cm:$cs"; chomp $dNow; - my ($uY,$uM,$uD,$uh,$um,$us); - for(@ulines) { - if (/^Last Changed Date:\s*(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{2}):(\d{2})/) { - ($uY,$uM,$uD,$uh,$um,$us) = ($1,$2,$3,$4,$5,$6); - } - } - my $uTime = $us+60*($um+60*($uh+24*($uD+31*($uM+12*$uY)))); - my $dCommitted = "$uM/$uD/$uY $uh:$um:$us"; - my $lag=$cTime-$uTime; - my $maxlag=$arg->{'maxlag'}*60 || 330; - if ($lag <= $maxlag){ - return "OK(delay $lag is less than $maxlag)"; - } - elsif ( ( ($us+60*($um+60*($uh+24*$uD))) < $maxlag ) - && ( ($cs+60*($cm+60*($ch+24*$cD))) < 2 * $maxlag ) - ) - { - return("WARNING(check unreliable, check later)"); - } - else { - return("BAD(now $dNow, my rev:$mr, repo rev:$ur, committed: $dCommitted)"); - } - } -} -1; diff --git a/lib/Resmon/Module_to_convert/LINUX_CHECK_TEMP.pm b/lib/Resmon/Module_to_convert/LINUX_CHECK_TEMP.pm deleted file mode 100644 index 2a2422856590d4ac0f6b60c31da6c4528f89de97..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/LINUX_CHECK_TEMP.pm +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -use strict; -package Resmon::Module::LINUX_CHECK_TEMP; -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; -my $DEBUG=0; - - -sub handler { - my $arg = shift; - my ($sensor,$chip)=split('@', $arg->{'object'}); - print STDERR "sensor=$sensor; chip=$chip\n" if $DEBUG; - $sensor =~s/\+/ /g; - my $warning = $arg->{'warning'}; - my $critical = $arg->{'critical'}; - $warning = $critical if not $warning; - my $output = cache_command("/usr/bin/sensors $chip", 30); - print STDERR $output if $DEBUG; - my @lines = split(/\n/, $output); - my ($temp,$continues); - for my $line (@lines) { - if ($line =~ /^$sensor:\s*[+-]?([\d.]+)/) { - $temp=$1; - ## print "case 1 temp:$temp line $line\n" if $DEBUG>1; - last; - } - elsif($line =~ /^$sensor:/){ - $continues = 1; - ## print "case 2 continues: $line\n" if $DEBUG>1; - }elsif ($line =~ /^\S/) { - $continues = 0; - ## print "case 3 discontinues: $line\n" if $DEBUG>1; - } - if($continues && $line =~ /^\s*[+-]?([\d.]*)°C/){ - $temp=$1; - ## print "case 4 temp:$temp line $line\n" if $DEBUG>1; - last; - } - ## print "case 5 continues=$continues and line $line\n" if $DEBUG>1; - } - return "OK($temp $sensor\@$chip)" if ($temp && ($temp<$warning)); - return "WARNING($temp $sensor\@$chip)" if ($temp && ($temp<$critical)); - return "BAD($temp $sensor@$chip)"; -}; -1; diff --git a/lib/Resmon/Module_to_convert/LOGFILE.pm b/lib/Resmon/Module_to_convert/LOGFILE.pm deleted file mode 100644 index 4f5f07987546dddd9270ee8ae52e542b3d87ace7..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/LOGFILE.pm +++ /dev/null @@ -1,54 +0,0 @@ -package Resmon::Module::LOGFILE; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -my %logfile_stats; -sub handler { - my $arg = shift; - 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 "BAD($arg->{nerrs}: $arg->{errors})"; - } - return "OK(0)"; - } - } else { - # File is a different file now - $arg->{lastsize} = 0; - $arg->{nerrs} = 0; - $arg->{errors} = ''; - } - } - if(!open(LOG, "<$file")) { - return "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 "BAD($arg->{nerrs}: $arg->{errors})"; - } - return "OK(0)"; -} -1; diff --git a/lib/Resmon/Module_to_convert/MDSTAT.pm b/lib/Resmon/Module_to_convert/MDSTAT.pm deleted file mode 100755 index 4ea923f24b17497683644eeef93c03e4ee46f311..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/MDSTAT.pm +++ /dev/null @@ -1,57 +0,0 @@ -package Resmon::Module::MDSTAT; -use strict; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -my $statfile = '/proc/mdstat'; - -sub handler { - my $arg = shift; - open FH, "<$statfile"; - my $getnext = 0; - my $status = "OK"; - my @message = (); - my $array = ""; - while (<FH>) { - chomp; - if (/^(md[0-9]+)\s*:\s+/) { - $array = $1; - my $messageline = "$array "; - my @baddevs = (); - foreach my $part (split(/ /,"$'")) { - if ($part eq "active") { - $messageline .= "active "; - } elsif ($part eq "inactive") { - $status = "BAD"; - $messageline .= "inactive "; - } elsif ($part =~ /^([a-z0-9]+)\[(\d+)\](?:\((\S+)\))?$/) { - if ($3 eq "F") { - $status = "BAD"; - push @baddevs, $1; - } - } - } - chop $messageline; - if (@baddevs) { - $messageline = "$messageline - " . join(', ', @baddevs) . - " faulted"; - } - push @message, $messageline; - } elsif (/\[([U_]+)\]/) { - my $devices = $1; - my $count = ($devices =~ tr/_//); - if ($count > 0) { - $status = "BAD"; - # Plural if required - my $s = ''; - if ($count > 1) { - $s = 's'; - } - push @message, "$array - $count device$s down"; - } - } - } - return $status, join('; ', @message); -}; -1; diff --git a/lib/Resmon/Module_to_convert/NAGIOS.pm b/lib/Resmon/Module_to_convert/NAGIOS.pm deleted file mode 100644 index 5f66ee250c7a789dedb66b09cf59d2f507f000ae..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/NAGIOS.pm +++ /dev/null @@ -1,47 +0,0 @@ -package Resmon::Module::NAGIOS; -use Resmon::ExtComm qw/cache_command run_cmd/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# Runs a nagios check script as a resmon check -# Example config file: -# NAGIOS { -# /path/to/check_something : args => -a my args -# /path/to/check_something_else : args => -a my args -w 10 -c 20 -# } - -sub handler { - my $arg = shift; - my $script = $arg->{'object'} || return "BAD", "No script specified"; - my $scriptargs = $arg->{'args'}; - my $output = run_cmd("$script $scriptargs"); - my $retval = $?; - if ($retval == -1) { - return "BAD", "command returning -1"; - } - $retval = $retval >> 8; - my $status = "BAD"; - # 0 - OK, 1 - WARNING, 2 - CRITICAL, 3 - UNKNOWN - # Treat UNKNOWN (and any other return code) as bad - if ($retval == 0) { - $status = "OK"; - } elsif ($retval == 1) { - $status = "WARNING"; - } elsif ($retval == 3) { - $output = "UNKNOWN: $output"; - } - if ($output) { - ($output, $perfdata) = split(/\s*\|\s*/, $output, 2); - chomp($output); - chomp($perfdata); - # This will show up in the resmon status page - if ($perfdata) { - $arg->{'perfdata'} = $perfdata; - } - return $status, $output; - } else { - return "BAD", "No output from check"; - } -} - -1; diff --git a/lib/Resmon/Module_to_convert/NETBACKUPTAPE.pm b/lib/Resmon/Module_to_convert/NETBACKUPTAPE.pm deleted file mode 100644 index a5d228f23c6330f5b13d74e96cbfe7b20ab69fd2..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/NETBACKUPTAPE.pm +++ /dev/null @@ -1,25 +0,0 @@ -package Resmon::Module::NETBACKUPTAPE; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $unit = $arg->{'object'}; - my $output = cache_command("/usr/openv/volmgr/bin/vmoprcmd -d ds", 500); - my $down = 0; - my $up = 0; - foreach my $line (split(/\n/, $output)) { - if ($line =~ /^\s*(\d+)\s+\S+\s+(\S+)/) { - my $tape = $1; - if($2 =~ /DOWN/) { $down++; } - else { $up++; } - } - } - if($down || !$up) { - return "BAD($up UP, $down DOWN)\n"; - } - return "OK($up UP)\n"; -}; -1; diff --git a/lib/Resmon/Module_to_convert/PING.pm b/lib/Resmon/Module_to_convert/PING.pm deleted file mode 100644 index f4bc21941073d26da327b753f87686ff67a6ee12..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/PING.pm +++ /dev/null @@ -1,31 +0,0 @@ -package Resmon::Module::PING; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use Switch; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $host = $arg->{'object'}; - # Limit in ms above which to go critical - my $limit = $arg->{'limit'} || "200"; - switch ($^O) { - case 'solaris' { - $pingcmd = "ping -s $host 56 1"} - else { - $pingcmd = "ping -c 1 $host"} - } - - my $output = cache_command($pingcmd, 30); - my ($line) = grep(/bytes from\s*/, split(/\n/, $output)); - if(my ($ms) = $line =~ /time= ?([0-9.]+) ?ms/) { - if($ms <= $limit) { - return "OK", "$ms ms"; - } - return "BAD", "$ms ms"; - } - return "BAD", "no data"; -} - -1; diff --git a/lib/Resmon/Module_to_convert/QUEUESIZE.pm b/lib/Resmon/Module_to_convert/QUEUESIZE.pm deleted file mode 100644 index c2399894fe8005c7edcfce66eea44232a11e6e3b..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/QUEUESIZE.pm +++ /dev/null @@ -1,70 +0,0 @@ -package Resmon::Module::QUEUESIZE; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# Checks ecelerity queue sizes and alerts on large queues - -# Path to ec_console -my $ecc = '/opt/ecelerity/bin/ec_console'; -# Domains to exclude from the 'common' check -my $exclude_domains = 'aol\.com|yahoo\.com|msn\.com|hotmail\.com|verizon\.net|comcast\.net|bellsouth\.net|earthlink\.net|mindspring\.com|pacbell\.net|sbcglobal\.net|cox\.net'; - -sub handler { - my $arg = shift; - - my $domain = $arg->{'object'}; - my $queue = $arg->{'queue'}; - my $threshold = $arg->{'count'}; - if( $domain !~ /common/i ) { - if ( $queue =~ /delayed/i ) { - $queue = "Delayed"; - } else { - $queue = "Active"; - } - my $rawOutput = cache_command( - "echo \"domain $domain\" | $ecc | grep \"$queue Queue:\"", 300); - @lines = split(/\n/,$rawOutput); - $numLines = $#lines; - $total = $lines[$numLines]; - if( $total =~ /\s*$queue Queue:\s*(\d+).*/ ) { - if( $1 > $threshold ) { - return "BAD", "$1 messages"; - } else { - return "OK", "$1 messages"; - } - } else { - return "OK", "0"; - } - } else { - my $rawOutput = cache_command( - "echo \"$queue $threshold\" | $ecc | grep Domain:",300); - $badDomains = 0; - my @bad; - foreach my $line (split /\n/, $rawOutput) { - chomp($line); - if( $line =~ /^Domain:\s*([\w\.]*)\s*.*A:\s*(\d+)\s*D:\s*(\d+)/ ) { - my $domain = $1; - my $aQueue = $2; - my $dQueue = $3; - if($domain !~ /$exclude_domains/) { - $badDomains++; - if( $queue =~ /active/i ) { - $queueCount = $aQueue; - } elsif( $queue =~ /delayed/i ) { - $queueCount = $dQueue; - } - push @bad, "$domain:$queueCount"; - } - } - } - $output = join(',', @bad); - if( $badDomains > 0 ) { - return "BAD", $output; - } else { - return "OK", "no domains over $threshold"; - } - } -} - -1; diff --git a/lib/Resmon/Module_to_convert/REMOTEFILESIZE.pm b/lib/Resmon/Module_to_convert/REMOTEFILESIZE.pm deleted file mode 100644 index f060d9e4022b9eaa9aa67129c67c792278cd9a99..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/REMOTEFILESIZE.pm +++ /dev/null @@ -1,27 +0,0 @@ -package Resmon::Module::REMOTEFILESIZE; -use vars qw/@ISA/; -use Resmon::ExtComm qw/cache_command/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $host; - my $file; - # Specify the host in hostname/path/to/file format, this method allows - # you to monitor the same file on multiple hosts - ($host, $file) = $arg->{'object'} =~ /^([^\/]+)?(\/.*)$/; - # Specify host as a paramater. This method doesn't allow you to monitor - # the same file on multiple hosts - $host ||= $arg->{'host'}; - my $output = cache_command("ssh -i /root/.ssh/id_dsa $host du -k $file", 600); - $output =~ /^(\d+)\s/; - my $size = $1 * 1024; - my $minsize = $arg->{minimum}; - my $maxsize = $arg->{maximum}; - return "BAD($size, too big)" - if($maxsize && ($size > $maxsize)); - return "BAD($size, too small)" - if($minsize && ($size > $minsize)); - return "OK($size)"; -} -1; diff --git a/lib/Resmon/Module_to_convert/ROMOUNT.pm b/lib/Resmon/Module_to_convert/ROMOUNT.pm deleted file mode 100755 index 922bdbf624ba45758277cb46cf8c40141820f849..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ROMOUNT.pm +++ /dev/null @@ -1,20 +0,0 @@ -package Resmon::Module::ROMOUNT; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $disk = $arg->{'object'}; - my $output = cache_command("mount | grep $disk", 180); - if($output) { - chomp $output; - if($output =~ /read-only/) { - return("OK($output)"); - } else { - return("BAD(mounted read-write)"); - } - } - return("BAD(no output)"); -}; -1; diff --git a/lib/Resmon/Module_to_convert/SCRIPT.pm b/lib/Resmon/Module_to_convert/SCRIPT.pm deleted file mode 100644 index 0e9f8213f5e61981f1df145dac2095852b6c81a6..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/SCRIPT.pm +++ /dev/null @@ -1,27 +0,0 @@ -package Resmon::Module::SCRIPT; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# Runs a custom helper script, returning the output. -# Example config file: -# SCRIPT { -# name : script => /path/to/perl_script.pl, cache => 30 -# name2 : script => /path/to/another_script.pl, cache => 30 -# } - -sub handler { - my $arg = shift; - my $object = $arg->{'object'}; - my $script = $arg->{'script'} || return "BAD", "No script specified"; - my $timeout = $arg->{'timeout'} || 30; - my $output = cache_command("$script", $timeout); - if ($output) { - chomp($output); - return $output; - } else { - return "BAD", "No output from command"; - } -} - -1; diff --git a/lib/Resmon/Module_to_convert/SIMPLESVN.pm b/lib/Resmon/Module_to_convert/SIMPLESVN.pm deleted file mode 100644 index 33cf36a88088e0de8a2ca1828aa19b08a0291a0e..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/SIMPLESVN.pm +++ /dev/null @@ -1,30 +0,0 @@ -package Resmon::Module::SIMPLESVN; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -# A 'simple' subversion checkout freshness check. Unlike FRESHSVN, this check -# doesn't have a grace period, nor does it check for the correct URL being -# checked out. Because of this, this module can be used with an older version -# of subversion that doesn't have support for 'svn info' on remote URLs. -# -# Example config: -# -# SIMPLESVN { -# /path/to/working/copy : noop -# } - -sub handler { - my $arg = shift; - my $wc = $arg->{'object'}; - my $output = cache_command("svn st -u -q $wc", 60); - my @lines = grep { $_ !~ /^\?/ } split(/\n/, $output); - my $status = scalar(@lines)>1 ? "BAD" : "OK"; - my $revision = 0; - if($lines[-1] =~ /^Status against revision:\s+(\d+)/) { - $revision = $1; - } - return $status, "$revision"; -} - -1; diff --git a/lib/Resmon/Module_to_convert/SPARCTEMP.pm b/lib/Resmon/Module_to_convert/SPARCTEMP.pm deleted file mode 100644 index f109ed091a5665a663828af9f671f637eb3263f7..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/SPARCTEMP.pm +++ /dev/null @@ -1,32 +0,0 @@ -package Resmon::Module::SPARCTEMP; -use Resmon::ExtComm qw/cache_command run_cmd/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $DEBUG=0; - my $arg = shift; - my $sensor = $arg->{'object'}; - print STDERR $sensor,"\n" if $DEBUG; - my $command = "/usr/sbin/prtpicl -v -c temperature-sensor"; - print STDERR "command=$command\n" if $DEBUG; - my $output = cache_command($command, 30); - # my $output = run_cmd("/usr/sbin/prtpicl -v -c temperature-sensor"); - print STDERR $output if $DEBUG>1; - my @lines = split(/\n/, $output); - print STDERR join("\nlines", @lines) if $DEBUG>1; - my ($temp,$warning, $critical,$name); - for (@lines) { - print STDERR "line: $_ \n" if $DEBUG; - $temp=$1 if /:Temperature\s*(\d*)/; - $warning=$1 if /:HighWarningThreshold\s*(\d*)/i; - $critical=$1 if /:HighShutdownThreshold\s*(\d*)/i; - $name=$1 if /:name\s*(\w*)/; - print STDERR "temp: $temp warn: $warning crit: $critical name: $name\n" if $DEBUG; - last if $name =~ m/^$sensor/; - } - return "OK($temp)" if $temp <= $warning; - return "WARNING($temp)" if $temp < $critical; - return "BAD($temp)"; -} -1; diff --git a/lib/Resmon/Module_to_convert/TWRAID.pm b/lib/Resmon/Module_to_convert/TWRAID.pm deleted file mode 100644 index e478cefdefe4a823cac1d9100d1c3bdecc4c974b..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/TWRAID.pm +++ /dev/null @@ -1,52 +0,0 @@ -package Resmon::Module::TWRAID; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -use strict; -@ISA = qw/Resmon::Module/; - -# 3ware RAID status -# requires the tw_cli program to be installed (defaults to /usr/local/bin, but -# you can specify this in the config variable tw_cli. -# -# Example config: -# TWRAID { -# /c0/u1 : noop -# } -# -# TWRAID { -# /co/u1 : tw_cli => /opt/3ware/bin/tw_cli -# } - -sub handler { - my $arg = shift; - # Unit in the form /cx/ux - /c0/u1 is the first unit - my $unit = $arg->{'object'}; - # Path to tw_cli program - my $tw_cli = $arg->{'tw_cli'} || '/usr/local/bin/tw_cli'; - - my $status = "OK"; - my @messages; - - my $output = cache_command("$tw_cli $unit show", 500); - for (split(/\n/, $output)) { - my @parts = split(/ +/); - next if ($parts[0] !~ /^u[0-9]/); - if ($parts[2] ne "OK") { - $status = "BAD"; - my $type; - if ($parts[1] eq "DISK") { - my $port = $parts[5]; - if ($port eq "-") { - $port = "not present"; - } - $type = "(disk $port)"; - } else { - $type = "($parts[1])"; - } - push @messages, "$parts[0] $type $parts[2]"; - } - } - return $status, join(", ", @messages); -}; -1; - diff --git a/lib/Resmon/Module_to_convert/WALCHECK.pm b/lib/Resmon/Module_to_convert/WALCHECK.pm deleted file mode 100644 index c07133bc4ef114131d0478e632e242adfa124d85..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/WALCHECK.pm +++ /dev/null @@ -1,65 +0,0 @@ -package Resmon::Module::WALCHECK; -use Resmon::Module; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; -use Time::Local; - -# Sample config for resmon.conf -# WALCHECK { -# check_pg_replay_mode : logdir => /data/set/pgdb2/pgdata/82/pg_log -# } -# -# The logdir may also be in /data/postgres/82/pg_log. Check for a pg_log dir -# with postgresql-yyyy-mm-dd.log files in. - -######################### -sub splittime { - my ($val,@list) = @_; - my @rv; - - $val = abs($val); - foreach my $factor (@list){ - push @rv,$val%$factor; - $val/=$factor; - } - push @rv,int($val); - return @rv; -} -######################### - -sub handler { - my $arg = shift; - my $logdir = $arg->{'logdir'}; - opendir(D, $logdir); - my @files = sort grep /^postgresql-[\d-]+_?\d*\.log$/, readdir(D); - closedir(D); - my $wallog = $files[-1]; - - open(F, "<", "$logdir/$wallog"); - # Manual split here to work around strange bug where <F> doesn't work - # when a machine is under load - local $/; # Make <F> read the whole file - my @lines = grep(/LOG: restored log file/, split('\n', <F>)); - ($year,$month,$day,$hour,$min) = ( - $lines[-1] =~ /^(\d\d\d\d)-(\d\d)-(\d\d)\s(\d+):(\d+)/ ); - close(F); - - # subtract 1 to compensate for perl stupidity - my $proc = timegm(0,$min,$hour,$day,$month-1,$year); - - my $now = time(); - my @nn = localtime($now); - my $lnow = timegm(@nn); - - my $diff = $lnow - $proc; - my @tsplit = splittime((0 - $diff),60,60,24,7); - - if ($diff > 3600) - { - return "BAD($diff seconds behind)"; - } else { - return "OK($diff seconds behind)"; - } -} -1; diff --git a/lib/Resmon/Module_to_convert/ZFSYNCHECK.pm b/lib/Resmon/Module_to_convert/ZFSYNCHECK.pm deleted file mode 100644 index 80ef4b2008cbadc028a6cf60dda740f7f3d75b9e..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ZFSYNCHECK.pm +++ /dev/null @@ -1,43 +0,0 @@ -package Resmon::Module::ZFSYNCHECK; -use strict; -use Resmon::ExtComm qw/cache_command/; -use vars qw/@ISA/; -use Time::Local; -@ISA = qw/Resmon::Module/; -sub handler { - my $arg=shift; - my $zfs=$arg->{'object'}; - my $age=$arg->{'age'}; - my $attempt=0; - my $MAXATTEMPTS=5; - my $ZFSQUERY="/usr/sbin/zfs list -tsnapshot -H -Screation -oname"; - while (`pgrep -f -l "^$ZFSQUERY"`) { - if ($attempt++ < $MAXATTEMPTS) { - sleep(1); - } - else { - return "BAD ($ZFSQUERY hanged)"; - } - } - my $recentsnap = cache_command("$ZFSQUERY| grep '^$zfs\@' | head -1", 300); - return "BAD(no snapshot of $zfs)" if not $recentsnap; - $ZFSQUERY="/usr/sbin/zfs get -H -p -ovalue creation $recentsnap"; - while (`pgrep -f "^$ZFSQUERY"`) { - if ($attempt++ < $MAXATTEMPTS) { - sleep(1); - } - else { - return "BAD ($ZFSQUERY hanged)"; - } - } - my $snaptime = cache_command($ZFSQUERY, 300); - my $snapage=time()-$snaptime; - if($snapage < $age) { - return "OK($snapage < $age)"; - }elsif ($snapage >= $age){ - return "BAD($snapage >= $age)"; - } - return "BAD(for snapshot $recentsnap we have unexpected creation $snaptime)"; -}; -1; - diff --git a/lib/Resmon/Module_to_convert/ZIMBRA.pm b/lib/Resmon/Module_to_convert/ZIMBRA.pm deleted file mode 100644 index 8444bb0eac93b1d1cb35be2a5795d519835d8748..0000000000000000000000000000000000000000 --- a/lib/Resmon/Module_to_convert/ZIMBRA.pm +++ /dev/null @@ -1,17 +0,0 @@ -package Resmon::Module::ZIMBRA; -use Resmon::ExtComm qw/cache_command/; -use Resmon::Module; -use vars qw/@ISA/; -@ISA = qw/Resmon::Module/; - -sub handler { - my $arg = shift; - my $unit = $arg->{'object'}; - my $output = cache_command("su - zimbra -c 'zmcontrol status' | grep 'not running'", 500); - if($output) { - $output =~s /\n/:/gs; - return "BAD($output)"; - } - return "OK(All services running)"; -}; -1;