check_release.pl
changeset 4 d1541211673e
parent 3 c442ffe27e48
child 5 cc9741ed8e84
--- a/check_release.pl	Sun Feb 06 15:38:11 2011 +0100
+++ b/check_release.pl	Tue Jul 05 15:19:05 2011 +0200
@@ -22,7 +22,6 @@
 use Getopt::Long;
 use LWP::Simple;
 use Pod::Usage;
-use if $ENV{DEBUG} => "Smart::Comments";
 
 my %ERRORS = (
     OK        => 0,
@@ -38,12 +37,13 @@
 sub version($$);
 
 my $ME      = basename $0;
-my $VERSION = "2.0";
+my $VERSION = "2.2";
 
 my %opt = (
     url    => "http://www.debian.org/releases/stable/index.html",
     search => "<p>Debian",
-    file   => "/etc/debian_version"
+    file   => "/etc/debian_version",
+	ok     => 0
 );
 
 MAIN: {
@@ -52,13 +52,12 @@
         "u|url=s"    => \$opt{url},
         "s|search=s" => \$opt{search},
         "f|file=s"   => \$opt{file},
+		"o|ok"       => \$opt{ok},
         "h|help" => sub { pod2usage(-verbose => 1, -exitval => $ERRORS{OK}) },
         "m|man" => sub { pod2usage(-verbose => 2, -exitval => $ERRORS{OK}) },
         "V|version" => sub { version($ME, $VERSION); exit $ERRORS{OK}; }
     ) or pod2usage(-verbose => 1, -exitval => $ERRORS{CRITICAL});
 
-    ### %opt
-
     my $current_release = get_current_release($opt{file});
     my $stable_release = get_stable_release($opt{url}, $opt{search});
     report($current_release, $stable_release);
@@ -81,11 +80,9 @@
     }
     close(CR);
 
-	if ( (length $current_release == 3) && ($current_release =~ /0$/) ) {
-		$current_release = "$current_release.0";
-	}
-
-    ### $current_release
+    if ((length $current_release == 3) && ($current_release =~ /0$/)) {
+        $current_release = "$current_release.0";
+    }
 
     return $current_release;
 }
@@ -109,23 +106,35 @@
         $stable_release = $1;
     }
 
-    ### $stable_release
-
     return $stable_release;
 }
 
 sub report($$) {
     my ($current_release, $stable_release) = @_;
 
-    if ($current_release eq $stable_release) {
-        print "RELEASE OK: current release number $current_release\n";
-        exit $ERRORS{"OK"};
+    $stable_release =~ /^(\d+)/ and my $stable_major = int($1);
+    $current_release =~ /^(\d+)/ and my $current_major = int($1);
+
+    if ($current_major < $stable_major) {
+		if ($opt{ok}) {
+			print "RELEASE OK: $current_release/$stable_release\n";
+			exit $ERRORS{OK};
+		}
+        print "RELEASE CRITICAL: $current_release / $stable_release\n";
+        exit $ERRORS{CRITICAL};
     }
-    else {
-        print
-"RELEASE WARNING: current release number $current_release / stable release number $stable_release\n";
+
+    if ($current_release ne $stable_release) {
+		if ($opt{ok}) {
+			print "RELEASE OK: $current_release/$stable_release\n";
+			exit $ERRORS{OK};
+		}
+        print "RELEASE WARNING: $current_release / $stable_release\n";
         exit $ERRORS{"WARNING"};
     }
+
+    print "RELEASE OK: $current_release/$stable_release\n";
+    exit $ERRORS{"OK"};
 }
 
 sub version($$) {
@@ -152,6 +161,7 @@
 check_release [-u|--url url]
               [-s|--search string]
               [-f|--file path]
+              [-o|--ok]
               [-h|--help]
               [-m|--man]
               [-V|--version]
@@ -172,6 +182,10 @@
 
 file with current release informations (default: /etc/debian_version)
 
+=item B<-o>|B<--ok>
+
+Exit status always ok.
+
 =item B<-h>|B<--help>
 
 Print detailed help screen.
@@ -192,7 +206,7 @@
 
 =head1 VERSION
 
-This man page is current for version 2.0 of check_release.
+This man page is current for version 2.2 of check_release.
 
 =head1 AUTHOR