diff options
author | Andrew Dolgov <[email protected]> | 2010-11-09 16:33:08 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2010-11-09 16:33:08 +0300 |
commit | 661135c742cc31bc0eece3bb669dad707d0aff66 (patch) | |
tree | 8656af87b9ddb003942083d3233abb36090fba1d | |
parent | e75df19d5061bde98acdb1fcca7b8471097c6d92 (diff) |
unify update_daemon, update_feeds and update_feedbrowser into update.php; move update.php to db-updater.php
-rw-r--r-- | db-updater.php | 171 | ||||
-rw-r--r-- | digest.js | 2 | ||||
-rw-r--r-- | errors.php | 2 | ||||
-rw-r--r-- | functions.js | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | update.php | 215 | ||||
-rwxr-xr-x | update_daemon.php | 87 | ||||
-rwxr-xr-x | update_daemon_loop.php | 76 | ||||
-rwxr-xr-x | update_feedbrowser.php | 49 | ||||
-rwxr-xr-x | update_feeds.php | 43 | ||||
-rwxr-xr-x | utils/update-translations.sh (renamed from update-translations.sh) | 0 |
10 files changed, 245 insertions, 402 deletions
diff --git a/db-updater.php b/db-updater.php new file mode 100644 index 000000000..76e308856 --- /dev/null +++ b/db-updater.php @@ -0,0 +1,171 @@ +<?php + error_reporting(E_ERROR | E_WARNING | E_PARSE); + + require_once "sessions.php"; + + require_once "sanity_check.php"; + require_once "functions.php"; + require_once "config.php"; + require_once "db.php"; + + $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); + + init_connection($link); + login_sequence($link); + + $owner_uid = $_SESSION["uid"]; + + if (!SINGLE_USER_MODE && $_SESSION["access_level"] < 10) { + $_SESSION["login_error_msg"] = __("Your access level is insufficient to run this script."); + render_login_form($link); + exit; + } + + +?> + +<html> +<head> +<title>Database Updater</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<link rel="stylesheet" type="text/css" href="utility.css"> +</head> + +<body> + +<script type='text/javascript'> +function confirmOP() { + return confirm(__("Update the database?")); +} +</script> + +<div class="floatingLogo"><img src="images/ttrss_logo.png"></div> + +<h1><?php echo __("Database Updater") ?></h1> + +<?php + function getline($fp, $delim) { + $result = ""; + while(!feof($fp)) { + $tmp = fgetc($fp); + + if($tmp == $delim) { + return $result; + } + $result .= $tmp; + } + return $result; + } + + $op = $_POST["op"]; + + $result = db_query($link, "SELECT schema_version FROM ttrss_version"); + $version = db_fetch_result($result, 0, "schema_version"); + + $update_files = glob("schema/versions/".DB_TYPE."/*sql"); + $update_versions = array(); + + foreach ($update_files as $f) { + $m = array(); + preg_match_all("/schema\/versions\/".DB_TYPE."\/(\d*)\.sql/", $f, $m, + PREG_PATTERN_ORDER); + + if ($m[1][0]) { + $update_versions[$m[1][0]] = $f; + } + } + + ksort($update_versions, SORT_NUMERIC); + + $latest_version = max(array_keys($update_versions)); + + if ($version == $latest_version) { + + if ($version != SCHEMA_VERSION) { + print_error(__("Could not update database")); + + print "<p>" . + __("Could not find necessary schema file, need version:") . + " " . SCHEMA_VERSION . __(", found: ") . $latest_version . "</p>"; + + } else { + print "<p>".__("Tiny Tiny RSS database is up to date.")."</p>"; + print "<form method=\"GET\" action=\"tt-rss.php\"> + <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\"> + </form>"; + } + + return; + } + + if (!$op) { + print_warning(__("Please backup your database before proceeding.")); + + print "<p>" . T_sprintf("Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>).", $version, $latest_version) . "</p>"; + + /* print "<p>Available incremental updates:"; + + foreach (array_keys($update_versions) as $v) { + if ($v > $version) { + print " <a href='$update_versions[$v]'>$v</a>"; + } + } */ + + print "</p>"; + + print "<form method='POST'> + <input type='hidden' name='op' value='do'> + <input type='submit' onclick='return confirmOP()' value='".__("Perform updates")."'> + </form>"; + + } else if ($op == "do") { + + print "<p>".__("Performing updates...")."</p>"; + + $num_updates = 0; + + foreach (array_keys($update_versions) as $v) { + if ($v == $version + 1) { + print "<p>".T_sprintf("Updating to version %d...", $v)."</p>"; + $fp = fopen($update_versions[$v], "r"); + if ($fp) { + while (!feof($fp)) { + $query = trim(getline($fp, ";")); + if ($query != "") { + print "<p class='query'>$query</p>"; + db_query($link, $query); + } + } + } + fclose($fp); + + print "<p>".__("Checking version... "); + + $result = db_query($link, "SELECT schema_version FROM ttrss_version"); + $version = db_fetch_result($result, 0, "schema_version"); + + if ($version == $v) { + print __("OK!"); + } else { + print "<b>".__("ERROR!")."</b>"; + return; + } + + $num_updates++; + } + } + + print "<p>".T_sprintf("Finished. Performed <b>%d</b> update(s) up to schema + version <b>%d</b>.", $num_updates, $version)."</p>"; + + print "<form method=\"GET\" action=\"logout.php\"> + <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\"> + </form>"; + + } + +?> + +</body> +</html> + @@ -719,7 +719,7 @@ function fatal_error(code, msg) { if (code == 6) { window.location.href = "digest.php"; } else if (code == 5) { - window.location.href = "update.php"; + window.location.href = "db-updater.php"; } else { if (msg == "") msg = "Unknown error"; diff --git a/errors.php b/errors.php index bd7b53fe4..b2e0841a3 100644 --- a/errors.php +++ b/errors.php @@ -12,7 +12,7 @@ $ERRORS[4] = __("Frontend sanity check failed."); - $ERRORS[5] = __("Incorrect database schema version. <a href='update.php'>Please update</a>."); + $ERRORS[5] = __("Incorrect database schema version. <a href='db-updater.php'>Please update</a>."); $ERRORS[6] = __("Request not authorized."); diff --git a/functions.js b/functions.js index 9e990c447..ae7ecee35 100644 --- a/functions.js +++ b/functions.js @@ -1375,7 +1375,7 @@ function fatalError(code, msg, ext_info) { if (code == 6) { window.location.href = "tt-rss.php"; } else if (code == 5) { - window.location.href = "update.php"; + window.location.href = "db-updater.php"; } else { if (msg == "") msg = "Unknown error"; diff --git a/update.php b/update.php index 76e308856..50b9fc412 100644..100755 --- a/update.php +++ b/update.php @@ -1,171 +1,98 @@ +#!/usr/bin/php <?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); + define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE); + define('DISABLE_SESSIONS', true); + + if (!defined('PHP_EXECUTABLE')) + define('PHP_EXECUTABLE', '/usr/bin/php'); + + error_reporting(DEFAULT_ERROR_LEVEL); - require_once "sessions.php"; - require_once "sanity_check.php"; - require_once "functions.php"; require_once "config.php"; require_once "db.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); + require_once "db-prefs.php"; + require_once "functions.php"; + + $op = $argv[1]; - init_connection($link); - login_sequence($link); - - $owner_uid = $_SESSION["uid"]; - - if (!SINGLE_USER_MODE && $_SESSION["access_level"] < 10) { - $_SESSION["login_error_msg"] = __("Your access level is insufficient to run this script."); - render_login_form($link); - exit; + if (!$op || $op == "-help") { + print "Tiny Tiny RSS data update script.\n\n"; + print "Options:\n"; + print " -feeds - update feeds\n"; + print " -feedbrowser - update feedbrowser\n"; + print " -daemon - start single-process update daemon\n"; + print " -help - show this help\n"; + return; } + if ($op != "-daemon") { + $lock_filename = "update.lock"; + } else { + $lock_filename = "update_daemon.lock"; + } -?> + $lock_handle = make_lockfile($lock_filename); + $must_exit = false; -<html> -<head> -<title>Database Updater</title> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<link rel="stylesheet" type="text/css" href="utility.css"> -</head> + // Try to lock a file in order to avoid concurrent update. + if (!$lock_handle) { + die("error: Can't create lockfile ($lock_filename). ". + "Maybe another update process is already running.\n"); + } -<body> + // Create a database connection. + $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); -<script type='text/javascript'> -function confirmOP() { - return confirm(__("Update the database?")); -} -</script> + if (!$link) { + if (DB_TYPE == "mysql") { + print mysql_error(); + } + // PG seems to display its own errors just fine by default. + return; + } -<div class="floatingLogo"><img src="images/ttrss_logo.png"></div> + init_connection($link); -<h1><?php echo __("Database Updater") ?></h1> + if ($op == "-feeds") { + // Update all feeds needing a update. + update_daemon_common($link); + } -<?php - function getline($fp, $delim) { - $result = ""; - while(!feof($fp)) { - $tmp = fgetc($fp); - - if($tmp == $delim) { - return $result; - } - $result .= $tmp; - } - return $result; + if ($op == "-feedbrowser") { + $count = update_feedbrowser_cache($link); + print "Finished, $count feeds processed.\n"; } - - $op = $_POST["op"]; - - $result = db_query($link, "SELECT schema_version FROM ttrss_version"); - $version = db_fetch_result($result, 0, "schema_version"); - - $update_files = glob("schema/versions/".DB_TYPE."/*sql"); - $update_versions = array(); - - foreach ($update_files as $f) { - $m = array(); - preg_match_all("/schema\/versions\/".DB_TYPE."\/(\d*)\.sql/", $f, $m, - PREG_PATTERN_ORDER); - - if ($m[1][0]) { - $update_versions[$m[1][0]] = $f; + + if ($op == "-daemon") { + if (!ENABLE_UPDATE_DAEMON) + die("Please enable option ENABLE_UPDATE_DAEMON in config.php\n"); + + while (true) { + passthru(PHP_EXECUTABLE . " " . $argv[0] . " -daemon-loop"); + _debug("Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds..."); + sleep(DAEMON_SLEEP_INTERVAL); } } - - ksort($update_versions, SORT_NUMERIC); - - $latest_version = max(array_keys($update_versions)); - - if ($version == $latest_version) { - if ($version != SCHEMA_VERSION) { - print_error(__("Could not update database")); + if ($op == "-daemon-loop") { + if (!make_stampfile('update_daemon.stamp')) { + die("error: unable to create stampfile\n"); + } - print "<p>" . - __("Could not find necessary schema file, need version:") . - " " . SCHEMA_VERSION . __(", found: ") . $latest_version . "</p>"; + // Call to the feed batch update function + // or regenerate feedbrowser cache + if (rand(0,100) > 30) { + update_daemon_common($link); } else { - print "<p>".__("Tiny Tiny RSS database is up to date.")."</p>"; - print "<form method=\"GET\" action=\"tt-rss.php\"> - <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\"> - </form>"; + $count = update_feedbrowser_cache($link); + _debug("Finished, $count feeds processed."); } - return; - } - - if (!$op) { - print_warning(__("Please backup your database before proceeding.")); - - print "<p>" . T_sprintf("Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>).", $version, $latest_version) . "</p>"; - - /* print "<p>Available incremental updates:"; - - foreach (array_keys($update_versions) as $v) { - if ($v > $version) { - print " <a href='$update_versions[$v]'>$v</a>"; - } - } */ - - print "</p>"; - - print "<form method='POST'> - <input type='hidden' name='op' value='do'> - <input type='submit' onclick='return confirmOP()' value='".__("Perform updates")."'> - </form>"; - - } else if ($op == "do") { - - print "<p>".__("Performing updates...")."</p>"; - - $num_updates = 0; - - foreach (array_keys($update_versions) as $v) { - if ($v == $version + 1) { - print "<p>".T_sprintf("Updating to version %d...", $v)."</p>"; - $fp = fopen($update_versions[$v], "r"); - if ($fp) { - while (!feof($fp)) { - $query = trim(getline($fp, ";")); - if ($query != "") { - print "<p class='query'>$query</p>"; - db_query($link, $query); - } - } - } - fclose($fp); - - print "<p>".__("Checking version... "); - - $result = db_query($link, "SELECT schema_version FROM ttrss_version"); - $version = db_fetch_result($result, 0, "schema_version"); - - if ($version == $v) { - print __("OK!"); - } else { - print "<b>".__("ERROR!")."</b>"; - return; - } - - $num_updates++; - } - } - - print "<p>".T_sprintf("Finished. Performed <b>%d</b> update(s) up to schema - version <b>%d</b>.", $num_updates, $version)."</p>"; - - print "<form method=\"GET\" action=\"logout.php\"> - <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\"> - </form>"; - } - -?> -</body> -</html> + db_close($link); + unlink(LOCK_DIRECTORY . "/$lock_filename"); +?> diff --git a/update_daemon.php b/update_daemon.php deleted file mode 100755 index 03d366b5e..000000000 --- a/update_daemon.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/php -<?php - // this daemon runs in the background and updates all feeds - // continuously - - // define('DEFAULT_ERROR_LEVEL', E_ALL); - define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE); - - declare(ticks = 1); - - define('DISABLE_SESSIONS', true); - - require_once "version.php"; - - if (strpos(VERSION, ".99") !== false || getenv('DAEMON_XDEBUG')) { - define('DAEMON_EXTENDED_DEBUG', true); - } - - define('PURGE_INTERVAL', 3600); // seconds - - require_once "sanity_check.php"; - require_once "config.php"; - - if (!defined('PHP_EXECUTABLE')) { - define('PHP_EXECUTABLE', '/usr/bin/php'); - } - - if (!ENABLE_UPDATE_DAEMON) { - die("Please enable option ENABLE_UPDATE_DAEMON in config.php\n"); - } - - require_once "db.php"; - require_once "db-prefs.php"; - require_once "functions.php"; - - error_reporting(DEFAULT_ERROR_LEVEL); - - function sigint_handler() { - unlink(LOCK_DIRECTORY . "/update_daemon.lock"); - die("Received SIGINT. Exiting.\n"); - } - - function sigalrm_handler() { - die("received SIGALRM, hang in feed update?\n"); - } - - if (function_exists('pcntl_signal')) { - pcntl_signal(SIGINT, sigint_handler); - pcntl_signal(SIGALRM, sigalrm_handler); - } else { - _debug("Warning: pcntl_signal function not present, continuing without support for signals."); - } - - $lock_handle = make_lockfile("update_daemon.lock"); - - if (!$lock_handle) { - die("error: Can't create lockfile ($lock_filename). ". - "Maybe another daemon is already running.\n"); - } - - // Testing database connection. - // It is unnecessary to start the fork loop if database is not ok. - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!$link) { - if (DB_TYPE == "mysql") { - print mysql_error(); - } - // PG seems to display its own errors just fine by default. - return; - } - - db_close($link); - - $last_purge = 0; - - while (true) { - - passthru(PHP_EXECUTABLE . " update_daemon_loop.php SRV_RUN_OK"); - - _debug("Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds..."); - - sleep(DAEMON_SLEEP_INTERVAL); - } - - -?> diff --git a/update_daemon_loop.php b/update_daemon_loop.php deleted file mode 100755 index 7fa22d19d..000000000 --- a/update_daemon_loop.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/php -<?php - // this daemon runs in the background and updates all feeds - // continuously - - if ($argv[1] != "SRV_RUN_OK") { - die("This script should be run by update_daemon.php\n"); - } - - // define('DEFAULT_ERROR_LEVEL', E_ALL); - define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE); - - declare(ticks = 1); - - define('DISABLE_SESSIONS', true); - - require_once "version.php"; - - if (strpos(VERSION, ".99") !== false) { - define('DAEMON_EXTENDED_DEBUG', true); - } - - define('PURGE_INTERVAL', 3600); // seconds - - require_once "sanity_check.php"; - require_once "config.php"; - - if (!ENABLE_UPDATE_DAEMON) { - die("Please enable option ENABLE_UPDATE_DAEMON in config.php\n"); - } - - require_once "db.php"; - require_once "db-prefs.php"; - require_once "functions.php"; - require_once "lib/magpierss/rss_fetch.inc"; - - error_reporting(DEFAULT_ERROR_LEVEL); - - function sigalrm_handler() { - die("received SIGALRM, hang in feed update?\n"); - } - - pcntl_signal(SIGALRM, sigalrm_handler); - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!$link) { - if (DB_TYPE == "mysql") { - print mysql_error(); - } - // PG seems to display its own errors just fine by default. - return; - } - - init_connection($link); - - $last_purge = 0; - - if (!make_stampfile('update_daemon.stamp')) { - print "error: unable to create stampfile"; - die; - } - - // Call to the feed batch update function - // or regenerate feedbrowser cache - - if (rand(0,100) > 50) { - update_daemon_common($link); - } else { - $count = update_feedbrowser_cache($link); - _debug("Finished, $count feeds processed."); - } - - db_close($link); - -?> diff --git a/update_feedbrowser.php b/update_feedbrowser.php deleted file mode 100755 index 0031ff315..000000000 --- a/update_feedbrowser.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/php -<?php - /* This script updates feedbrowser (e.g. Other Feeds tab) cache - * If you are using update daemon, it is NOT necessary to run - * this script, as updates are handled automatically. */ - - define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE); - define('DISABLE_SESSIONS', true); - - error_reporting(DEFAULT_ERROR_LEVEL); - - require_once "sanity_check.php"; - require_once "config.php"; - require_once "db.php"; - require_once "db-prefs.php"; - require_once "functions.php"; - - $lock_filename = "update_feedbrowser.lock"; - - $lock_handle = make_lockfile($lock_filename); - - // Try to lock a file in order to avoid concurrent update. - if (!$lock_handle) { - die("error: Can't create lockfile ($lock_filename). ". - "Maybe another process is already running.\n"); - } - - // Create a database connection. - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!$link) { - if (DB_TYPE == "mysql") { - print mysql_error(); - } - // PG seems to display its own errors just fine by default. - return; - } - - init_connection($link); - - $count = update_feedbrowser_cache($link); - - print "Finished, $count feeds processed.\n"; - - db_close($link); - - unlink(LOCK_DIRECTORY . "/$lock_filename"); - -?> diff --git a/update_feeds.php b/update_feeds.php deleted file mode 100755 index 6a4aa2a1b..000000000 --- a/update_feeds.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/php -<?php - define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE); - define('DISABLE_SESSIONS', true); - - error_reporting(DEFAULT_ERROR_LEVEL); - - require_once "sanity_check.php"; - require_once "config.php"; - require_once "db.php"; - require_once "db-prefs.php"; - require_once "functions.php"; - - $lock_filename = "update_feeds.lock"; - - $lock_handle = make_lockfile($lock_filename); - - // Try to lock a file in order to avoid concurrent update. - if (!$lock_handle) { - die("error: Can't create lockfile ($lock_filename). ". - "Maybe another process is already running.\n"); - } - - // Create a database connection. - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!$link) { - if (DB_TYPE == "mysql") { - print mysql_error(); - } - // PG seems to display its own errors just fine by default. - return; - } - - init_connection($link); - - // Update all feeds needing a update. - update_daemon_common($link); - - db_close($link); - - unlink(LOCK_DIRECTORY . "/$lock_filename"); -?> diff --git a/update-translations.sh b/utils/update-translations.sh index 6968b20b6..6968b20b6 100755 --- a/update-translations.sh +++ b/utils/update-translations.sh |