From 748aca8e44f7a19fb38f861ea67990fb00933a94 Mon Sep 17 00:00:00 2001
From: Mark Harrison <mark@omniti.com>
Date: Thu, 15 May 2008 21:48:02 +0000
Subject: [PATCH] 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
---
 lib/Resmon/Module.pm                | 180 ----------------------------
 lib/Resmon/Module/A1000.pm          |   2 +-
 lib/Resmon/Module/DATE.pm           |  11 ++
 lib/Resmon/Module/DHCPLEASES.pm     |   1 +
 lib/Resmon/Module/DISK.pm           |  26 ++++
 lib/Resmon/Module/ECCMGR.pm         |   2 +-
 lib/Resmon/Module/FAULTS.pm         |   2 +-
 lib/Resmon/Module/FILEAGE.pm        |  18 +++
 lib/Resmon/Module/FILESIZE.pm       |  20 ++++
 lib/Resmon/Module/FRESHSVN.pm       |   1 +
 lib/Resmon/Module/INODES.pm         |   1 -
 lib/Resmon/Module/LOGFILE.pm        |  56 +++++++++
 lib/Resmon/Module/NETBACKUPTAPE.pm  |   2 +-
 lib/Resmon/Module/NETSTAT.pm        |  26 ++++
 lib/Resmon/Module/PGREP.pm          |   2 +-
 lib/Resmon/Module/REMOTEFILESIZE.pm |  23 ++++
 lib/Resmon/Module/SMFMAINTENANCE.pm |   1 +
 lib/Resmon/Module/WALCHECK.pm       |   2 +-
 lib/Resmon/Module/ZIMBRA.pm         |   1 +
 lib/Resmon/Module/ZPOOL.pm          |   1 +
 lib/Resmon/Module/ZPOOLERRS.pm      |   1 +
 21 files changed, 192 insertions(+), 187 deletions(-)
 create mode 100644 lib/Resmon/Module/DATE.pm
 create mode 100644 lib/Resmon/Module/DISK.pm
 create mode 100644 lib/Resmon/Module/FILEAGE.pm
 create mode 100644 lib/Resmon/Module/FILESIZE.pm
 create mode 100644 lib/Resmon/Module/LOGFILE.pm
 create mode 100644 lib/Resmon/Module/NETSTAT.pm
 create mode 100644 lib/Resmon/Module/REMOTEFILESIZE.pm

diff --git a/lib/Resmon/Module.pm b/lib/Resmon/Module.pm
index cb80c51..90bcab0 100755
--- a/lib/Resmon/Module.pm
+++ b/lib/Resmon/Module.pm
@@ -73,186 +73,6 @@ sub config_as_hash {
   }
   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";
 1;
diff --git a/lib/Resmon/Module/A1000.pm b/lib/Resmon/Module/A1000.pm
index 72825c4..9a59c1e 100644
--- a/lib/Resmon/Module/A1000.pm
+++ b/lib/Resmon/Module/A1000.pm
@@ -16,4 +16,4 @@ sub handler {
   }
   return $arg->set_status("BAD(no data)");
 };
-
+1;
diff --git a/lib/Resmon/Module/DATE.pm b/lib/Resmon/Module/DATE.pm
new file mode 100644
index 0000000..498b6f3
--- /dev/null
+++ b/lib/Resmon/Module/DATE.pm
@@ -0,0 +1,11 @@
+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;
diff --git a/lib/Resmon/Module/DHCPLEASES.pm b/lib/Resmon/Module/DHCPLEASES.pm
index f8dbad1..0db8af0 100755
--- a/lib/Resmon/Module/DHCPLEASES.pm
+++ b/lib/Resmon/Module/DHCPLEASES.pm
@@ -51,3 +51,4 @@ sub handler {
     return($arg->set_status("BAD($actives leases > $crit!)"));
   }
 };
+1;
diff --git a/lib/Resmon/Module/DISK.pm b/lib/Resmon/Module/DISK.pm
new file mode 100644
index 0000000..a443e77
--- /dev/null
+++ b/lib/Resmon/Module/DISK.pm
@@ -0,0 +1,26 @@
+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;
diff --git a/lib/Resmon/Module/ECCMGR.pm b/lib/Resmon/Module/ECCMGR.pm
index b9f20ea..0b03217 100644
--- a/lib/Resmon/Module/ECCMGR.pm
+++ b/lib/Resmon/Module/ECCMGR.pm
@@ -40,4 +40,4 @@ sub handler {
       return $arg->set_status("BAD(eccmgr not running: $version)");
   }
 };
-
+1;
diff --git a/lib/Resmon/Module/FAULTS.pm b/lib/Resmon/Module/FAULTS.pm
index e79c2c7..8c3e531 100755
--- a/lib/Resmon/Module/FAULTS.pm
+++ b/lib/Resmon/Module/FAULTS.pm
@@ -16,4 +16,4 @@ sub handler {
   }
   return $arg->set_status("OK(no faults)");
 };
