Subversion Repositories vgwhois

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/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;
}