3 Commits
v0.1 ... v0.4

Author SHA1 Message Date
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 49 additions and 25 deletions

16
HISTORY Normal file
View File

@@ -0,0 +1,16 @@
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.4);
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,37 @@ 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);
$data = curl_exec($ch);
curl_close($ch);
// 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 +160,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);
} }
?> ?>