ENHANCEMENT: MOARRRRRRRRR
This commit is contained in:
parent
45a3160b52
commit
36052686e7
|
@ -245,4 +245,22 @@ class Job
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getRuns(): Collection|ArrayCollection
|
||||||
|
{
|
||||||
|
return $this->runs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $runs
|
||||||
|
* @return Job
|
||||||
|
*/
|
||||||
|
public function setRuns(Collection|ArrayCollection $runs): Job
|
||||||
|
{
|
||||||
|
$this->runs = $runs;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -295,29 +295,29 @@ class JobRepository extends EntityRepository
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function runRebootJob(array $job, float &$starttime, bool &$manual): array
|
private function runRebootJob(Job $job, float &$starttime, bool &$manual): array
|
||||||
{
|
{
|
||||||
if($job['running'] == 1) {
|
if($job->getRunning() == 1) {
|
||||||
$this->setTempVar($job['id'], 'starttime', $starttime);
|
$this->setTempVar($job->getId(), 'starttime', $starttime);
|
||||||
$this->setTempVar($job['id'], 'manual', $manual);
|
$this->setTempVar($job->getId(), 'manual', $manual);
|
||||||
$job['data']['reboot-command'] = str_replace('{reboot-delay}', $job['data']['reboot-delay'], $job['data']['reboot-command']);
|
$job->addData('reboot-command', str_replace('{reboot-delay}', $job['data']['reboot-delay'], $job->getData('reboot-command')));
|
||||||
$job['data']['reboot-command'] = str_replace('{reboot-delay-secs}', $job['data']['reboot-delay-secs'], $job['data']['reboot-command']);
|
$job->addData('reboot-command', str_replace('{reboot-delay-secs}', $job['data']['reboot-delay-secs'], $job->getData('reboot-command')));
|
||||||
|
|
||||||
if (!empty($job['data']['vars'])) {
|
if (!empty($job->getData('vars'))) {
|
||||||
foreach ($job['data']['vars'] as $key => $var) {
|
foreach ($job->getData('vars') as $key => $var) {
|
||||||
$job['data']['reboot-command'] = str_replace('{' . $key . '}', $var['value'], $job['data']['reboot-command']);
|
$job->addData('reboot-command', str_replace('{' . $key . '}', $var['value'], $job->getData('reboot-command')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$jobsSql = "UPDATE job SET running = :status WHERE id = :id";
|
$jobsSql = "UPDATE job SET running = :status WHERE id = :id";
|
||||||
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
||||||
$jobsStmt->executeQuery([':id' => $job['id'], ':status' => time() + $job['data']['reboot-delay-secs'] + ($job['data']['reboot-duration'] * 60)]);
|
$jobsStmt->executeQuery([':id' => $job->getId(), ':status' => time() + $job['data']['reboot-delay-secs'] + ($job['data']['reboot-duration'] * 60)]);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if($job['data']['hosttype'] == 'local') {
|
if($job->getData('hosttype') == 'local') {
|
||||||
$this->runLocalCommand($job['data']['reboot-command']);
|
$this->runLocalCommand($job->getData('reboot-command'));
|
||||||
} elseif($job['data']['hosttype'] == 'ssh') {
|
} elseif($job->getData('hosttype') == 'ssh') {
|
||||||
$this->runSshCommand($job['data']['reboot-command'], $job['data']['host'], $job['data']['user'], $job['data']['ssh-privkey'] ?? '', $job['data']['privkey-password'] ?? '');
|
$this->runSshCommand($job->getData('reboot-command'), $job->getData('host'), $job->getData('user'), $job->getData('ssh-privkey') ?? '', $job->getData('privkey-password') ?? '');
|
||||||
}
|
}
|
||||||
} catch (\RuntimeException $exception) {
|
} catch (\RuntimeException $exception) {
|
||||||
$return['exitcode'] = $exception->getCode();
|
$return['exitcode'] = $exception->getCode();
|
||||||
|
@ -327,29 +327,29 @@ class JobRepository extends EntityRepository
|
||||||
}
|
}
|
||||||
return ['status' => 'deferred'];
|
return ['status' => 'deferred'];
|
||||||
|
|
||||||
} elseif($job['running'] != 0) {
|
} elseif($job->getRunning() != 0) {
|
||||||
if($job['running'] > time()) {
|
if($job->getRunning() > time()) {
|
||||||
return ['status' => 'deferred'];
|
return ['status' => 'deferred'];
|
||||||
}
|
}
|
||||||
$starttime = (float)$this->getTempVar($job['id'], 'starttime');
|
$starttime = (float)$this->getTempVar($job->getId(), 'starttime');
|
||||||
$this->deleteTempVar($job['id'], 'starttime');
|
$this->deleteTempVar($job->getId(), 'starttime');
|
||||||
$manual = $this->getTempVar($job['id'], 'manual');
|
$manual = $this->getTempVar($job->getId(), 'manual');
|
||||||
$this->deleteTempVar($job['id'], 'manual');
|
$this->deleteTempVar($job->getId(), 'manual');
|
||||||
|
|
||||||
$jobsSql = "UPDATE job SET running = :status WHERE id = :id";
|
$jobsSql = "UPDATE job SET running = :status WHERE id = :id";
|
||||||
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
||||||
$jobsStmt->executeQuery([':id' => $job['id'], ':status' => 1]);
|
$jobsStmt->executeQuery([':id' => $job->getId(), ':status' => 1]);
|
||||||
|
|
||||||
if (!empty($job['data']['vars'])) {
|
if (!empty($job->getData('vars'))) {
|
||||||
foreach ($job['data']['vars'] as $key => $var) {
|
foreach ($job->getData('vars') as $key => $var) {
|
||||||
$job['data']['getservices-command'] = str_replace('{' . $key . '}', $var['value'], $job['data']['getservices-command']);
|
$job->addData('getservices-command', str_replace('{' . $key . '}', $var['value'], $job->getData('getservices-command')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if($job['data']['hosttype'] == 'local') {
|
if($job->getData('hosttype') == 'local') {
|
||||||
$return = $this->runLocalCommand($job['data']['getservices-command']);
|
$return = $this->runLocalCommand($job->getData('getservices-command'));
|
||||||
} elseif($job['data']['hosttype'] == 'ssh') {
|
} elseif($job->getData('hosttype') == 'ssh') {
|
||||||
$return = $this->runSshCommand($job['data']['getservices-command'], $job['data']['host'], $job['data']['user'], $job['data']['ssh-privkey'] ?? '', $job['data']['privkey-password'] ?? '');
|
$return = $this->runSshCommand($job->getData('getservices-command'), $job->getData('host'), $job->getData('user'), $job->getData('ssh-privkey') ?? '', $job->getData('privkey-password') ?? '');
|
||||||
}
|
}
|
||||||
} catch (\RuntimeException $exception) {
|
} catch (\RuntimeException $exception) {
|
||||||
$return['exitcode'] = $exception->getCode();
|
$return['exitcode'] = $exception->getCode();
|
||||||
|
@ -357,21 +357,22 @@ class JobRepository extends EntityRepository
|
||||||
$return['failed'] = true;
|
$return['failed'] = true;
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
$return['failed'] = !in_array($return['exitcode'], $job['data']['getservices-response']);
|
$return['failed'] = !in_array($return['exitcode'], $job->getData('getservices-response'));
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
return ['success' => false, 'message' => 'You probably did something clearly wrong'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function runNow($job, $console = false) {
|
public function runNow($job, $console = false) {
|
||||||
$job = $this->getJob($job, true);
|
$job = $this->getJob($job, true);
|
||||||
$runRepo = $this->getEntityManager()->getRepository(Run::class);
|
$runRepo = $this->getEntityManager()->getRepository(Run::class);
|
||||||
|
|
||||||
if($console == false && ($runRepo->isSlowJob($job['id']) || count($runRepo->getRunsForJob($job['id'])) == 0 || $job['data']['crontype'] === 'reboot')) {
|
if($console == false && ($runRepo->isSlowJob($job->getId()) || count($job->getRuns()) == 0 || $job->getData('crontype') === 'reboot')) {
|
||||||
$jobsSql = "UPDATE job SET running = :status WHERE id = :id AND running IN (0,1,2)";
|
$jobsSql = "UPDATE job SET running = :status WHERE id = :id AND running IN (0,1,2)";
|
||||||
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
$jobsStmt = $this->getEntityManager()->getConnection()->prepare($jobsSql);
|
||||||
$jobsStmt->executeQuery([':id' => $job['id'], ':status' => 2]);
|
$jobsStmt->executeQuery([':id' => $job->getId(), ':status' => 2]);
|
||||||
} else {
|
} else {
|
||||||
$output = $this->runJob($job['id'], true);
|
$output = $this->runJob($job->getId(), true);
|
||||||
if(!(isset($output['status']) && $output['status'] == 'deferred'))
|
if(!(isset($output['status']) && $output['status'] == 'deferred'))
|
||||||
return [
|
return [
|
||||||
'status' => 'ran',
|
'status' => 'ran',
|
||||||
|
|
Loading…
Reference in New Issue