/** * Dataprovider for testRun */ public function runDataProvider() { $now = time(); $dailySchedule = $this->getMock('Piwik\\Scheduler\\Schedule\\Daily', array('getTime')); $dailySchedule->expects($this->any())->method('getTime')->will($this->returnValue($now)); $scheduledTaskOne = new Task($this, 'scheduledTaskOne', null, $dailySchedule); $scheduledTaskTwo = new Task($this, 'scheduledTaskTwo', 1, $dailySchedule); $scheduledTaskThree = new Task($this, 'scheduledTaskThree', null, $dailySchedule); $caseOneExpectedTable = array(__CLASS__ . '.scheduledTaskOne' => $scheduledTaskOne->getRescheduledTime(), __CLASS__ . '.scheduledTaskTwo_1' => $now + 60000, __CLASS__ . '.scheduledTaskThree' => $scheduledTaskThree->getRescheduledTime()); $caseTwoTimetableBeforeExecution = $caseOneExpectedTable; $caseTwoTimetableBeforeExecution[__CLASS__ . '.scheduledTaskThree'] = $now; // simulate elapsed time between case 1 and 2 return array(array($caseOneExpectedTable, array(__CLASS__ . '.scheduledTaskOne'), array(__CLASS__ . '.scheduledTaskOne' => $now, __CLASS__ . '.scheduledTaskTwo_1' => $now + 60000), array($scheduledTaskOne, $scheduledTaskTwo, $scheduledTaskThree)), array(array(__CLASS__ . '.scheduledTaskOne' => $scheduledTaskOne->getRescheduledTime(), __CLASS__ . '.scheduledTaskThree' => $scheduledTaskThree->getRescheduledTime()), array(__CLASS__ . '.scheduledTaskThree'), $caseTwoTimetableBeforeExecution, array($scheduledTaskOne, $scheduledTaskThree))); }
/** * @dataProvider getTaskNameTestCases */ public function testGetTaskName($expectedTaskName, $className, $methodName, $methodParameter) { $this->assertEquals($expectedTaskName, Task::getTaskName($className, $methodName, $methodParameter)); }
public function getScheduledTimeForMethod($className, $methodName, $methodParameter = null) { $taskName = Task::getTaskName($className, $methodName, $methodParameter); return $this->taskHasBeenScheduledOnce($taskName) ? $this->timetable[$taskName] : false; }
/** * Executes the given task * * @param Task $task * @return string */ private function executeTask($task) { $this->logger->info("Scheduler: executing task {taskName}...", array('taskName' => $task->getName())); $this->isRunningTask = true; $timer = new Timer(); try { $callable = array($task->getObjectInstance(), $task->getMethodName()); call_user_func($callable, $task->getMethodParameter()); $message = $timer->__toString(); } catch (Exception $e) { $message = 'ERROR: ' . $e->getMessage(); } $this->isRunningTask = false; $this->logger->info("Scheduler: finished. {timeElapsed}", array('timeElapsed' => $timer)); return $message; }
/** * Executes the given task * * @param Task $task * @return string */ private function executeTask($task) { $this->logger->debug('Running task {task}', array('task' => $task->getName())); try { $timer = new Timer(); call_user_func(array($task->getObjectInstance(), $task->getMethodName()), $task->getMethodParameter()); $message = $timer->__toString(); } catch (Exception $e) { $message = 'ERROR: ' . $e->getMessage(); } return $message; }
/** * See {@link Piwik\Scheduler\Schedule\Schedule::getRescheduledTime()}. */ public function getRescheduledTime() { $nextScheduledTime = parent::getRescheduledTime(); // if a geoip database is out of date, run the updater as soon as possible if ($this->isAtLeastOneGeoIpDbOutOfDate($nextScheduledTime)) { return time(); } return $nextScheduledTime; }