Compare commits

..

4 Commits
v0.1 ... master

Author SHA1 Message Date
d322845589 Added check to see if cURL could fetch the XML-file
If cURL fails in retrieving the XML-file, then exit
with a UNKNOWN state.
2014-08-15 10:59:19 +02:00
fef495ff7b Fixed some spelling errors and tuned the regexes
Replaced a-zåäö with \p{L} and fixed spelling errors
and replaced $program with PROGRAM on line 122.
Also added \u modifer to more places for UTF-8, just
in case.
2014-08-09 23:04:50 +02:00
277bcc5fb4 Added /u modifer for UTF-8 2014-08-03 17:22:18 +02:00
38370d9f27 Some code refactoring
- Replaced 'shell_exec("curl -s URL")' with PHP5 cURL function
- Replaced state-variables with constants
- Replaced version and program variables with constants
- Bumped version to 0.2
2014-07-31 11:13:34 +02:00
3 changed files with 63 additions and 25 deletions

21
HISTORY Normal file
View File

@ -0,0 +1,21 @@
0.5 - 2014-08-15
Added a check to see if cURL was successful in
retrieving the XML-file. If it was not, then exit
with a UNKNOWN state and print the cURL error message.
0.4 - 2014-08-09
Added /u modifier to more preg_matches for UTF-8
Replaced a-zåäö with \p{L}
Fixed a couple of spelling errors and missing words
Replaced $program with PROGRAM on line 122
0.3 - 2014-08-03
Added /u modifier to the preg_match for UTF-8
0.2 - 2014-07-31
Replaced 'shell_exec("curl -s URL")' with PHP cURL function
Replaced all state-variables with constants
Replaced version and program variables with constants
0.1 - 2014-07-27
First release of check_smhiwarn

View File

@ -16,6 +16,9 @@ Don't forget to quote the district in the argument, such as the below example.
Create one instance of each district you want to monitor. Create one instance of each district you want to monitor.
## Requirements ##
The script requires PHP5 and the PHP5 cURL module (php5-curl on Debian systems).
## Copyright ## ## Copyright ##
Original author is Jack-Benny Persson (jack-benny@cyberinfo.se). Original author is Jack-Benny Persson (jack-benny@cyberinfo.se).

View File

@ -20,21 +20,22 @@
*/ */
// Define exit status // Define exit status
$ok = 0; define ("OK", 0);
$warning = 1; define ("WARNING", 1);
$critical = 2; define ("CRITICAL", 2);
$unknown = 3; define ("UNKNOWN", 3);
$version = 0.1; // Define version and program
$program = $argv[0]; define ("VERSION", 0.5);
define ("PROGRAM", $argv[0]);
// Function for printing usage // Function for printing usage
function usage() function usage()
{ {
print "check_smhiwarn version $GLOBALS[version]\n"; print "check_smhiwarn version " . VERSION . "\n";
print "Copyright (C) Jack-Benny Persson <jack-benny@cyberinfo.se>\n"; print "Copyright (C) Jack-Benny Persson <jack-benny@cyberinfo.se>\n";
print "Usage: $GLOBALS[program] 'District'\n"; print "Usage: " . PROGRAM . " 'District'\n";
print "Example: $GLOBALS[program] 'Skåne län utom Österlen'\n"; print "Example: " . PROGRAM . " 'Skåne län utom Österlen'\n";
} }
// All of the avaliable districts // All of the avaliable districts
@ -100,7 +101,7 @@ $availDistricts = array(
if (!isset($argv[1])) if (!isset($argv[1]))
{ {
usage(); usage();
exit($unknown); exit(UNKNOWN);
} }
// Set first argument to $district // Set first argument to $district
@ -111,33 +112,46 @@ if ($district == 'list')
{ {
foreach ($availDistricts as $dist) foreach ($availDistricts as $dist)
print "$dist\n"; print "$dist\n";
exit($unknown); exit(UNKNOWN);
} }
// Check if the district exists // Check if the district exists
if (!preg_grep("/^$district$/", $availDistricts)) if (!preg_grep("/^$district$/u", $availDistricts))
{ {
print "$district does not exists\n"; print "$district does not exists\n";
print "List all avaliable districts by \"$program 'list'\"\n"; print "List all avaliable districts by \"" . PROGRAM . " 'list'\"\n";
exit($unknown); exit(UNKNOWN);
} }
// Retrive the data // Retrive the data
//$data = file_get_contents("testing/smhi_alla_varningar.xml"); //For testing purposes //$data = file_get_contents("testing/smhi_alla_varningar.xml"); //For testing purposes
$data = shell_exec("curl -s http://www.smhi.se/weatherSMHI2/varningar/smhi_alla_varningar.xml"); $ch = curl_init("http://www.smhi.se/weatherSMHI2/varningar/smhi_alla_varningar.xml");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
// check if curl failed and bail out if it did
if (($data = curl_exec($ch)) === false)
{
print curl_error($ch);
curl_close($ch);
exit(UNKNOWN);
}
curl_close($ch);
//print "\n$data\n"; // for testing purposes (uncomment to view xml-file)
// Regex the area (1st paranthesis is area, 2nd is warning class, 3rd is warning msg) // Regex the area (1st paranthesis is area, 2nd is warning class, 3rd is warning msg)
preg_match("/($district)(?:: )(?:Varning klass )([1-3]+)(?:,\s)([-a-z0-9åäö.,&\s]*)/i", preg_match("/($district)(?:: )(?:Varning klass )([1-3]+)(?:,\s)([-0-9\p{L}.,&\s]*)/iu",
$data, $matches); $data, $matches);
// Count how many warnings are issued and issue a critical if more than one // Count how many warnings are issued and issue a critical if more than one
preg_match_all("/$district/", $data, $counts); preg_match_all("/$district/u", $data, $counts);
$numberMatches = (count($counts[0])); $numberMatches = (count($counts[0]));
if ($numberMatches > 1) if ($numberMatches > 1)
{ {
print "More than one warning are issued for $district, check smhi.se!"; print "More than one warning is issued for $district, check smhi.se!";
exit($critical); exit(CRITICAL);
} }
// Define the paranthesis // Define the paranthesis
@ -155,20 +169,20 @@ else
switch ($warnLevel) switch ($warnLevel)
{ {
case 0: case 0:
print "No warnings issued $district"; print "No warnings issued for $district";
exit($ok); exit(OK);
case 1: case 1:
print "Class 1 warning issued for $district: $warnMsg"; print "Class 1 warning issued for $district: $warnMsg";
exit($warning); exit(WARNING);
case 2: case 2:
print "Class 2 warning issued for $district: $warnMsg"; print "Class 2 warning issued for $district: $warnMsg";
exit($critical); exit(CRITICAL);
case 3: case 3:
print "Class 3 warning issued for $district: $warnMsg"; print "Class 3 warning issued for $district: $warnMsg";
exit($critical); exit(CRITICAL);
default: default:
print "Unknown error for $district"; print "Unknown error for $district";
exit($unknown); exit(UNKNOWN);
} }
?> ?>