check_release.pl
changeset 4 d1541211673e
parent 3 c442ffe27e48
child 5 cc9741ed8e84
equal deleted inserted replaced
3:c442ffe27e48 4:d1541211673e
    20 use strict;
    20 use strict;
    21 use File::Basename;
    21 use File::Basename;
    22 use Getopt::Long;
    22 use Getopt::Long;
    23 use LWP::Simple;
    23 use LWP::Simple;
    24 use Pod::Usage;
    24 use Pod::Usage;
    25 use if $ENV{DEBUG} => "Smart::Comments";
       
    26 
    25 
    27 my %ERRORS = (
    26 my %ERRORS = (
    28     OK        => 0,
    27     OK        => 0,
    29     WARNING   => 1,
    28     WARNING   => 1,
    30     CRITICAL  => 2,
    29     CRITICAL  => 2,
    36 sub get_stable_release($$);
    35 sub get_stable_release($$);
    37 sub report($$);
    36 sub report($$);
    38 sub version($$);
    37 sub version($$);
    39 
    38 
    40 my $ME      = basename $0;
    39 my $ME      = basename $0;
    41 my $VERSION = "2.0";
    40 my $VERSION = "2.2";
    42 
    41 
    43 my %opt = (
    42 my %opt = (
    44     url    => "http://www.debian.org/releases/stable/index.html",
    43     url    => "http://www.debian.org/releases/stable/index.html",
    45     search => "<p>Debian",
    44     search => "<p>Debian",
    46     file   => "/etc/debian_version"
    45     file   => "/etc/debian_version",
       
    46 	ok     => 0
    47 );
    47 );
    48 
    48 
    49 MAIN: {
    49 MAIN: {
    50     Getopt::Long::Configure('bundling');
    50     Getopt::Long::Configure('bundling');
    51     GetOptions(
    51     GetOptions(
    52         "u|url=s"    => \$opt{url},
    52         "u|url=s"    => \$opt{url},
    53         "s|search=s" => \$opt{search},
    53         "s|search=s" => \$opt{search},
    54         "f|file=s"   => \$opt{file},
    54         "f|file=s"   => \$opt{file},
       
    55 		"o|ok"       => \$opt{ok},
    55         "h|help" => sub { pod2usage(-verbose => 1, -exitval => $ERRORS{OK}) },
    56         "h|help" => sub { pod2usage(-verbose => 1, -exitval => $ERRORS{OK}) },
    56         "m|man" => sub { pod2usage(-verbose => 2, -exitval => $ERRORS{OK}) },
    57         "m|man" => sub { pod2usage(-verbose => 2, -exitval => $ERRORS{OK}) },
    57         "V|version" => sub { version($ME, $VERSION); exit $ERRORS{OK}; }
    58         "V|version" => sub { version($ME, $VERSION); exit $ERRORS{OK}; }
    58     ) or pod2usage(-verbose => 1, -exitval => $ERRORS{CRITICAL});
    59     ) or pod2usage(-verbose => 1, -exitval => $ERRORS{CRITICAL});
    59 
    60 
    60     ### %opt
       
    61 
       
    62     my $current_release = get_current_release($opt{file});
    61     my $current_release = get_current_release($opt{file});
    63     my $stable_release = get_stable_release($opt{url}, $opt{search});
    62     my $stable_release = get_stable_release($opt{url}, $opt{search});
    64     report($current_release, $stable_release);
    63     report($current_release, $stable_release);
    65 }
    64 }
    66 
    65 
    79         chomp;
    78         chomp;
    80         $current_release = $_;
    79         $current_release = $_;
    81     }
    80     }
    82     close(CR);
    81     close(CR);
    83 
    82 
    84 	if ( (length $current_release == 3) && ($current_release =~ /0$/) ) {
    83     if ((length $current_release == 3) && ($current_release =~ /0$/)) {
    85 		$current_release = "$current_release.0";
    84         $current_release = "$current_release.0";
    86 	}
    85     }
    87 
       
    88     ### $current_release
       
    89 
    86 
    90     return $current_release;
    87     return $current_release;
    91 }
    88 }
    92 
    89 
    93 sub get_stable_release($$) {
    90 sub get_stable_release($$) {
   107 
   104 
   108     if ($found =~ /$opt{search}\s+([\d\.]+).*/) {
   105     if ($found =~ /$opt{search}\s+([\d\.]+).*/) {
   109         $stable_release = $1;
   106         $stable_release = $1;
   110     }
   107     }
   111 
   108 
   112     ### $stable_release
       
   113 
       
   114     return $stable_release;
   109     return $stable_release;
   115 }
   110 }
   116 
   111 
   117 sub report($$) {
   112 sub report($$) {
   118     my ($current_release, $stable_release) = @_;
   113     my ($current_release, $stable_release) = @_;
   119 
   114 
   120     if ($current_release eq $stable_release) {
   115     $stable_release =~ /^(\d+)/ and my $stable_major = int($1);
   121         print "RELEASE OK: current release number $current_release\n";
   116     $current_release =~ /^(\d+)/ and my $current_major = int($1);
   122         exit $ERRORS{"OK"};
   117 
   123     }
   118     if ($current_major < $stable_major) {
   124     else {
   119 		if ($opt{ok}) {
   125         print
   120 			print "RELEASE OK: $current_release/$stable_release\n";
   126 "RELEASE WARNING: current release number $current_release / stable release number $stable_release\n";
   121 			exit $ERRORS{OK};
       
   122 		}
       
   123         print "RELEASE CRITICAL: $current_release / $stable_release\n";
       
   124         exit $ERRORS{CRITICAL};
       
   125     }
       
   126 
       
   127     if ($current_release ne $stable_release) {
       
   128 		if ($opt{ok}) {
       
   129 			print "RELEASE OK: $current_release/$stable_release\n";
       
   130 			exit $ERRORS{OK};
       
   131 		}
       
   132         print "RELEASE WARNING: $current_release / $stable_release\n";
   127         exit $ERRORS{"WARNING"};
   133         exit $ERRORS{"WARNING"};
   128     }
   134     }
       
   135 
       
   136     print "RELEASE OK: $current_release/$stable_release\n";
       
   137     exit $ERRORS{"OK"};
   129 }
   138 }
   130 
   139 
   131 sub version($$) {
   140 sub version($$) {
   132     my ($progname, $version) = @_;
   141     my ($progname, $version) = @_;
   133 
   142 
   150 =head1 SYNOPSIS
   159 =head1 SYNOPSIS
   151 
   160 
   152 check_release [-u|--url url]
   161 check_release [-u|--url url]
   153               [-s|--search string]
   162               [-s|--search string]
   154               [-f|--file path]
   163               [-f|--file path]
       
   164               [-o|--ok]
   155               [-h|--help]
   165               [-h|--help]
   156               [-m|--man]
   166               [-m|--man]
   157               [-V|--version]
   167               [-V|--version]
   158 
   168 
   159 =head1 OPTIONS
   169 =head1 OPTIONS
   170 
   180 
   171 =item B<-f>|B<--file> I<string>
   181 =item B<-f>|B<--file> I<string>
   172 
   182 
   173 file with current release informations (default: /etc/debian_version)
   183 file with current release informations (default: /etc/debian_version)
   174 
   184 
       
   185 =item B<-o>|B<--ok>
       
   186 
       
   187 Exit status always ok.
       
   188 
   175 =item B<-h>|B<--help>
   189 =item B<-h>|B<--help>
   176 
   190 
   177 Print detailed help screen.
   191 Print detailed help screen.
   178 
   192 
   179 =item B<-m>|B<--man>
   193 =item B<-m>|B<--man>
   190 
   204 
   191 This plugin checks the current debian release number.
   205 This plugin checks the current debian release number.
   192 
   206 
   193 =head1 VERSION
   207 =head1 VERSION
   194 
   208 
   195 This man page is current for version 2.0 of check_release.
   209 This man page is current for version 2.2 of check_release.
   196 
   210 
   197 =head1 AUTHOR
   211 =head1 AUTHOR
   198 
   212 
   199 Written by Christian Arnold L<arnold@schlittermann.de>
   213 Written by Christian Arnold L<arnold@schlittermann.de>
   200 
   214