From ba2a49e9875eda489385e370bb9f2259779caa7b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 2 Dec 2014 19:22:48 +0100 Subject: Tweaks and fixes --- inc/taskmanagercallback.inc.php | 56 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'inc/taskmanagercallback.inc.php') diff --git a/inc/taskmanagercallback.inc.php b/inc/taskmanagercallback.inc.php index 3ef4745c..951a1de3 100644 --- a/inc/taskmanagercallback.inc.php +++ b/inc/taskmanagercallback.inc.php @@ -5,7 +5,7 @@ */ class TaskmanagerCallback { - + /** * Add a callback for given task id. This is the only exception in this class, * as this is not a callback, but a function to define one :) @@ -31,6 +31,51 @@ class TaskmanagerCallback )); } + /** + * Get all pending callbacks from the callback table. + * + * @return array list of array(taskid => list of callbacks) + */ + public static function getPendingCallbacks() + { + $retval = array(); + $res = Database::simpleQuery("SELECT taskid, cbfunction FROM callback"); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $retval[$row['taskid']][] = $row; + } + return $retval; + } + + /** + * Handle the given callback. Will delete the entry from the callback + * table if appropriate. + * + * @param array $callback entry from the callback table (cbfunction + taskid) + * @param array $status status of the task as returned by the taskmanager. If NULL it will be queried. + */ + public static function handleCallback($callback, $status = NULL) + { + if (is_null($status)) + $status = Taskmanager::status($callback['taskid']); + if ($status === false) // No reply from Taskmanager, retry later + return; + if (Taskmanager::isFailed($status) || Taskmanager::isFinished($status)) { + $del = Database::exec("DELETE FROM callback WHERE taskid = :task AND cbfunction = :cb LIMIT 1", array('task' => $callback['taskid'], 'cb' => $callback['cbfunction'])); + if ($del === 0) // No entry deleted, so someone else must have deleted it - race condition, do nothing + return; + } + if (Taskmanager::isFinished($status)) { + $func = array('TaskmanagerCallback', preg_replace('/\W/', '', $callback['cbfunction'])); + if (!call_user_func_array('method_exists', $func)) { + Eventlog::warning("handleCallback: Callback {$callback['cbfunction']} doesn't exist."); + } else { + call_user_func($func, $status); + } + } + } + + // #################################################################### + /** * Result of trying to (re)launch ldadp. */ @@ -40,4 +85,13 @@ class TaskmanagerCallback EventLog::warning("Could not start/stop LDAP-AD-Proxy instances", $task['data']['messages']); } + public static function dbRestored($task) + { + error_log("dbRestored."); + if (Taskmanager::isFinished($task) && !Taskmanager::isFailed($task)) { + error_log("LOGGING."); + EventLog::info('Configuration backup restored.'); + } + } + } -- cgit v1.2.3-55-g7522