Browse Source

unify update_daemon, update_feeds and update_feedbrowser into update.php; move update.php to db-updater.php

Andrew Dolgov 13 years ago
parent
commit
661135c742
10 changed files with 245 additions and 402 deletions
  1. 171 0
      db-updater.php
  2. 1 1
      digest.js
  3. 1 1
      errors.php
  4. 1 1
      functions.js
  5. 71 144
      update.php
  6. 0 87
      update_daemon.php
  7. 0 76
      update_daemon_loop.php
  8. 0 49
      update_feedbrowser.php
  9. 0 43
      update_feeds.php
  10. 0 0
      utils/update-translations.sh

+ 171 - 0
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>
+

+ 1 - 1
digest.js

@@ -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";

+ 1 - 1
errors.php

@@ -12,7 +12,7 @@
 
 	$ERRORS[4] = __("Frontend sanity check failed.");
 
-	$ERRORS[5] = __("Incorrect database schema version. &lt;a href='update.php'&gt;Please update&lt;/a&gt;.");
+	$ERRORS[5] = __("Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;.");
 
 	$ERRORS[6] = __("Request not authorized.");
 

+ 1 - 1
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";

+ 71 - 144
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");
+?>

+ 0 - 87
update_daemon.php

@@ -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);
-	}
-
-
-?>

+ 0 - 76
update_daemon_loop.php

@@ -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);
-
-?>

+ 0 - 49
update_feedbrowser.php

@@ -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");
-
-?>

+ 0 - 43
update_feeds.php

@@ -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");
-?>

+ 0 - 0
update-translations.sh → utils/update-translations.sh