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