From fa978902c778185642cce19c48f23b3396992019 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Wed, 25 May 2016 11:55:18 +0200 Subject: [PATCH] DirectorJob: add run helper, support timeperiods --- library/Director/Objects/DirectorJob.php | 45 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/library/Director/Objects/DirectorJob.php b/library/Director/Objects/DirectorJob.php index 18c0373f..1443581d 100644 --- a/library/Director/Objects/DirectorJob.php +++ b/library/Director/Objects/DirectorJob.php @@ -3,9 +3,12 @@ namespace Icinga\Module\Director\Objects; use Icinga\Module\Director\Data\Db\DbObjectWithSettings; +use Icinga\Module\Director\Hook\JobHook; class DirectorJob extends DbObjectWithSettings { + protected $job; + protected $table = 'director_job'; protected $keyName = 'id'; @@ -22,27 +25,65 @@ class DirectorJob extends DbObjectWithSettings 'ts_last_attempt' => null, 'ts_last_error' => null, 'last_error_message' => null, + 'timeperiod_id' => null, ); protected $settingsTable = 'director_job_setting'; protected $settingsRemoteId = 'job_id'; + public function job() + { + if ($this->job === null) { + $class = $this->job_class; + $this->job = new $class; + $this->job->setDb($this->connection); + } + + return $this->job; + } + + public function run() + { + $this->job()->setDefinition($this)->run(); + } + public function isPending() { if ($this->ts_last_attempt === null) { - return true; + return $this->isWithinTimeperiod(); } if (strtotime($this->unixts_last_attempt) + $this->run_interval < time()) { - return true; + return $this->isWithinTimeperiod(); } return false; } + public function isWithinTimeperiod() + { + if ($this->hasTimeperiod()) { + if (! $this->timeperiod()->isActive()) { + return false; + } + } else { + return true; + } + } + public function lastAttemptSucceeded() { return $this->last_attempt_succeeded === 'y'; } + + public function hasTimeperiod() + { + return $this->timeperiod_id !== null; + } + + protected function timeperiod() + { + return IcingaTimeperiod::load($this->timeperiod_id, $this->db); + } }