From 1b1f403a5da0a170480b7ff376cd28d1ac7a64e0 Mon Sep 17 00:00:00 2001 From: Noveen Sachdeva Date: Tue, 25 Apr 2017 17:39:58 +0200 Subject: [PATCH] Add duration of last job execution to the table --- cron.php | 2 -- db_structure.xml | 8 ++++++++ lib/private/BackgroundJob/Job.php | 10 ++++++++++ lib/private/BackgroundJob/JobList.php | 18 +++++++++++++++--- lib/public/BackgroundJob/IJobList.php | 17 +++++++++++++---- tests/lib/BackgroundJob/DummyJobList.php | 22 +++++++++++++--------- version.php | 2 +- 7 files changed, 60 insertions(+), 19 deletions(-) diff --git a/cron.php b/cron.php index f6c52446d3..74935db0da 100644 --- a/cron.php +++ b/cron.php @@ -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 ca832b6281..902fb56ade 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -1012,6 +1012,14 @@ false + + + execution_duration + integer + + true + + job_class_index diff --git a/lib/private/BackgroundJob/Job.php b/lib/private/BackgroundJob/Job.php index 726c66ef5d..cb9328f01b 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 0de5dfecc8..b0c580290e 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 fbc4619222..d7c2642712 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 6cc690fd55..fe8ca5aefe 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 0d1d327cb7..011c693d7b 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';