57 "h|help" => sub { pod2usage(-verbose => 1, -exitval => $ERRORS{OK}) }, |
57 "h|help" => sub { pod2usage(-verbose => 1, -exitval => $ERRORS{OK}) }, |
58 "m|man" => sub { pod2usage(-verbose => 2, -exitval => $ERRORS{OK}) }, |
58 "m|man" => sub { pod2usage(-verbose => 2, -exitval => $ERRORS{OK}) }, |
59 "V|version" => sub { version($ME, $VERSION); exit $ERRORS{OK}; } |
59 "V|version" => sub { version($ME, $VERSION); exit $ERRORS{OK}; } |
60 ) or pod2usage(-verbose => 1, -exitval => $ERRORS{CRITICAL}); |
60 ) or pod2usage(-verbose => 1, -exitval => $ERRORS{CRITICAL}); |
61 |
61 |
62 my ($local_release, $stable_release) = eval { |
62 my $current_release = get_current_release($opt{file}); |
63 get_local_release($opt{file}), |
63 my $stable_release = get_stable_release($opt{url}, $opt{search}); |
64 get_stable_release($opt{url}, $opt{search}); |
64 report($current_release, $stable_release); |
65 }; |
65 } |
66 if ($@) { |
66 |
67 print "RELEASE CRITICAL: $@\n"; |
67 sub get_current_release($) { |
68 exit $ERRORS{CRITICAL}; |
68 my $file = shift; |
69 } |
69 my $current_release = undef; |
70 report($local_release, $stable_release); |
70 |
71 } |
71 unless (-r $file) { |
72 |
72 print |
73 sub get_local_release { |
73 "RELEASE CRITICAL: $file not exists or not read permission is granted\n"; |
74 |
74 exit $ERRORS{CRITICAL}; |
75 my $local_release = do { |
75 } |
76 local @ARGV = grep { -r } @_ |
76 |
77 or die "@_: $!\n"; |
77 open(CR, "<$file"); |
78 <>; |
78 while (<CR>) { |
79 }; |
79 chomp; |
80 |
80 $current_release = $_; |
81 chomp $local_release; |
81 } |
82 return $local_release; |
82 close(CR); |
|
83 |
|
84 return $current_release; |
83 } |
85 } |
84 |
86 |
85 sub get_stable_release($$) { |
87 sub get_stable_release($$) { |
86 my ($url, $search) = @_; |
88 my ($url, $search) = @_; |
|
89 my ($found, $stable_release) = undef; |
87 my $website; |
90 my $website; |
88 |
91 my @website = (); |
89 $website = get($url) |
92 |
90 or die "Failed to get $url\n"; |
93 $website = get($url); |
91 |
94 unless (defined $website) { |
92 $website =~ /$opt{search}/s |
95 print |
93 or die "an't parse $url\n"; |
96 "RELEASE CRITICAL: failed to get $url\n"; |
94 |
97 exit $ERRORS{CRITICAL}; |
95 return $1; |
98 } |
96 } |
99 |
97 |
100 push @website, split("\n", $website); |
98 sub compare_versions { |
101 |
99 my ($left, $right) = @_; |
102 foreach (@website) { |
100 my @left = split '.', $left; |
103 unless ($found) { |
101 my @right = split '.', $right; |
104 /$search/ or next; |
102 |
105 $found = $_; |
|
106 next; |
|
107 } |
|
108 } |
|
109 |
|
110 if ($found =~ /$opt{search}\s+([\d\.]+).*/) { |
|
111 $stable_release = $1; |
|
112 } |
|
113 |
|
114 return $stable_release; |
103 } |
115 } |
104 |
116 |
105 sub report($$) { |
117 sub report($$) { |
106 my ($local_release, $stable_release) = @_; |
118 my ($current_release, $stable_release) = @_; |
107 my ($local_major, $stable_major) = map { int } $local_release, $stable_release; |
119 |
108 |
120 |
109 die "<$local_major | $stable_major>"; |
121 if ($opt{ok} or $current_release eq $stable_release) { |
110 |
122 print "RELEASE OK: $current_release/$stable_release\n"; |
111 if ($opt{ok} or $local_release eq $stable_release) { |
|
112 print "RELEASE OK: $local_release/$stable_release\n"; |
|
113 exit $ERRORS{OK}; |
123 exit $ERRORS{OK}; |
114 } |
124 } |
115 |
125 |
|
126 $stable_release =~ /^(\d+)/ and my $stable_major = int($1); |
|
127 $current_release =~ /^(\d+)/ and my $current_major = int($1); |
|
128 |
|
129 |
116 if ($current_major - $stable_major < -1) { |
130 if ($current_major - $stable_major < -1) { |
117 print "RELEASE CRITICAL: $local_release / $stable_release\n"; |
131 print "RELEASE CRITICAL: $current_release / $stable_release\n"; |
118 exit $ERRORS{CRITICAL}; |
132 exit $ERRORS{CRITICAL}; |
119 } |
133 } |
120 |
134 |
121 print "RELEASE WARNING: $local_release / $stable_release\n"; |
135 print "RELEASE WARNING: $current_release / $stable_release\n"; |
122 exit $ERRORS{"WARNING"}; |
136 exit $ERRORS{"WARNING"}; |
123 |
137 |
124 } |
138 } |
125 |
139 |
126 sub version($$) { |
140 sub version($$) { |