diff options
-rw-r--r-- | cron.php | 2 | ||||
-rw-r--r-- | db_structure.xml | 8 | ||||
-rw-r--r-- | lib/private/BackgroundJob/Job.php | 10 | ||||
-rw-r--r-- | lib/private/BackgroundJob/JobList.php | 18 | ||||
-rw-r--r-- | lib/public/BackgroundJob/IJobList.php | 17 | ||||
-rw-r--r-- | tests/lib/BackgroundJob/DummyJobList.php | 22 | ||||
-rw-r--r-- | version.php | 2 |
7 files changed, 60 insertions, 19 deletions
@@ -121,11 +121,9 @@ try { break; } - $logger->debug('Run ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $job->execute($jobList, $logger); // clean up after unclean jobs \OC_Util::tearDownFS(); - $logger->debug('Finished ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $jobList->setLastJob($job); $executedJobs[$job->getId()] = true; diff --git a/db_structure.xml b/db_structure.xml index ca832b62819..902fb56ade0 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -1012,6 +1012,14 @@ <notnull>false</notnull> </field> + <field> + <!-- time for execution of the job --> + <name>execution_duration</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + </field> + <index> <name>job_class_index</name> <field> diff --git a/lib/private/BackgroundJob/Job.php b/lib/private/BackgroundJob/Job.php index 726c66ef5d7..cb9328f01b9 100644 --- a/lib/private/BackgroundJob/Job.php +++ b/lib/private/BackgroundJob/Job.php @@ -49,8 +49,18 @@ abstract class Job implements IJob { */ public function execute($jobList, ILogger $logger = null) { $jobList->setLastRun($this); + if ($logger === null) { + $logger = \OC::$server->getLogger(); + } + try { + $jobStartTime = time(); + $logger->debug('Run ' . get_class($this) . ' job with ID ' . $this->getId(), ['app' => 'cron']); $this->run($this->argument); + $timeTaken = time() - $jobStartTime; + + $logger->debug('Finished ' . get_class($this) . ' job with ID ' . $this->getId() . ' in ' . $timeTaken . ' seconds', ['app' => 'cron']); + $jobList->setExecutionTime($this, $timeTaken); } catch (\Exception $e) { if ($logger) { $logger->logException($e, [ diff --git a/lib/private/BackgroundJob/JobList.php b/lib/private/BackgroundJob/JobList.php index 0de5dfecc8b..b0c580290ed 100644 --- a/lib/private/BackgroundJob/JobList.php +++ b/lib/private/BackgroundJob/JobList.php @@ -275,7 +275,7 @@ class JobList implements IJobList { * * @param IJob $job */ - public function setLastJob($job) { + public function setLastJob(IJob $job) { $this->unlockJob($job); $this->config->setAppValue('backgroundjob', 'lastjob', $job->getId()); } @@ -285,7 +285,7 @@ class JobList implements IJobList { * * @param IJob $job */ - public function unlockJob($job) { + public function unlockJob(IJob $job) { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('reserved_at', $query->expr()->literal(0, IQueryBuilder::PARAM_INT)) @@ -310,11 +310,23 @@ class JobList implements IJobList { * * @param IJob $job */ - public function setLastRun($job) { + public function setLastRun(IJob $job) { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('last_run', $query->createNamedParameter(time(), IQueryBuilder::PARAM_INT)) ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); $query->execute(); } + + /** + * @param IJob $job + * @param $timeTaken + */ + public function setExecutionTime(IJob $job, $timeTaken) { + $query = $this->connection->getQueryBuilder(); + $query->update('jobs') + ->set('execution_duration', $query->createNamedParameter($timeTaken, IQueryBuilder::PARAM_INT)) + ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); + $query->execute(); + } } diff --git a/lib/public/BackgroundJob/IJobList.php b/lib/public/BackgroundJob/IJobList.php index fbc46192227..d7c2642712c 100644 --- a/lib/public/BackgroundJob/IJobList.php +++ b/lib/public/BackgroundJob/IJobList.php @@ -91,7 +91,7 @@ interface IJobList { * @param \OCP\BackgroundJob\IJob $job * @since 7.0.0 */ - public function setLastJob($job); + public function setLastJob(IJob $job); /** * Remove the reservation for a job @@ -99,7 +99,7 @@ interface IJobList { * @param IJob $job * @since 9.1.0 */ - public function unlockJob($job); + public function unlockJob(IJob $job); /** * get the id of the last ran job @@ -115,8 +115,17 @@ interface IJobList { /** * set the lastRun of $job to now * - * @param \OCP\BackgroundJob\IJob $job + * @param IJob $job * @since 7.0.0 */ - public function setLastRun($job); + public function setLastRun(IJob $job); + + /** + * set the run duration of $job + * + * @param IJob $job + * @param $timeTaken + * @since 12.0.0 + */ + public function setExecutionTime(IJob $job, $timeTaken); } diff --git a/tests/lib/BackgroundJob/DummyJobList.php b/tests/lib/BackgroundJob/DummyJobList.php index 6cc690fd553..fe8ca5aefe2 100644 --- a/tests/lib/BackgroundJob/DummyJobList.php +++ b/tests/lib/BackgroundJob/DummyJobList.php @@ -7,6 +7,7 @@ */ namespace Test\BackgroundJob; +use OCP\BackgroundJob\IJob; /** * Class DummyJobList @@ -15,7 +16,7 @@ namespace Test\BackgroundJob; */ class DummyJobList extends \OC\BackgroundJob\JobList { /** - * @var \OC\BackgroundJob\Job[] + * @var IJob[] */ private $jobs = array(); @@ -25,7 +26,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { } /** - * @param \OC\BackgroundJob\Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function add($job, $argument = null) { @@ -40,7 +41,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { } /** - * @param \OC\BackgroundJob\Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function remove($job, $argument = null) { @@ -64,7 +65,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * get all jobs in the list * - * @return \OC\BackgroundJob\Job[] + * @return IJob[] */ public function getAll() { return $this->jobs; @@ -73,7 +74,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * get the next job in the list * - * @return \OC\BackgroundJob\Job + * @return IJob|null */ public function getNext() { if (count($this->jobs) > 0) { @@ -93,7 +94,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * * @param \OC\BackgroundJob\Job $job */ - public function setLastJob($job) { + public function setLastJob(IJob $job) { $i = array_search($job, $this->jobs); if ($i !== false) { $this->last = $i; @@ -104,7 +105,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * @param int $id - * @return Job + * @return IJob */ public function getById($id) { foreach ($this->jobs as $job) { @@ -127,9 +128,12 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * set the lastRun of $job to now * - * @param \OC\BackgroundJob\Job $job + * @param IJob $job */ - public function setLastRun($job) { + public function setLastRun(IJob $job) { $job->setLastRun(time()); } + + public function setExecutionTime(IJob $job, $timeTaken) { + } } diff --git a/version.php b/version.php index 0d1d327cb7f..011c693d7b3 100644 --- a/version.php +++ b/version.php @@ -26,7 +26,7 @@ // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = array(12, 0, 0, 14); +$OC_Version = array(12, 0, 0, 15); // The human readable string $OC_VersionString = '12.0 alpha'; |