summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Šijanec <sijanecantonluka@gmail.com>2019-05-20 22:01:18 +0200
committerGitHub <noreply@github.com>2019-05-20 22:01:18 +0200
commit106aba7efce18e26daac2150650426388a02a810 (patch)
tree7affd5b22c910e72ceac6bdd3d8558e555449535
parentInitial commit (diff)
downloadserver-status-logger-106aba7efce18e26daac2150650426388a02a810.tar
server-status-logger-106aba7efce18e26daac2150650426388a02a810.tar.gz
server-status-logger-106aba7efce18e26daac2150650426388a02a810.tar.bz2
server-status-logger-106aba7efce18e26daac2150650426388a02a810.tar.lz
server-status-logger-106aba7efce18e26daac2150650426388a02a810.tar.xz
server-status-logger-106aba7efce18e26daac2150650426388a02a810.tar.zst
server-status-logger-106aba7efce18e26daac2150650426388a02a810.zip
-rw-r--r--server-status-logger.php147
1 files changed, 147 insertions, 0 deletions
diff --git a/server-status-logger.php b/server-status-logger.php
new file mode 100644
index 0000000..b1fa4e2
--- /dev/null
+++ b/server-status-logger.php
@@ -0,0 +1,147 @@
+#!/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;
+}
+
+?>