From f8e0c597312c3d940a7637b4f0c92a0b8e629ad5 Mon Sep 17 00:00:00 2001 From: Jeroen De Meerleer Date: Tue, 20 Jul 2021 16:29:03 +0200 Subject: [PATCH] ENHANCEMENT: Added retention value to jobs --- src/Repository/Job.php | 14 ++++++++----- src/Repository/Run.php | 40 +++++++++++++++++++++++++++--------- templates/job/add.html.twig | 10 +++++++++ templates/job/edit.html.twig | 6 ++++++ 4 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/Repository/Job.php b/src/Repository/Job.php index adcbd23..0aa6806 100644 --- a/src/Repository/Job.php +++ b/src/Repository/Job.php @@ -12,12 +12,13 @@ use phpseclib3\Net\SSH2; class Job extends Repository { - public function getAllJobs() + public function getAllJobs(bool $idiskey = false) { $jobsSql = "SELECT * FROM job"; $jobsStmt = $this->dbcon->prepare($jobsSql); $jobsRslt = $jobsStmt->executeQuery(); $jobs = $jobsRslt->fetchAllAssociative(); + $returnbyid = []; foreach ($jobs as $key=>&$job) { $job['data'] = json_decode($job['data'], true); $job['host-displayname'] = $job['data']['host']; @@ -28,7 +29,10 @@ class Job extends Repository if(!empty($job['data']['containertype']) && $job['data']['containertype'] != 'none') { $job['host-displayname'] = $job['data']['service'] . ' on ' . $job['data']['host']; } + if($idiskey) $returnbyid[$job['id']] = $job; } + + if($idiskey) return $returnbyid; array_multisort( array_column($jobs, 'name'), SORT_ASC, array_column($jobs, 'host'), SORT_ASC, @@ -379,6 +383,8 @@ class Job extends Repository } $values['nextrun'] = DateTime::createFromFormat('d/m/Y H:i:s', $values['nextrun'])->getTimestamp(); + $values['data']['retention'] = $values['retention']; + $values['data']['crontype'] = $values['crontype']; $values['data']['hosttype'] = $values['hosttype']; $values['data']['containertype'] = $values['containertype']; @@ -540,10 +546,8 @@ class Job extends Repository public function deleteJob(int $id) { - $addJobSql = "DELETE FROM job WHERE id = :id"; - - $addJobStmt = $this->dbcon->prepare($addJobSql); - $addJobStmt->executeQuery([':id' => $id]); + $this->dbcon->prepare("DELETE FROM job WHERE id = :id")->executeStatement([':id' => $id]); + $this->dbcon->prepare("DELETE FROM run WHERE job_id = :id")->executeStatement([':id' => $id]); return ['success' => true, 'message' => 'Cronjob succesfully deleted']; } diff --git a/src/Repository/Run.php b/src/Repository/Run.php index 42af71d..9904fa1 100644 --- a/src/Repository/Run.php +++ b/src/Repository/Run.php @@ -49,20 +49,40 @@ class Run extends Repository return $slowJob['average'] > $timelimit; } - public function cleanupRuns(array $jobids, int $maxage): int + public function cleanupRuns(array $jobids, int $maxage = NULL): int { - $sql = 'DELETE FROM run WHERE timestamp < :timestamp'; - $params[':timestamp'] = time() - ($maxage * 24 * 60 * 60); - if(!empty($jobids)) { - $jobidsql = []; - foreach($jobids as $key=>$jobid){ - $jobidsql[] = ':job' . $key; - $params[':job' . $key] = $jobid; + $jobRepo = new Job($this->dbcon); + $allJobs = $jobRepo->getAllJobs(true); + if(empty($jobids)) { + foreach($allJobs as $key=>$job) { + $jobids[] = $key; } - $sql .= ' AND job_id in (' . implode(',', $jobidsql) . ')'; } + $sqldelete = []; + if($maxage == NULL) { + foreach ($allJobs as $key=>$job) { + if(isset($job['data']['retention']) && in_array($key, $jobids)) { + $sqldelete[] = '( job_id = :job' . $key . ' AND timestamp < :timestamp' . $key . ')'; + $params[':job' . $key] = $key; + $params[':timestamp' . $key] = time() - ($job['data']['retention'] * 24 * 60 * 60); + } + } + } else { + $sqljobids = ''; + if(!empty($jobids)) { + $jobidsql = []; + foreach($jobids as $key=>$jobid){ + $jobidsql[] = ':job' . $key; + $params[':job' . $key] = $jobid; + } + $sqljobids = ' AND job_id in (' . implode(',', $jobidsql) . ')'; + } + $params[':timestamp'] = time() - ($maxage * 24 * 60 * 60); + $sqldelete[] = 'timestamp < :timestamp' . $sqljobids; + } + $sql = 'DELETE FROM run WHERE ' . implode(' OR ', $sqldelete); try { - return $this->dbcon->prepare($sql)->executeQuery($params)->rowCount(); + return $this->dbcon->prepare($sql)->executeStatement($params); } catch(Exception $exception) { throw $exception; } diff --git a/templates/job/add.html.twig b/templates/job/add.html.twig index 821749f..78f8b2b 100644 --- a/templates/job/add.html.twig +++ b/templates/job/add.html.twig @@ -5,10 +5,12 @@

General info

+
+
@@ -27,10 +29,12 @@
+
+
@@ -44,6 +48,12 @@
+
+ + + How many days (at least) to keep runs of this job in the database +
+

Job details

+
+ + + How many days (at least) to keep runs of this job in the database +
+

Job details