summaryrefslogblamecommitdiffstats
path: root/server-status-logger.php
blob: b1fa4e24667a1c2ffecf52785fcff40b54adebc6 (plain) (tree)


















































































































































                                                                                                                                                                                       
#!/usr/bin/env php
# file updated 20. may 2019, 22:00 from http://razor.arnes.si/~asija3/files/server-status-logger.php
<?php
if(empty($argv[1])) {
	exit("server-status-logger.php v0.1 2019 Anton Šijanec astiril/server-status-logger\n
	$argv[0] server-status-url [dbfile]\n");
}
if(empty($argv[2])) {
	$dbfile = 'log.db';
} else {
	$dbfile = $argv[2];
}
$url = $argv[1];
function tablefromhtml($urltoget) {
	$dom = new DOMDocument();  
	//load the html  
	$html = $dom->loadHTMLFile($urltoget);  
	  //discard white space   
	$dom->preserveWhiteSpace = false;
	  //the table by its tag name  
	$tables = $dom->getElementsByTagName('table');   
		//get all rows from the table  
	$rows = $tables->item(0)->getElementsByTagName('tr');   
	  // get each column by tag name  
	$cols = $rows->item(0)->getElementsByTagName('th');   
	$row_headers = NULL;
	foreach ($cols as $node) {
		//print $node->nodeValue."\n";   
		$row_headers[] = $node->nodeValue;
	}   
	$table = array();
	  //get all rows from the table  
	$rows = $tables->item(0)->getElementsByTagName('tr');   
	foreach ($rows as $row)   
	{   
	   // get each column by tag name  
		$cols = $row->getElementsByTagName('td');   
		$row = array();
		$i=0;
		foreach ($cols as $node) {
			# code...
			//print $node->nodeValue."\n";   
			if($row_headers==NULL)
				$row[] = $node->nodeValue;
			else
				$row[$row_headers[$i]] = $node->nodeValue;
			$i++;
		}   
		$table[] = $row;
		return $table;
	}
}

   class MyDB extends SQLite3 {
      function __construct() {
         $this->open($dbfile);
      }
   }
   $dbConnect = new MyDB();
   if(!$dbConnect) {
	  exit($dbConnect->lastErrorMsg());
   } else {
      echo "Opened database successfully\n";
   }
   $tablename = "dnevnik";
   
   $result = $dbConnect->query('CREATE TABLE IF NOT EXISTS '.$tablename.' (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    "timestamp" INTEGER,
    "worker" INTEGER,
    "client" TEXT,
	"vhost" TEXT,
	"request" TEXT
	)');
   
   // var_dump($table); // debug
   // exit(); // debug
   
$countTable = $dbConnect->querySingle("SELECT COUNT(*) as count FROM ".$tablename."");
$countTable = true;
while($countTable) { // while true basically
	$table = tablefromhtml($url);
	end($table);
	$lastkey = key($table);
	for($i=1;$i <= $lastkey;$i++) {
		// echo $table[$i]["Client"] . " ";
		$unique = false;
		$smt = $dbConnect->prepare("SELECT `client`, `request` FROM ".$tablename." WHERE `worker` = :worker ORDER BY `timestamp` DESC LIMIT 1");
		$smt->bindValue(':worker', explode('-', $table[$i]["Srv"]), SQLITE3_TEXT)[0];
		@$query = $smt->execute(); // string>array notice ?!?!?!!?!?
		$row = $query->fetchArray(SQLITE3_ASSOC);
		// var_dump($row); // debug
		if(!is_array($row) || empty(array_diff($row, array($table[$i]["Client"], $table[$i]["Request"])))) {
			$unique = true;
		}
		if($table[$i]["Client"] != "::1" && $unique) { // ::1 because localhost is always querying for some reason via IPv6
			$smt = $dbConnect->prepare("INSERT INTO ".$tablename." (timestamp, worker, client, vhost, request) VALUES ( :timestamp, :worker, :client, :vhost, :request )");
			$smt->bindValue(':timestamp', date("U"), SQLITE3_TEXT);
			$smt->bindValue(':worker', explode('-', $table[$i]["Srv"])[0], SQLITE3_TEXT);
			$smt->bindValue(':client', $table[$i]["Client"], SQLITE3_TEXT);
			$smt->bindValue(':vhost', $table[$i]["VHost"], SQLITE3_TEXT);
			$smt->bindValue(':request', $table[$i]["Request"], SQLITE3_TEXT);
			$query = $smt->execute();
			if($query) {
				echo ".";
			} else {
				echo "x";
			}
		} else {
			echo "whoops?\n";
			$dbConnect->lastErrorMsg();
		}
	}
}

// echo build_table($table); // debug
// header("Content-type: text/plain"); // debug
// var_dump($table); // debug



function build_table($array){ // not needed, maybe for debugging
    // start table
    $html = '<table>';
    // header row
    $html .= '<tr>';
    foreach($array[0] as $key=>$value){
            $html .= '<th>' . htmlspecialchars($key) . '</th>';
        }
    $html .= '</tr>';

    // data rows
    foreach( $array as $key=>$value){
        $html .= '<tr>';
        foreach($value as $key2=>$value2){
            $html .= '<td>' . htmlspecialchars($value2) . '</td>';
        }
        $html .= '</tr>';
    }

    // finish table and return it

    $html .= '</table>';
    return $html;
}

?>