/trunk/maintenance/qa-monitor/whois-ping/config.inc.php |
---|
0,0 → 1,15 |
<?php |
# |
# generic Whois - Automatic Pattern Generator configuration |
# |
# (c) 2012 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de] |
# |
# Distribution, usage etc. pp. regulated by the current version of GPL. |
# |
# |
# Version 2014-09-12 |
# |
require_once __DIR__ . '/../../../shared/php_includes/config_functions.inc.php'; |
parse_config(__DIR__.'/../../config/qa-monitor.conf'); |
/trunk/maintenance/qa-monitor/whois-ping/showerrors |
---|
0,0 → 1,97 |
#!/usr/bin/php |
<?php |
# |
# generic Whois - Whois Server Ping Testing Suite |
# |
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de] |
# |
# Distribution, usage etc. pp. regulated by the current version of GPL. |
# |
# |
# Version 2014-09-12 |
# |
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED); |
require_once __DIR__ . '/../../../shared/php_includes/common_functions.inc.php'; |
require_once __DIR__ . '/whoisping_functions.inc.php'; |
require_once __DIR__ . '/config.inc.php'; |
$db = new SQLite3(__DIR__.'/../../.cache/whois-server-ping/whoisping.db'); # TODO: in config auslagern |
if (!$db) die ($error); |
gwitc_initdb($db); |
/* |
$stm = "SELECT * FROM gwi_tc_whois_ping WHERE server = 'whois.nic.ve'"; |
$result = $db->query("SELECT * FROM gwi_tc_whois_ping WHERE server = 'whois.nic.ve'"); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
print_r($row); |
*/ |
$status=0; |
$pattern_servers = array(); |
$pattern_files = getpatternfiles(); |
foreach ($pattern_files as &$pattern_file) { |
$pattern_servers_c = gwitc_list_whois_servers($pattern_file); |
$pattern_servers = array_merge($pattern_servers, $pattern_servers_c); |
} |
$dead_servers = array(); |
$dead_servers_raw = file(__DIR__ . '/../../config/dead-servers.list'); |
foreach ($dead_servers_raw as &$server) { |
$server = trim($server); |
if ($server == '') continue; |
if ($server[0] == '#') continue; |
$dead_servers[] = $server; |
} |
# $servers = $dead_servers + $pattern_servers |
$servers = array(); |
foreach ($pattern_servers as &$server) { |
if (!in_array($server, $servers)) { |
$servers[] = $server; |
} |
} |
foreach ($dead_servers as &$server) { |
if (!in_array($server, $servers)) { |
$servers[] = $server; |
} else { |
if (in_array($server, $dead_servers)) { |
$status=1; |
echo "[ !! ] Attention! $server is in dead-servers.list and pattern. Please remove one instance!\n"; |
} |
} |
} |
foreach ($servers as &$server) { |
$reborn = gwitc_reborn_val($db, $server); |
if ($reborn) { // TODO: also show time since when it is reborn? |
if (in_array($server, $dead_servers)) { |
$status=1; |
echo "[ !! ] Attention: $server is ALIVE again! Please remove from dead-servers.list and add to pattern.\n"; |
} |
if (in_array($server, $pattern_servers) && (!in_array($server, $dead_servers))) { |
gwitc_set_reborn($db, $server, 0); |
} |
} else { |
if (in_array($server, $dead_servers) && (!in_array($server, $pattern_servers))) continue; |
$duration = gwitc_fail_duration($db, $server); |
if ($duration < WHOIS_SERVER_DEAD_AFTER) continue; |
$status=1; |
echo "[ !! ] $server down for ".human_timediff($duration)."; first fail: ".date('Y-m-d', gwitc_first_fail($db, $server))."\n"; |
} |
} |
$db->close(); |
if ($status == 0) { |
echo "[ OK ]\n"; |
} |
exit($status); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/maintenance/qa-monitor/whois-ping/whoisping |
---|
0,0 → 1,83 |
#!/usr/bin/php |
<?php |
# |
# generic Whois - Whois Server Ping Testing Suite |
# |
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de] |
# |
# Distribution, usage etc. pp. regulated by the current version of GPL. |
# |
# |
# Version 2014-11-23 |
# |
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED); |
require_once __DIR__ . '/../../../shared/php_includes/common_functions.inc.php'; |
require_once __DIR__ . '/whoisping_functions.inc.php'; |
require_once __DIR__ . '/config.inc.php'; |
$db = new SQLite3(__DIR__ . '/../../.cache/whois-server-ping/whoisping.db'); # TODO: in config auslagern |
if (!$db) die ($error); |
gwitc_initdb($db); |
$pattern_servers = array(); |
$pattern_files = getpatternfiles(); |
foreach ($pattern_files as &$pattern_file) { |
$pattern_servers_c = gwitc_list_whois_servers($pattern_file); |
$pattern_servers = array_merge($pattern_servers, $pattern_servers_c); |
} |
$dead_servers = array(); |
$dead_servers_raw = file(__DIR__ . '/../../config/dead-servers.list'); |
foreach ($dead_servers_raw as &$server) { |
$server = trim($server); |
if ($server == '') continue; |
if ($server[0] == '#') continue; |
$dead_servers[] = $server; |
} |
# --- Check the servers in the pattern files |
foreach ($pattern_servers as &$server) { |
// We will handle them below, not here. (Otherwise the recheck timer would be reset) |
if (in_array($server, $dead_servers)) { |
$status=1; |
echo "[ !! ] Attention! $server is in dead-servers.list and pattern. Please remove one instance!\n"; |
continue; |
} |
$age = gwitc_checkage_succ($db, $server); |
if ($age < RECHECK_AFTER) continue; |
$open = gwitc_is_port_open($server, 43); |
if ($open) { |
gwitc_reset_failcounter($db, $server); |
echo "OK: $server\n"; |
} else { |
$fails = gwitc_incr_failcounter($db, $server); |
$duration = gwitc_fail_duration($db, $server); |
echo "FAIL #$fails: $server (Duration: $duration)\n"; |
} |
} |
# --- Check the dead servers (which have been removed from the pattern list) have resurrected |
foreach ($dead_servers as &$server) { |
$age = gwitc_checkage_check($db, $server); |
if ($age < RECHECK_AFTER) continue; |
$open = gwitc_is_port_open($server, 43); |
if ($open) { |
gwitc_set_reborn($db, $server, 1); |
echo "Attention: $server is ALIVE again! Please remove from maintenance/config/dead-servers.list and add to pattern.\n"; |
} else { |
# wird bereits von gwitc_incr_failcounter() gemacht: gwitc_set_reborn($db, $server, 0); |
$fails = gwitc_incr_failcounter($db, $server); // hier wird auch lastcheck aktualisiert |
echo "Still dead: $server\n"; |
} |
} |
$db->close(); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/maintenance/qa-monitor/whois-ping/whoisping_cronrun |
---|
0,0 → 1,18 |
#!/bin/bash |
# |
# generic Whois - Automatic Pattern Generator: Whois Ping Cronjob |
# |
# (c) 2012-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de] |
# |
# Distribution, usage etc. pp. regulated by the current version of GPL. |
# |
# |
# Version 2014-04-08 |
# |
DIR=$( dirname "$0" ) |
"$DIR"/whoisping >& /dev/null |
"$DIR"/showerrors >& /dev/null |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/maintenance/qa-monitor/whois-ping/whoisping_functions.inc.php |
---|
0,0 → 1,152 |
<?php |
# |
# generic Whois - Whois Server Ping Testing Suite |
# |
# (c) 2013-2014 Daniel Marschall, ViaThinkSoft [www.viathinksoft.de] |
# |
# Distribution, usage etc. pp. regulated by the current version of GPL. |
# |
# |
# Version 2014-11-19 |
# |
# FUT: sqlinj und cmdinj beheben |
function gwitc_initdb($db) { |
# "CREATE TABLE IF NOT EXISTS" does not work with my version of PHP/SQLite |
$stm = "CREATE TABLE IF NOT EXISTS gwi_tc_whois_ping ( |
id INTEGER PRIMARY KEY, |
server TEXT UNIQUE, |
fails INTEGER, |
lastcheck INTEGER, |
lastsucc INTEGER, |
firstfail INTEGER, |
lastfail INTEGER, |
reborn INTEGER |
)"; |
$db->exec($stm); |
} |
function gwitc_checkage_succ($db, $server) { |
$stm = "SELECT lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$ts = (int)$row['lastsucc']; |
$now = time(); |
return ($now-$ts); |
} |
function gwitc_checkage_check($db, $server) { |
$stm = "SELECT lastcheck FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$ts = (int)$row['lastcheck']; |
$now = time(); |
return ($now-$ts); |
} |
function gwitc_reborn_val($db, $server) { |
$stm = "SELECT reborn FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
return (int)$row['reborn']; |
} |
function gwitc_fail_duration($db, $server) { |
$stm = "SELECT firstfail,lastsucc,lastfail FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$lastsucc = (int)$row['lastsucc']; |
$firstfail = (int)$row['firstfail']; |
$lastfail = (int)$row['lastfail']; |
if ($firstfail == 0) return 0; |
if ($lastsucc > $lastfail) return 0; |
return ($lastfail-max($lastsucc,$firstfail)); |
} |
function gwitc_first_fail($db, $server) { |
$stm = "SELECT firstfail,lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$lastsucc = (int)$row['lastsucc']; |
$firstfail = (int)$row['firstfail']; |
if ($firstfail == 0) return 0; |
return max($firstfail,$lastsucc); |
} |
function gwitc_set_reborn($db, $server, $val) { |
$stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$fails = 0; // (int)$row['fails']; |
$ts = time(); |
$lastsucc = $ts; // (int)$row['lastsucc']; |
$firstfail = 0; // (int)$row['firstfail']; |
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $val)"; |
$ok = $db->exec($stm); |
if (!$ok) die("Cannot execute query."); |
return $fails; |
} |
function gwitc_incr_failcounter($db, $server) { |
$stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$fails = (int)$row['fails']; |
$lastsucc = (int)$row['lastsucc']; |
$fails++; |
$ts = time(); |
$firstfail = ($fails == 1) ? $ts : (int)$row['firstfail']; |
$reborn = 0; // wenn er failed ist, kann er nicht reborned sein |
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $reborn)"; |
$ok = $db->exec($stm); |
if (!$ok) die("Cannot execute query."); |
return $fails; |
} |
function gwitc_reset_failcounter($db, $server) { |
$stm = "SELECT lastfail,reborn FROM gwi_tc_whois_ping WHERE server = '$server'"; |
$result = $db->query($stm); |
if (!$result) die("Cannot execute query."); |
$row = $result->fetchArray(SQLITE3_ASSOC); |
$lastfail = (int)$row['lastfail']; |
$ts = time(); |
$reborn = (int)$row['reborn']; |
$stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', 0, $ts, $ts, $lastfail, 0, $reborn)"; |
$ok = $db->exec($stm); |
if (!$ok) die("Cannot execute query."); |
} |
function gwitc_list_whois_servers($patternfile) { |
$out = array(); |
$cont = file($patternfile); |
foreach ($cont as &$x) { |
$x = trim($x); |
if ($x == '') continue; |
if ($x[0] == '#') continue; |
if ((preg_match('@^:whois\|(.+)\|@isU', $x.'|', $m)) || (preg_match('@whois::(.+):@isU', $x.':', $m))) { |
$out[] = $m[1]; |
} |
} |
$out = array_unique($out); |
return $out; |
} |