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.
## Requirements ##
The script requires PHP5 and the PHP5 cURL module (php5-curl on Debian systems).
## Copyright ##
Original author is Jack-Benny Persson (jack-benny@cyberinfo.se).

View File

@ -20,21 +20,22 @@
*/
// Define exit status
$ok = 0;
$warning = 1;
$critical = 2;
$unknown = 3;
define ("OK", 0);
define ("WARNING", 1);
define ("CRITICAL", 2);
define ("UNKNOWN", 3);
$version = 0.1;
$program = $argv[0];
// Define version and program
define ("VERSION", 0.5);
define ("PROGRAM", $argv[0]);
// Function for printing 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 "Usage: $GLOBALS[program] 'District'\n";
print "Example: $GLOBALS[program] 'Skåne län utom Österlen'\n";
print "Usage: " . PROGRAM . " 'District'\n";
print "Example: " . PROGRAM . " 'Skåne län utom Österlen'\n";
}
// All of the avaliable districts
@ -100,7 +101,7 @@ $availDistricts = array(
if (!isset($argv[1]))
{
usage();
exit($unknown);
exit(UNKNOWN);
}
// Set first argument to $district
@ -111,33 +112,46 @@ if ($district == 'list')
{
foreach ($availDistricts as $dist)
print "$dist\n";
exit($unknown);
exit(UNKNOWN);
}
// Check if the district exists
if (!preg_grep("/^$district$/", $availDistricts))
if (!preg_grep("/^$district$/u", $availDistricts))
{
print "$district does not exists\n";
print "List all avaliable districts by \"$program 'list'\"\n";
exit($unknown);
print "List all avaliable districts by \"" . PROGRAM . " 'list'\"\n";
exit(UNKNOWN);
}
// Retrive the data
//$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)
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);
// 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]));
if ($numberMatches > 1)
{
print "More than one warning are issued for $district, check smhi.se!";
exit($critical);
print "More than one warning is issued for $district, check smhi.se!";
exit(CRITICAL);
}
// Define the paranthesis
@ -155,20 +169,20 @@ else
switch ($warnLevel)
{
case 0:
print "No warnings issued $district";
exit($ok);
print "No warnings issued for $district";
exit(OK);
case 1:
print "Class 1 warning issued for $district: $warnMsg";
exit($warning);
exit(WARNING);
case 2:
print "Class 2 warning issued for $district: $warnMsg";
exit($critical);
exit(CRITICAL);
case 3:
print "Class 3 warning issued for $district: $warnMsg";
exit($critical);
exit(CRITICAL);
default:
print "Unknown error for $district";
exit($unknown);
exit(UNKNOWN);
}
?>