index : archweb32 | |
Archlinux32 website | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | lib/mysql.php | 90 |
diff --git a/lib/mysql.php b/lib/mysql.php new file mode 100644 index 0000000..19d0dae --- /dev/null +++ b/lib/mysql.php @@ -0,0 +1,90 @@ +<?php + +# do not include twice +if (isset($mysql)) + return; + +require_once "../init.php"; +include_once BASE . "/lib/http.php"; +include_once BASE . "/lib/mysql-joins.php"; + +$mysql = new mysqli("localhost", "webserver", "empty", "buildmaster"); +if ( $mysql -> connect_error ) { + die_500( "Connection failed: " . $mysql -> connect_error ); +} + +function print_important_trace_components($call) { + return substr($call['file'], strlen(BASE)+1) . '(' . $call['line'] . ')'; +} + +function mysql_log_duration_and_trace($start) { + $start = round((microtime(true) - $start) * 1000000); + $trace = debug_backtrace(); + array_shift($trace); + // silently fail if logfile is unavailable + if (($fp = fopen(BASE . '/log', 'a')) !== false) { + flock($fp, LOCK_EX); + fwrite($fp, + date('Y-m-d H:i:s') . " " . + $start . " " . + implode(' ', array_map('print_important_trace_components', $trace)) . " - " . + $trace[0]['args'][0] . "\n" + ); + flock($fp, LOCK_UN); + fclose($fp); + } +} + +function mysql_run_query($query) { + global $mysql; + $start = microtime(true); + if ( ! $result = $mysql -> query($query) ) + die_500( "Query failed: " . $mysql -> error ); + mysql_log_duration_and_trace($start); + return $result; +} + +function mysql_prepare_query($query) { + global $mysql; + $start = microtime(true); + if ( ! $result = $mysql -> prepare($query) ) + die_500( "Prepare failed: " . $mysql -> error ); + mysql_log_duration_and_trace($start); + return $result; +} + +function show_warning_on_offline_slave() { + $result = mysql_run_query("SHOW STATUS LIKE \"Slave_running\""); + if (($result -> num_rows == 0) || + ($result -> fetch_assoc() ["Value"] != "ON")) { + print "<div><font color=\"ff0000\">The replication slave is currently not running. The database might be outdated.</font></div>\n"; + } +} + +function mysql_url_encode($input) { + return + "REPLACE(" . $input . ",\"+\",\"%2B\")"; +} + +function mysql_query_package_version($table) { + return + "CONCAT(" . + "IF(" . + "`" .$table . "`.`epoch`=\"0\"," . + "\"\"," . + "CONCAT(" . + "`" . $table . "`.`epoch`," . + "\":\"" . + ")" . + ")," . + "`" . $table . "`.`pkgver`,\"-\"," . + "`" . $table . "`.`pkgrel`," . + "IF(`" . $table . "`.`sub_pkgrel_omitted`," . + "\"\"," . + "CONCAT(" . + "\".\"," . + "`" . $table . "`.`sub_pkgrel`" . + ")" . + ")" . + ")"; +} |