-
+1;
diff --git a/lib/Resmon/Module/FILEAGE.pm b/lib/Resmon/Module/FILEAGE.pm
new file mode 100644
index 0000000..7ec6c22
--- /dev/null
+++ b/lib/Resmon/Module/FILEAGE.pm
@@ -0,0 +1,18 @@
+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;
diff --git a/lib/Resmon/Module/FILESIZE.pm b/lib/Resmon/Module/FILESIZE.pm
new file mode 100644
index 0000000..d279b94
--- /dev/null
+++ b/lib/Resmon/Module/FILESIZE.pm
@@ -0,0 +1,20 @@
+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;
diff --git a/lib/Resmon/Module/FRESHSVN.pm b/lib/Resmon/Module/FRESHSVN.pm
index b2b5de8..e15946f 100644
--- a/lib/Resmon/Module/FRESHSVN.pm
+++ b/lib/Resmon/Module/FRESHSVN.pm
@@ -63,3 +63,4 @@ sub handler {
     }
   }
 }
+1;
diff --git a/lib/Resmon/Module/INODES.pm b/lib/Resmon/Module/INODES.pm
index b76c64f..9d5bbcf 100644
--- a/lib/Resmon/Module/INODES.pm
+++ b/lib/Resmon/Module/INODES.pm
@@ -34,4 +34,3 @@ sub handler {
 }
 
 1;
-
diff --git a/lib/Resmon/Module/LOGFILE.pm b/lib/Resmon/Module/LOGFILE.pm
new file mode 100644
index 0000000..805c54d
--- /dev/null
+++ b/lib/Resmon/Module/LOGFILE.pm
@@ -0,0 +1,56 @@
+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;
diff --git a/lib/Resmon/Module/NETBACKUPTAPE.pm b/lib/Resmon/Module/NETBACKUPTAPE.pm
index 59dbef5..750cc70 100644
--- a/lib/Resmon/Module/NETBACKUPTAPE.pm
+++ b/lib/Resmon/Module/NETBACKUPTAPE.pm
@@ -24,4 +24,4 @@ sub handler {
   }
   return $arg->set_status("OK($up UP)\n");
 };
-
+1;
diff --git a/lib/Resmon/Module/NETSTAT.pm b/lib/Resmon/Module/NETSTAT.pm
new file mode 100644
index 0000000..2c38e19
--- /dev/null
+++ b/lib/Resmon/Module/NETSTAT.pm
@@ -0,0 +1,26 @@
+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;
diff --git a/lib/Resmon/Module/PGREP.pm b/lib/Resmon/Module/PGREP.pm
index 046fe4c..6947e1f 100755
--- a/lib/Resmon/Module/PGREP.pm
+++ b/lib/Resmon/Module/PGREP.pm
@@ -17,4 +17,4 @@ sub handler {
   }
   return($arg->set_status("BAD(no output)"));
 };
-
+1;
diff --git a/lib/Resmon/Module/REMOTEFILESIZE.pm b/lib/Resmon/Module/REMOTEFILESIZE.pm
new file mode 100644
index 0000000..7ad85aa
--- /dev/null
+++ b/lib/Resmon/Module/REMOTEFILESIZE.pm
@@ -0,0 +1,23 @@
+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;
diff --git a/lib/Resmon/Module/SMFMAINTENANCE.pm b/lib/Resmon/Module/SMFMAINTENANCE.pm
index ec0992f..aa92b4e 100755
--- a/lib/Resmon/Module/SMFMAINTENANCE.pm
+++ b/lib/Resmon/Module/SMFMAINTENANCE.pm
@@ -24,3 +24,4 @@ sub handler {
   }
   return $arg->set_status("OK(no services in maintenance mode)");
 };
+1;
diff --git a/lib/Resmon/Module/WALCHECK.pm b/lib/Resmon/Module/WALCHECK.pm
index 220f100..e41ab8e 100644
--- a/lib/Resmon/Module/WALCHECK.pm
+++ b/lib/Resmon/Module/WALCHECK.pm
@@ -64,4 +64,4 @@ sub handler {
         return $arg->set_status( "OK(pitr replay is $tsplit[2] hours, $tsplit[1] minutes behind)");
   }
 }
-
+1;
diff --git a/lib/Resmon/Module/ZIMBRA.pm b/lib/Resmon/Module/ZIMBRA.pm
index c52b24e..0f0c534 100644
--- a/lib/Resmon/Module/ZIMBRA.pm
+++ b/lib/Resmon/Module/ZIMBRA.pm
@@ -16,3 +16,4 @@ sub handler {
 	}
 	return $arg->set_status("OK(All services running)");
 };
+1;
diff --git a/lib/Resmon/Module/ZPOOL.pm b/lib/Resmon/Module/ZPOOL.pm
index 3fda6aa..fd5bf6b 100644
--- a/lib/Resmon/Module/ZPOOL.pm
+++ b/lib/Resmon/Module/ZPOOL.pm
@@ -21,3 +21,4 @@ sub handler {
 	}
 	return $arg->set_status("OK(all pools are healthy)");
 };
+1;
diff --git a/lib/Resmon/Module/ZPOOLERRS.pm b/lib/Resmon/Module/ZPOOLERRS.pm
index 542d958..aca9814 100755
--- a/lib/Resmon/Module/ZPOOLERRS.pm
+++ b/lib/Resmon/Module/ZPOOLERRS.pm
@@ -46,3 +46,4 @@ sub handler {
     }
     return "BAD", "no data"
 };
+1;
-- 
GitLab