define ( 'FRIENDICA_CODENAME', 'Asparagus');
define ( 'FRIENDICA_VERSION', '3.5-dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1201 );
+define ( 'DB_UPDATE_VERSION', 1202 );
/**
* @brief Constant with a HTML line break.
}
+ /**
+ * @brief Log active processes into the "process" table
+ */
+ function start_process() {
+ $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
+
+ $command = basename($trace[0]["file"]);
+
+ $this->remove_inactive_processes();
+
+ $r = q("SELECT `pid` FROM `process` WHERE `pid` = %d", intval(getmypid()));
+ if(!dbm::is_result($r))
+ q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')",
+ intval(getmypid()),
+ dbesc($command),
+ dbesc(datetime_convert()));
+ }
+
+ /**
+ * @brief Remove inactive processes
+ */
+ function remove_inactive_processes() {
+ $r = q("SELECT `pid` FROM `process`");
+ if(dbm::is_result($r))
+ foreach ($r AS $process)
+ if (!posix_kill($process["pid"], 0))
+ q("DELETE FROM `process` WHERE `pid` = %d", intval($process["pid"]));
+ }
+
+ /**
+ * @brief Remove the active process from the "process" table
+ */
+ function end_process() {
+ q("DELETE FROM `process` WHERE `pid` = %d", intval(getmypid()));
+ }
+
/**
* @brief Returns a string with a callstack. Can be used for logging.
*
* @brief Used to end the current process, after saving session state.
*/
function killme() {
+
+ get_app()->end_process();
+
if (!get_app()->is_backend())
session_write_close();
unset($db_host, $db_user, $db_pass, $db_data);
};
+$a->start_process();
+
// the logfile to which to write, should be writeable by the user which is running the server
$sLogFile = get_config('jabber','logfile');
if(is_null($a)) {
$a = new App;
}
-
+
if(is_null($db)) {
@include(".htconfig.php");
require_once("dba.php");
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/session.php');
load_config('config');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
require_once('include/session.php');
require_once('include/datetime.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/session.php');
require_once('include/datetime.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
require_once('include/session.php');
require_once('include/datetime.php');
"choice" => array("choice"),
)
);
+ $database["process"] = array(
+ "fields" => array(
+ "pid" => array("type" => "int(10) unsigned", "not null" => "1", "primary" => "1"),
+ "command" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+ "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+ ),
+ "indexes" => array(
+ "PRIMARY" => array("pid"),
+ "command" => array("command"),
+ )
+ );
$database["profile"] = array(
"fields" => array(
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
unset($db_host, $db_user, $db_pass, $db_data);
}
+ $a->start_process();
+
if ($argc==2) {
switch ($argv[1]) {
case "update":
unset($db_host, $db_user, $db_pass, $db_data);
}
+ $a->start_process();
+
load_config('config');
load_config('system');
unset($db_host, $db_user, $db_pass, $db_data);
}
+ $a->start_process();
+
require_once("include/session.php");
require_once("include/datetime.php");
require_once('include/items.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
load_config('config');
load_config('system');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/session.php');
require_once('include/datetime.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/session.php');
require_once('include/datetime.php');
require_once('include/items.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/session.php');
require_once('include/datetime.php');
unset($db_host, $db_user, $db_pass, $db_data);
}
+ $a->start_process();
+
require_once("include/session.php");
require_once("include/datetime.php");
require_once('include/items.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
require_once('include/session.php');
require_once('include/datetime.php');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
+ $mypid = getmypid();
+
if ($a->max_processes_reached())
return;
q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = %d WHERE `id` = %d AND `executed` = '0000-00-00 00:00:00'",
dbesc(datetime_convert()),
- intval(getmypid()),
+ intval($mypid),
intval($r[0]["id"]));
// Assure that there are no tasks executed twice
- $id = q("SELECT `id` FROM `workerqueue` WHERE `id` = %d AND `pid` = %d",
- intval($r[0]["id"]),
- intval(getmypid()));
+ $id = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"]));
if (!$id) {
- logger("Queue item ".$r[0]["id"]." was executed multiple times - skip this execution", LOGGER_DEBUG);
+ logger("Queue item ".$r[0]["id"]." vanished - skip this execution", LOGGER_DEBUG);
+ continue;
+ } elseif ((strtotime($id[0]["executed"]) <= 0) OR ($id[0]["pid"] == 0)) {
+ logger("Entry for queue item ".$r[0]["id"]." wasn't stored - we better stop here", LOGGER_DEBUG);
+ return;
+ } elseif ($id[0]["pid"] != $mypid) {
+ logger("Queue item ".$r[0]["id"]." is to be executed by process ".$id[0]["pid"]." and not by me (".$mypid.") - skip this execution", LOGGER_DEBUG);
continue;
}
$funcname = str_replace(".php", "", basename($argv[0]))."_run";
if (function_exists($funcname)) {
- logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." ".$r[0]["parameter"]);
+ logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." ".$r[0]["parameter"]);
$funcname($argv, $argc);
if ($cooldown > 0) {
- logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds");
+ logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds");
sleep($cooldown);
}
- logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - done");
+ logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - done");
q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"]));
} else
}
function poller_active_workers() {
- $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
+ $workers = q("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'poller.php'");
- return($workers[0]["workers"]);
+ return($workers[0]["processes"]);
}
if (array_search(__file__,get_included_files())===0){
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/items.php');
load_config('config');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
require_once("include/session.php");
require_once("include/datetime.php");
unset($db_host, $db_user, $db_pass, $db_data);
}
+$a->start_process();
+
load_config('config');
load_config('system');
unset($db_host, $db_user, $db_pass, $db_data);
}
+$a->start_process();
+
load_config('config');
load_config('system');
unset($db_host, $db_user, $db_pass, $db_data);
}
+$a->start_process();
+
load_config('config');
load_config('system');
unset($db_host, $db_user, $db_pass, $db_data);
};
+ $a->start_process();
+
require_once('include/Scrape.php');
require_once("include/socgraph.php");
<?php
-define('UPDATE_VERSION' , 1201);
+define('UPDATE_VERSION' , 1202);
/**
*