NEW FEATURE: added healthcheck
This commit is contained in:
parent
a5b81ce36a
commit
d33e200176
|
@ -3,6 +3,11 @@ default:
|
||||||
defaults:
|
defaults:
|
||||||
_controller: JeroenED\Webcron\Controller\JobController::defaultAction
|
_controller: JeroenED\Webcron\Controller\JobController::defaultAction
|
||||||
|
|
||||||
|
health:
|
||||||
|
path: '/health'
|
||||||
|
defaults:
|
||||||
|
_controller: JeroenED\Webcron\Controller\SiteController::HealthAction
|
||||||
|
|
||||||
login:
|
login:
|
||||||
path: '/login'
|
path: '/login'
|
||||||
defaults:
|
defaults:
|
||||||
|
|
|
@ -43,7 +43,7 @@ class DaemonCommand extends Command
|
||||||
throw new \InvalidArgumentException('Time limit has incorrect value');
|
throw new \InvalidArgumentException('Time limit has incorrect value');
|
||||||
}
|
}
|
||||||
$jobRepo->unlockJob();
|
$jobRepo->unlockJob();
|
||||||
|
touch($this->kernel->getCacheDir() . '/daemon-running.lock');
|
||||||
while(1) {
|
while(1) {
|
||||||
if($endofscript !== false && time() > $endofscript) break;
|
if($endofscript !== false && time() > $endofscript) break;
|
||||||
|
|
||||||
|
@ -85,6 +85,8 @@ class DaemonCommand extends Command
|
||||||
}
|
}
|
||||||
$output->writeln('Ended after ' . $timelimit . ' seconds');
|
$output->writeln('Ended after ' . $timelimit . ' seconds');
|
||||||
pcntl_wait($status);
|
pcntl_wait($status);
|
||||||
|
|
||||||
|
unlink($this->kernel->getCacheDir() . '/daemon-running.lock');
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace JeroenED\Webcron\Controller;
|
||||||
|
|
||||||
|
use JeroenED\Framework\Controller;
|
||||||
|
use JeroenED\Webcron\Repository\Job;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
|
||||||
|
class SiteController extends Controller
|
||||||
|
{
|
||||||
|
public function HealthAction()
|
||||||
|
{
|
||||||
|
global $kernel;
|
||||||
|
$jobRepo = new Job($this->getDbCon());
|
||||||
|
$return = [
|
||||||
|
"DaemonRunning" => file_exists($kernel->getCacheDir() . '/daemon-running.lock'),
|
||||||
|
"JobsTotal" => count($jobRepo->getAllJobs()),
|
||||||
|
"JobsDue" => count($jobRepo->getJobsDue()),
|
||||||
|
"JobsRunning" => count($jobRepo->getRunningJobs()),
|
||||||
|
"JobsFailing" => count($jobRepo->getFailingJobs()),
|
||||||
|
];
|
||||||
|
return new JsonResponse($return, $return['DaemonRunning'] ? 200 : 500);
|
||||||
|
}
|
||||||
|
}
|
|
@ -46,6 +46,40 @@ class Job extends Repository
|
||||||
return $failingjobs;
|
return $failingjobs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRunningJobs(bool $idiskey = false)
|
||||||
|
{
|
||||||
|
$runRepo = new Run($this->dbcon);
|
||||||
|
|
||||||
|
$jobsSql = "SELECT * FROM job WHERE running != 0;";
|
||||||
|
$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'];
|
||||||
|
$job['host'] = $job['data']['host'];
|
||||||
|
$job['service'] = $job['data']['service'] ?? '';
|
||||||
|
$job['norun'] = isset($job['lastrun']) && $job['nextrun'] > $job['lastrun'];
|
||||||
|
$job['running'] = $job['running'] != 0;
|
||||||
|
$failed = count($runRepo->getRunsForJob($job['id'], true, $job['data']['fail-days']));
|
||||||
|
$all = count($runRepo->getRunsForJob($job['id'], false, $job['data']['fail-days']));
|
||||||
|
$job['needschecking'] = $all > 0 && (($failed / $all) * 100) > $job['data']['fail-pct'];
|
||||||
|
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,
|
||||||
|
array_column($jobs, 'service'), SORT_ASC,
|
||||||
|
$jobs);
|
||||||
|
return $jobs;
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllJobs(bool $idiskey = false)
|
public function getAllJobs(bool $idiskey = false)
|
||||||
{
|
{
|
||||||
$runRepo = new Run($this->dbcon);
|
$runRepo = new Run($this->dbcon);
|
||||||
|
|
Loading…
Reference in New Issue