Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/TaskScheduler.php')
-rw-r--r--core/TaskScheduler.php269
1 files changed, 130 insertions, 139 deletions
diff --git a/core/TaskScheduler.php b/core/TaskScheduler.php
index a2f8810930..1a29780f72 100644
--- a/core/TaskScheduler.php
+++ b/core/TaskScheduler.php
@@ -16,7 +16,7 @@ define('DEBUG_FORCE_SCHEDULED_TASKS', false);
* Piwik_TaskScheduler is the class used to manage the execution of periodicaly planned task.
*
* It performs the following actions :
- * - Identifies tasks of Piwik
+ * - Identifies tasks of Piwik
* - Runs tasks
*
* @package Piwik
@@ -24,151 +24,142 @@ define('DEBUG_FORCE_SCHEDULED_TASKS', false);
class Piwik_TaskScheduler
{
- const GET_TASKS_EVENT = "TaskScheduler.getScheduledTasks";
- const TIMETABLE_OPTION_STRING = "TaskScheduler.timetable";
- static private $running = false;
-
- /**
- * runTasks collects tasks defined within piwik plugins, runs them if they are scheduled and reschedules
- * the tasks that have been executed.
- *
- * @return array
- */
- static public function runTasks()
- {
- // get the array where rescheduled timetables are stored
- $timetable = self::getTimetableFromOptionTable();
-
- // collect tasks
- $tasks = array();
- Piwik_PostEvent(self::GET_TASKS_EVENT, $tasks);
-
- // remove from timetable tasks that are not active anymore
- $activeTaskNames = array();
- foreach($tasks as $task)
- {
- $activeTaskNames[] = $task->getName();
- }
- foreach(array_keys($timetable) as $taskName)
- {
- if(!in_array($taskName, $activeTaskNames))
- {
- unset($timetable[$taskName]);
- }
- }
-
- // for every priority level, starting with the highest and concluding with the lowest
- $executionResults = array();
- for ($priority = Piwik_ScheduledTask::HIGHEST_PRIORITY;
- $priority <= Piwik_ScheduledTask::LOWEST_PRIORITY;
- ++$priority)
- {
- // loop through each task
- foreach ($tasks as $task)
- {
- // if the task does not have the current priority level, don't execute it yet
- if ($task->getPriority() != $priority)
- {
- continue;
- }
-
- $taskName = $task->getName();
- if (self::taskShouldBeExecuted($taskName, $timetable))
- {
- self::$running = true;
- $message = self::executeTask($task);
- self::$running = false;
-
- $executionResults[] = array('task' => $taskName, 'output' => $message);
- }
-
- if(self::taskShouldBeRescheduled($taskName, $timetable))
- {
- // update the scheduled time
- $timetable[$taskName] = $task->getRescheduledTime();
- Piwik_SetOption(self::TIMETABLE_OPTION_STRING, serialize($timetable));
- }
- }
- }
-
- return $executionResults;
- }
-
- static public function isTaskBeingExecuted()
- {
- return self::$running;
- }
-
+ const GET_TASKS_EVENT = "TaskScheduler.getScheduledTasks";
+ const TIMETABLE_OPTION_STRING = "TaskScheduler.timetable";
+ static private $running = false;
+
+ /**
+ * runTasks collects tasks defined within piwik plugins, runs them if they are scheduled and reschedules
+ * the tasks that have been executed.
+ *
+ * @return array
+ */
+ static public function runTasks()
+ {
+ // get the array where rescheduled timetables are stored
+ $timetable = self::getTimetableFromOptionTable();
+
+ // collect tasks
+ $tasks = array();
+ Piwik_PostEvent(self::GET_TASKS_EVENT, $tasks);
+
+ // remove from timetable tasks that are not active anymore
+ $activeTaskNames = array();
+ foreach ($tasks as $task) {
+ $activeTaskNames[] = $task->getName();
+ }
+ foreach (array_keys($timetable) as $taskName) {
+ if (!in_array($taskName, $activeTaskNames)) {
+ unset($timetable[$taskName]);
+ }
+ }
+
+ // for every priority level, starting with the highest and concluding with the lowest
+ $executionResults = array();
+ for ($priority = Piwik_ScheduledTask::HIGHEST_PRIORITY;
+ $priority <= Piwik_ScheduledTask::LOWEST_PRIORITY;
+ ++$priority) {
+ // loop through each task
+ foreach ($tasks as $task) {
+ // if the task does not have the current priority level, don't execute it yet
+ if ($task->getPriority() != $priority) {
+ continue;
+ }
+
+ $taskName = $task->getName();
+ if (self::taskShouldBeExecuted($taskName, $timetable)) {
+ self::$running = true;
+ $message = self::executeTask($task);
+ self::$running = false;
+
+ $executionResults[] = array('task' => $taskName, 'output' => $message);
+ }
+
+ if (self::taskShouldBeRescheduled($taskName, $timetable)) {
+ // update the scheduled time
+ $timetable[$taskName] = $task->getRescheduledTime();
+ Piwik_SetOption(self::TIMETABLE_OPTION_STRING, serialize($timetable));
+ }
+ }
+ }
+
+ return $executionResults;
+ }
+
+ static public function isTaskBeingExecuted()
+ {
+ return self::$running;
+ }
+
/**
* return the next task schedule for a given class and method name
- *
+ *
* @param string $className
* @param string $methodName
* @param string $methodParameter
* @return mixed int|bool the next schedule in miliseconds, false if task has never been run
*/
- static public function getScheduledTimeForMethod($className, $methodName, $methodParameter = null) {
-
- // get the array where rescheduled timetables are stored
- $timetable = self::getTimetableFromOptionTable();
-
- $taskName = Piwik_ScheduledTask::getTaskName($className, $methodName, $methodParameter);
-
- return self::taskHasBeenScheduledOnce($taskName, $timetable) ? $timetable[$taskName] : false;
- }
-
- /*
- * Task has to be executed if :
- * - the task has already been scheduled once and the current system time is greater than the scheduled time.
- * - execution is forced, see $forceTaskExecution
- */
- static private function taskShouldBeExecuted($taskName, $timetable)
- {
- $forceTaskExecution =
- (isset($GLOBALS['PIWIK_TRACKER_DEBUG_FORCE_SCHEDULED_TASKS']) && $GLOBALS['PIWIK_TRACKER_DEBUG_FORCE_SCHEDULED_TASKS'])
- || DEBUG_FORCE_SCHEDULED_TASKS;
-
- return $forceTaskExecution || (self::taskHasBeenScheduledOnce($taskName, $timetable) && time() >= $timetable[$taskName]);
- }
-
- /*
- * Task has to be rescheduled if :
- * - the task has to be executed
- * - the task has never been scheduled before
- */
- static private function taskShouldBeRescheduled($taskName, $timetable)
- {
- return !self::taskHasBeenScheduledOnce($taskName, $timetable) || self::taskShouldBeExecuted($taskName, $timetable);
- }
-
- static private function taskHasBeenScheduledOnce($taskName, $timetable)
- {
- return isset($timetable[$taskName]);
- }
-
- static private function getTimetableFromOptionValue($option) {
- $unserializedTimetable = @unserialize($option);
- return $unserializedTimetable === false ? array() : $unserializedTimetable;
+ static public function getScheduledTimeForMethod($className, $methodName, $methodParameter = null)
+ {
+
+ // get the array where rescheduled timetables are stored
+ $timetable = self::getTimetableFromOptionTable();
+
+ $taskName = Piwik_ScheduledTask::getTaskName($className, $methodName, $methodParameter);
+
+ return self::taskHasBeenScheduledOnce($taskName, $timetable) ? $timetable[$taskName] : false;
+ }
+
+ /*
+ * Task has to be executed if :
+ * - the task has already been scheduled once and the current system time is greater than the scheduled time.
+ * - execution is forced, see $forceTaskExecution
+ */
+ static private function taskShouldBeExecuted($taskName, $timetable)
+ {
+ $forceTaskExecution =
+ (isset($GLOBALS['PIWIK_TRACKER_DEBUG_FORCE_SCHEDULED_TASKS']) && $GLOBALS['PIWIK_TRACKER_DEBUG_FORCE_SCHEDULED_TASKS'])
+ || DEBUG_FORCE_SCHEDULED_TASKS;
+
+ return $forceTaskExecution || (self::taskHasBeenScheduledOnce($taskName, $timetable) && time() >= $timetable[$taskName]);
+ }
+
+ /*
+ * Task has to be rescheduled if :
+ * - the task has to be executed
+ * - the task has never been scheduled before
+ */
+ static private function taskShouldBeRescheduled($taskName, $timetable)
+ {
+ return !self::taskHasBeenScheduledOnce($taskName, $timetable) || self::taskShouldBeExecuted($taskName, $timetable);
+ }
+
+ static private function taskHasBeenScheduledOnce($taskName, $timetable)
+ {
+ return isset($timetable[$taskName]);
+ }
+
+ static private function getTimetableFromOptionValue($option)
+ {
+ $unserializedTimetable = @unserialize($option);
+ return $unserializedTimetable === false ? array() : $unserializedTimetable;
}
- static private function getTimetableFromOptionTable()
- {
- return self::getTimetableFromOptionValue(Piwik_GetOption(self::TIMETABLE_OPTION_STRING));
- }
-
- static private function executeTask($task)
- {
- try
- {
- $timer = new Piwik_Timer();
- call_user_func(array($task->getObjectInstance(), $task->getMethodName()), $task->getMethodParameter());
- $message = $timer->__toString();
- }
- catch(Exception $e)
- {
- $message = 'ERROR: ' . $e->getMessage();
- }
-
- return $message;
- }
+ static private function getTimetableFromOptionTable()
+ {
+ return self::getTimetableFromOptionValue(Piwik_GetOption(self::TIMETABLE_OPTION_STRING));
+ }
+
+ static private function executeTask($task)
+ {
+ try {
+ $timer = new Piwik_Timer();
+ call_user_func(array($task->getObjectInstance(), $task->getMethodName()), $task->getMethodParameter());
+ $message = $timer->__toString();
+ } catch (Exception $e) {
+ $message = 'ERROR: ' . $e->getMessage();
+ }
+
+ return $message;
+ }
}