Compare commits

..

No commits in common. "master" and "v0.1" have entirely different histories.
master ... v0.1

3 changed files with 25 additions and 63 deletions

21
HISTORY
View File

@ -1,21 +0,0 @@
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,9 +16,6 @@ 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,22 +20,21 @@
*/ */
// Define exit status // Define exit status
define ("OK", 0); $ok = 0;
define ("WARNING", 1); $warning = 1;
define ("CRITICAL", 2); $critical = 2;
define ("UNKNOWN", 3); $unknown = 3;
// Define version and program $version = 0.1;
define ("VERSION", 0.5); $program = $argv[0];
define ("PROGRAM", $argv[0]);
// Function for printing usage // Function for printing usage
function usage() function usage()
{ {
print "check_smhiwarn version " . VERSION . "\n"; print "check_smhiwarn version $GLOBALS[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: " . PROGRAM . " 'District'\n"; print "Usage: $GLOBALS[program] 'District'\n";
print "Example: " . PROGRAM . " 'Skåne län utom Österlen'\n"; print "Example: $GLOBALS[program] 'Skåne län utom Österlen'\n";
} }
// All of the avaliable districts // All of the avaliable districts
@ -101,7 +100,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
@ -112,46 +111,33 @@ 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$/u", $availDistricts)) if (!preg_grep("/^$district$/", $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
$ch = curl_init("http://www.smhi.se/weatherSMHI2/varningar/smhi_alla_varningar.xml"); $data = shell_exec("curl -s 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)([-0-9\p{L}.,&\s]*)/iu", preg_match("/($district)(?:: )(?:Varning klass )([1-3]+)(?:,\s)([-a-z0-9åäö.,&\s]*)/i",
$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/u", $data, $counts); preg_match_all("/$district/", $data, $counts);
$numberMatches = (count($counts[0])); $numberMatches = (count($counts[0]));
if ($numberMatches > 1) if ($numberMatches > 1)
{ {
print "More than one warning is issued for $district, check smhi.se!"; print "More than one warning are issued for $district, check smhi.se!";
exit(CRITICAL); exit($critical);
} }
// Define the paranthesis // Define the paranthesis
@ -169,20 +155,20 @@ else
switch ($warnLevel) switch ($warnLevel)
{ {
case 0: case 0:
print "No warnings issued for $district"; print "No warnings issued $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);
} }
?> ?>