diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9348c11..f0a6b9e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,7 @@
# Changelog
+## Version 1.2
+### New
+* Added timed scheduled runs
## Version 1.1
diff --git a/assets/js/job/Utils.js b/assets/js/job/Utils.js
index 1390c09..87055a1 100644
--- a/assets/js/job/Utils.js
+++ b/assets/js/job/Utils.js
@@ -9,4 +9,28 @@ Utils.initTags = () => {
})
}
+Utils.timepickerOptions = {
+ localization:{
+ locale: 'nl',
+ format: 'dd/MM/yyyy HH:mm:ss'
+ },
+ display: {
+ icons: {
+ time: 'icon-clock-o',
+ date: 'icon-calendar',
+ up: 'icon-arrow-up',
+ down: 'icon-arrow-down',
+ previous: 'icon-chevron-left',
+ next: 'icon-chevron-right',
+ today: 'icon-calendar-check-o',
+ clear: 'icon-delete',
+ close: 'icon-x',
+ },
+ components: {
+ seconds: true,
+ useTwentyfourHour: true
+ }
+ },
+}
+
export default Utils;
\ No newline at end of file
diff --git a/assets/js/job/addedit.js b/assets/js/job/addedit.js
index 098dbda..ad189f9 100644
--- a/assets/js/job/addedit.js
+++ b/assets/js/job/addedit.js
@@ -1,7 +1,6 @@
import 'bootstrap';
-import moment from 'moment';
-import * as tempusDominus from '@eonasdan/tempus-dominus/dist/js/tempus-dominus';
-import customDateFormat from '@eonasdan/tempus-dominus/dist/plugins/customDateFormat'
+import {TempusDominus,extend} from "@eonasdan/tempus-dominus";
+import customDateFormat from '@eonasdan/tempus-dominus/dist/plugins/customDateFormat';
import Utils from "./Utils";
document.addEventListener("readystatechange", event => {
@@ -18,34 +17,11 @@ document.addEventListener("readystatechange", event => {
}
});
-const timepickerOptions = {
- localization:{
- locale: 'nl',
- format: 'dd/MM/yyyy HH:mm:ss'
- },
- display: {
- icons: {
- time: 'icon-clock-o',
- date: 'icon-calendar',
- up: 'icon-arrow-up',
- down: 'icon-arrow-down',
- previous: 'icon-chevron-left',
- next: 'icon-chevron-right',
- today: 'icon-calendar-check-o',
- clear: 'icon-delete',
- close: 'icon-x',
- },
- components: {
- seconds: true,
- useTwentyfourHour: true
- }
- },
-}
function initDatePickers()
{
- tempusDominus.extend(customDateFormat);
- new tempusDominus.TempusDominus(document.querySelector('#nextrunselector'), timepickerOptions);
- new tempusDominus.TempusDominus(document.querySelector('#lastrunselector'), timepickerOptions);
+ extend(customDateFormat);
+ new TempusDominus(document.querySelector('#nextrunselector'), Utils.timepickerOptions);
+ new TempusDominus(document.querySelector('#lastrunselector'), Utils.timepickerOptions);
}
function initCronType()
diff --git a/assets/js/job/index.js b/assets/js/job/index.js
index 2ee08b7..899c63d 100644
--- a/assets/js/job/index.js
+++ b/assets/js/job/index.js
@@ -2,11 +2,14 @@ import {Modal} from 'bootstrap';
import image from '/assets/images/ajax-loader.gif'
import '/assets/scss/job/index.scss';
import Utils from "./Utils";
+import customDateFormat from '@eonasdan/tempus-dominus/dist/plugins/customDateFormat';
+import {DateTime,TempusDominus,extend} from "@eonasdan/tempus-dominus";
document.addEventListener("readystatechange", event => {
if(event.target.readyState === 'complete') {
initDeleteButtons();
- initRunNowButtons();
+ initRunButtons();
+ initTimepicker();
Utils.initTags();
}
});
@@ -27,55 +30,98 @@ function initDeleteButtons() {
}));
}
-function initRunNowButtons() {
- document.querySelectorAll('.runnow').forEach(elem => elem.addEventListener("click", event => {
+var selecttimedatepicker;
+function initTimepicker() {
+ extend(customDateFormat);
+ let modal = document.querySelector('#run_selecttime');
+ let datepickeroptions = Utils.timepickerOptions;
+ datepickeroptions.display.inline = true;
+ datepickeroptions.display.sideBySide = true;
+ datepickeroptions.restrictions = {
+ minDate: new Date()
+ };
+ selecttimedatepicker = new TempusDominus(document.querySelector('#selecttime_datepicker'), datepickeroptions);
+}
+function initRunButtons() {
+ document.querySelectorAll('.run').forEach(elem => elem.addEventListener("click", event => {
let me = event.currentTarget;
- let href = me.dataset.href;
-
- let runnowCnt = document.querySelector('.runnow-content');
- if(runnowCnt.querySelector('img') === null) {
- let loaderImg = document.createElement('img');
- loaderImg.src = image;
- runnowCnt.appendChild(loaderImg);
+ let norun = me.closest('tr').classList.contains('norun')
+ let maxdate = new DateTime(me.dataset.nextrun)
+ if (maxdate < new DateTime() ) {
+ if (norun) {
+ maxdate = undefined;
+ } else {
+ console.error('You cannot have to be run jobs in the past');
+ return;
+ }
}
- document.querySelector('.container-fluid').classList.add('blur');
- document.querySelector('.runnow-overlay').classList.add('d-block');
- document.querySelector('.runnow-overlay').classList.remove('d-none');
-
- fetch(href, { method: 'GET' })
- .then(response => response.json())
- .then(data => {
- let modal = document.querySelector('#runnow_result');
- modal.querySelector('.modal-title').innerHTML = data.title;
- if (data.status == 'deferred') {
- modal.querySelector('.modal-body').innerHTML = data.message;
- me.classList.add('disabled');
- let td = me.closest('td');
- td.querySelectorAll('.btn').forEach(btn => {
- btn.classList.add('btn-outline-success');
- btn.classList.remove('btn-outline-primary');
- btn.classList.remove('btn-outline-danger');
- })
-
-
- let tr = me.closest('tr');
- tr.classList.add('running');
- tr.classList.add('text-success');
- tr.classList.remove('norun');
- tr.classList.remove('text-danger');
- } else if (data.status == 'ran') {
- let content = '
' + data.message + '
'
- content += '' + data.output + ' '
-
- modal.querySelector('.modal-body').innerHTML = content;
- }
-
- var bsModal = new Modal('#runnow_result').show();
-
- document.querySelector('.container-fluid').classList.remove('blur');
- document.querySelector('.runnow-overlay').classList.remove('d-block');
- document.querySelector('.runnow-overlay').classList.add('d-none');
- })
+ selecttimedatepicker.updateOptions({
+ restrictions: {
+ maxDate: maxdate
+ }
+ })
+ selecttimedatepicker.viewDate = new DateTime();
+ var bsModal = new Modal('#run_selecttime');
+ bsModal.show();
+
+ document.querySelectorAll('.schedule').forEach(elem => elem.addEventListener("click", event => {
+ bsModal.hide();
+ let time = Math.floor(selecttimedatepicker.viewDate / 1000);
+ run(me, time);
+ }));
+ document.querySelectorAll('.run-now').forEach(elem => elem.addEventListener("click", event => {
+ bsModal.hide();
+ run(me);
+ }));
+ }));
+}
+function run(elem, time = 0) {
+ let href = elem.dataset.href;
+ if (time > 0) href = href + '/' + time.toString();
+
+ let runCnt = document.querySelector('.run-content');
+ if(runCnt.querySelector('img') === null) {
+ let loaderImg = document.createElement('img');
+ loaderImg.src = image;
+ runCnt.appendChild(loaderImg);
+ }
+ document.querySelector('.container-fluid').classList.add('blur');
+ document.querySelector('.run-overlay').classList.add('d-block');
+ document.querySelector('.run-overlay').classList.remove('d-none');
+
+ fetch(href, { method: 'GET' })
+ .then(response => response.json())
+ .then(data => {
+ let modal = document.querySelector('#run_result');
+ modal.querySelector('.modal-title').innerHTML = data.title;
+ if (data.status == 'deferred') {
+ modal.querySelector('.modal-body').innerHTML = data.message;
+ elem.classList.add('disabled');
+ let td = elem.closest('td');
+ td.querySelectorAll('.btn').forEach(btn => {
+ btn.classList.add('btn-outline-success');
+ btn.classList.remove('btn-outline-primary');
+ btn.classList.remove('btn-outline-danger');
+ })
+
+
+ let tr = elem.closest('tr');
+ tr.classList.add('running');
+ tr.classList.add('text-success');
+ tr.classList.remove('norun');
+ tr.classList.remove('text-danger');
+ } else if (data.status == 'ran') {
+ let content = '' + data.message + '
'
+ content += '' + data.output + ' '
+
+ modal.querySelector('.modal-body').innerHTML = content;
+ }
+
+ var runModal = new Modal('#run_result');
+ runModal.show();
+
+ document.querySelector('.container-fluid').classList.remove('blur');
+ document.querySelector('.run-overlay').classList.remove('d-block');
+ document.querySelector('.run-overlay').classList.add('d-none');
})
- )
}
\ No newline at end of file
diff --git a/assets/scss/job/index.scss b/assets/scss/job/index.scss
index 1c29d51..f35b756 100644
--- a/assets/scss/job/index.scss
+++ b/assets/scss/job/index.scss
@@ -1,5 +1,7 @@
-@import "/assets/scss/base";
-@import "/assets/scss/icons";
+@import "assets/scss/base";
+@import "assets/scss/icons";
+@import "/node_modules/@eonasdan/tempus-dominus/dist/css/tempus-dominus.css";
+@import "assets/scss/tempus-dominus-dark";
tr.norun td {
background-color: #f8d7da;
@@ -33,8 +35,8 @@ td.status-col {
filter: blur(3px);
}
-.runnow-overlay {
- .runnow-blur {
+.run-overlay {
+ .run-blur {
bottom: 0;
left: 0;
position: fixed;
@@ -43,7 +45,7 @@ td.status-col {
z-index: 1500;
}
- .runnow-content {
+ .run-content {
font-size: 10px;
height: 50px;
position: absolute;
@@ -54,4 +56,22 @@ td.status-col {
margin-left: -50px;
margin-top: -50px;
}
+}
+
+#run_selecttime {
+ .tempus-dominus-widget {
+ box-shadow: none;
+
+ &.timepicker-sbs {
+ width: 19em;
+
+ .td-row {
+ flex-direction: column;
+
+ .td-half {
+ width: 19em;
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/config/routes.yaml b/config/routes.yaml
index 832948d..9ee50f2 100644
--- a/config/routes.yaml
+++ b/config/routes.yaml
@@ -61,11 +61,14 @@ job_edit:
requirements:
id: \d+
-job_runnow:
- path: '/{_locale}/job/{id}/runnow'
- controller: App\Controller\JobController::runNowAction
+job_run:
+ path: '/{_locale}/job/{id}/run/{timestamp}'
+ controller: App\Controller\JobController::runAction
requirements:
id: \d+
+ timestamp: \d+
+ defaults:
+ timestamp: 0
job_add:
path: '/{_locale}/job/add'
diff --git a/src/Command/DaemonCommand.php b/src/Command/DaemonCommand.php
index 287019b..0cdf6ca 100644
--- a/src/Command/DaemonCommand.php
+++ b/src/Command/DaemonCommand.php
@@ -63,7 +63,7 @@ class DaemonCommand extends Command
$consolerun = $jobRepo->getTempVar($job, 'consolerun', false);
if($consolerun && !$rebootedself) continue;
}
- $manual = ($job->getRunning() == 2);
+ $manual = ($job->getRunning() > 1);
$jobRepo->setJobRunning($job, true);
$output->writeln('Running Job ' . $job->getId());
if($async) {
diff --git a/src/Command/RunCommand.php b/src/Command/RunCommand.php
index 6e2dc5c..4e3959c 100755
--- a/src/Command/RunCommand.php
+++ b/src/Command/RunCommand.php
@@ -47,14 +47,14 @@ class RunCommand extends Command
}
$jobRepo->setJobRunning($job, true);
$jobRepo->setTempVar($job, 'consolerun', true);
- $result = $jobRepo->runNow($job, true);
+ $result = $jobRepo->run($job, true);
if($job->getData('crontype') == 'reboot') {
$sleeping = true;
while($sleeping) {
if(time() >= $job->getRunning()) $sleeping = false;
sleep(1);
}
- $result = $jobRepo->runNow($job, true);
+ $result = $jobRepo->run($job, true);
}
$jobRepo->setJobRunning($job, false);
$jobRepo->setTempVar($job, 'consolerun', false);
diff --git a/src/Controller/JobController.php b/src/Controller/JobController.php
index 1116aa1..d78341b 100644
--- a/src/Controller/JobController.php
+++ b/src/Controller/JobController.php
@@ -81,30 +81,30 @@ class JobController extends AbstractController
}
}
- public function runNowAction(Request $request, ManagerRegistry $doctrine, TranslatorInterface $translator, int $id): JsonResponse
+ public function runAction(Request $request, ManagerRegistry $doctrine, TranslatorInterface $translator, int $id, int $timestamp): JsonResponse
{
if($request->getMethod() == 'GET') {
$jobRepo = $doctrine->getRepository(Job::class);
$job = $jobRepo->find($id);
- $runnowResult = $jobRepo->runNow($job);
- if ($runnowResult['success'] === NULL) {
+ $runResult = $jobRepo->run($job, false, $timestamp);
+ if ($runResult['success'] === NULL) {
$return = [
'status' => 'deferred',
'success' => NULL,
- 'title' => $translator->trans('job.index.runnow.deferred.title'),
- 'message' => $translator->trans('job.index.runnow.deferred.message')
+ 'title' => $translator->trans('job.index.run.deferred.title'),
+ 'message' => $translator->trans('job.index.run.deferred.message')
];
} else {
$return = [
'status' => 'ran',
- 'success' => $runnowResult['success'],
- 'title' => $runnowResult['success'] ? $translator->trans('job.index.runnow.ran.title.success') : $translator->trans('job.index.runnow.ran.title.failed'),
- 'message' => $translator->trans('job.index.runnow.ran.message', [
- '_runtime_' => number_format($runnowResult['runtime'], 3),
- '_exitcode_' => $runnowResult['exitcode']
+ 'success' => $runResult['success'],
+ 'title' => $runResult['success'] ? $translator->trans('job.index.run.ran.title.success') : $translator->trans('job.index.run.ran.title.failed'),
+ 'message' => $translator->trans('job.index.run.ran.message', [
+ '_runtime_' => number_format($runResult['runtime'], 3),
+ '_exitcode_' => $runResult['exitcode']
]),
- 'exitcode' => $runnowResult['exitcode'],
- 'output' => $runnowResult['output'],
+ 'exitcode' => $runResult['exitcode'],
+ 'output' => $runResult['output'],
];
}
return new JsonResponse($return);
diff --git a/src/Repository/JobRepository.php b/src/Repository/JobRepository.php
index bf85027..e45e9f1 100644
--- a/src/Repository/JobRepository.php
+++ b/src/Repository/JobRepository.php
@@ -142,7 +142,7 @@ class JobRepository extends EntityRepository
{
$em = $this->getEntityManager();
- if(in_array($job->getRunning(), [0,1,2])) $job->setRunning($status ? 1 : 0);
+ $job->setRunning($status ? 1 : 0);
$em->persist($job);
$em->flush();
@@ -320,7 +320,7 @@ class JobRepository extends EntityRepository
private function runRebootJob(Job &$job, float &$starttime, bool &$manual): array
{
$em = $this->getEntityManager();
- if($job->getRunning() == 1) {
+ if($this->getTempVar($job, 'rebooting', false) === false) {
if(isset($_ENV['DEMO_MODE']) && $_ENV['DEMO_MODE'] == 'true') {
$job->setRunning(time() + $job->getData('reboot-delay-secs') + ($job->getData('reboot-duration') * 60));
$em->persist($job);
@@ -341,6 +341,7 @@ class JobRepository extends EntityRepository
}
$job->setRunning(time() + $job->getData('reboot-delay-secs') + ($job->getData('reboot-duration') * 60));
+ $this->setTempVar($job, 'rebooting', true);
$em->persist($job);
$em->flush();
@@ -358,7 +359,7 @@ class JobRepository extends EntityRepository
}
return ['status' => 'deferred'];
- } elseif($job->getRunning() != 0) {
+ } elseif($this->getTempVar($job, 'rebooting', false) === true) {
if($job->getRunning() > time()) {
return ['status' => 'deferred'];
}
@@ -411,11 +412,15 @@ class JobRepository extends EntityRepository
* @return array
* @throws \Doctrine\DBAL\Exception
*/
- public function runNow(Job &$job, $console = false) {
+ public function run(Job &$job, $console = false, int $timestamp = 0)
+ {
$em = $this->getEntityManager();
$runRepo = $this->getEntityManager()->getRepository(Run::class);
-
- if($console == false && ($runRepo->isSlowJob($job)) || count($job->getRuns()) == 0 || $job->getData('crontype') === 'reboot') {
+ if ($timestamp > 0) {
+ $job->setRunning($timestamp);
+ $em->persist($job);
+ $em->flush();
+ } elseif($console == false && ($runRepo->isSlowJob($job)) || count($job->getRuns()) == 0 || $job->getData('crontype') === 'reboot') {
if(in_array($job->getRunning(), [0,1,2])) {
$job->setRunning(2);
$em->persist($job);
@@ -506,7 +511,6 @@ class JobRepository extends EntityRepository
} while ($nextrun < time());
$job->setNextrun($nextrun);
-
}
$this->deleteTempVar($job);
diff --git a/templates/job/index.html.twig b/templates/job/index.html.twig
index b1f3d6d..c9079df 100644
--- a/templates/job/index.html.twig
+++ b/templates/job/index.html.twig
@@ -25,7 +25,7 @@
{{ job.interval | interval }}
{{ job.nextrun | date("d/m/Y H:i:s") }}
-
+
@@ -34,7 +34,31 @@
{% endfor %}
-
+
+
@@ -55,10 +79,10 @@
{% endblock %}
{% block extrahtml %}
-
-
+
{% endblock %}
diff --git a/templates/job/view.html.twig b/templates/job/view.html.twig
index 5b338ef..e4619e4 100644
--- a/templates/job/view.html.twig
+++ b/templates/job/view.html.twig
@@ -1,5 +1,5 @@
{% extends "base.html.twig" %}
-{% block title %}{{ 'job.title' | trans({ '_jobname_': job.name }) }}{% endblock %}
+{% block title %}{{ 'job.view.title' | trans({ '_jobname_': job.name }) }}{% endblock %}
{% block content %}
{{ 'job.view.header' | trans({ '_jobname_': (job.name | parsetags) }) | raw }}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index d4b5acd..5de1869 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -161,26 +161,6 @@
job.index.table.headers.nextrun
Next run
-
- job.index.runnow.deferred.title
- Cronjob has been scheduled
-
-
- job.index.runnow.deferred.message
- Job was scheduled to be run. You will find the output soon in the job details
-
-
- job.index.runnow.ran.title.success
- Cronjob succesfully ran
-
-
- job.index.runnow.ran.title.failed
- Cronjob failed. Please check output below
-
-
- job.index.runnow.ran.message
- Cronjob ran in _runtime_ seconds with exit code _exitcode_
-
job.index.flashes.jobdeleted
Cronjob is successfully deleted
@@ -613,6 +593,46 @@
footer.source
Source
+
+ job.index.run.selecttime.header
+ When to run this job?
+
+
+ job.index.run.selecttime.description
+ Please select the time to run this job
+
+
+ job.index.run.selecttime.btnschedule.label
+ Schedule
+
+
+ job.index.run.selecttime.btnrunnow.label
+ Run now
+
+
+ job.index.run.ran.btnclose.label
+ Close
+
+
+ job.index.run.deferred.title
+ Cronjob has been scheduled
+
+
+ job.index.run.deferred.message
+ Job was scheduled to be run. You will find the output soon in the job details
+
+
+ job.index.run.ran.title.success
+ Cronjob succesfully ran
+
+
+ job.index.run.ran.title.failed
+ Cronjob failed. Please check output below
+
+
+ job.index.run.ran.message
+ Cronjob ran in _runtime_ seconds with exit code _exitcode_
+
+
+ job.index.flashes.jobdeleted
+ Cr0nj0b b succ3ssfuLLy d3L3t3d
+
title
W3bcr0n m4n4g3m3nt
@@ -161,30 +165,6 @@
job.index.table.headers.nextrun
N3xtrun
-
- job.index.runnow.deferred.title
- Cr0nj0b h4z b33n sch3duL3d
-
-
- job.index.runnow.deferred.message
- J0b wuz sch3duL3d 2 b run. j00 w1LL f1nd t3h 0utput s00n 1n t3h j0b d3t41Lz
-
-
- job.index.runnow.ran.title.success
- Cr0nj0b succ3sfuLLy r4n
-
-
- job.index.runnow.ran.title.failed
- Cr0nj0b f41L3d. PL34s3 ch3ck 0utput b3L0w
-
-
- job.index.runnow.ran.message
- Cr0nj0b r4n 1n _runtime_ s3c0ndz w1th 3x1t c0d3 _exitcode_
-
-
- job.index.flashes.jobdeleted
- Cr0nj0b b succ3ssfuLLy d3L3t3d
-
job.view.title
0v3rv13w 0f runz 4 _jobname_
@@ -613,6 +593,46 @@
footer.source
S0urc3
+
+ job.index.run.selecttime.header
+ Wh3n 2 run d1z j0b?
+
+
+ job.index.run.selecttime.description
+ PL34s3 s3L3ct t3h t1m3 2 run d1z j0b
+
+
+ job.index.run.selecttime.btnschedule.label
+ Sch3duL3
+
+
+ job.index.run.selecttime.btnrunnow.label
+ Run n0w
+
+
+ job.index.run.ran.btnclose.label
+ CL0s3
+
+
+ job.index.run.deferred.title
+ Cr0nj0b h4z b33n sch3duL3d
+
+
+ job.index.run.deferred.message
+ J0b wuz sch3duL3d 2 b run. j00 w1LL f1nd t3h 0utput s00n 1n t3h j0b d3t41Lz
+
+
+ job.index.run.ran.title.success
+ Cr0nj0b succ3sfuLLy r4n
+
+
+ job.index.run.ran.title.failed
+ Cr0nj0b f41L3d. PL34s3 ch3ck 0utput b3L0w
+
+
+ job.index.run.ran.message
+ Cr0nj0b r4n 1n _runtime_ s3c0ndz w1th 3x1t c0d3 _exitcode_
+
title
- webcROn managemnt
+ webcROn managemnt
header
- webcROn managemnt
+ webcROn managemnt
demomode.flashnotice
- tHIZ ApplicashuN R in deEMo mode?? changez iz persisTd in tEH dATabase but jobz iz not bean executd k?
+ tHIZ ApplicashuN R in deEMo mode?? changez iz persisTd in tEH dATabase but jobz iz not bean executd k?
demomode.credentials.header
- loGIN fr DEEmo mode
+ loGIN fr DEEmo mode
demomode.credentials.username
- oH hi username
+ oH hi username
demomode.credentials.password
- oh hi paswORD k?
+ oh hi paswORD k?
menu.overview
- ovrview plz?
+ ovrview plz?
menu.add
- ADD new cRONJob plz?
+ ADD new cRONJob plz?
menu.settings
- settingz
+ settingz
menu.logout
- oh hi logowt plz?
+ oh hi logowt plz?
security.login.username.label
- oH hi username
+ oH hi username
security.login.username.placeholder
- jeroen@example.com
+ __security.login.username.placeholder
security.login.password.label
- oh hi paswORD k?
+ oh hi paswORD k?
security.login.password.placeholder
- burgerz plz?
+ burgerz plz?
security.login.remember.label
- rememBr me
+ rememBr me
security.login.submit-btn.label
- login
+ login
settings.title
- settingz
+ settingz
settings.header
- settingz
-
-
- settings.flashes.inexistinglocale
- oh hi Language dus not EXIs plz?
-
-
- settings.flashes.localesaved
- LAnguage r savd k?
-
-
- settings.flashes.repeatpasswordnotok
- oh hi PASwordz iz not Ekwel
-
-
- settings.flashes.currentpassnotok
- paswordz r not correcT Plz?
-
-
- settings.flashes.passwordsaved
- paSWORd r SAVD
+ settingz
settings.password.header
- oh hi paswORD k?
+ oh hi paswORD k?
settings.password.current.label
- currnt paswoRD
+ currnt paswoRD
settings.password.current.placeholder
- burgerz plz?
+ burgerz plz?
settings.password.password.label
- new pasword
+ new pasword
settings.password.password.placeholder
- MOAr paswoRD
+ MOAr paswoRD
settings.password.repeat.label
- Repeet pasword plz?
+ Repeet pasword plz?
settings.password.repeat.placeholder
- MOAr paswoRD
+ MOAr paswoRD
settings.other.header
- othr settingz plz?
+ othr settingz plz?
settings.other.locale.label
- languagE
+ languagE
+
+
+ settings.submit.label
+ __settings.submit.label
+
+
+ job.index.title
+ __job.index.title
+
+
+ job.index.header
+ __job.index.header
+
+
+ job.index.table.headers.name
+ __job.index.table.headers.name
+
+
+ job.index.table.headers.host
+ __job.index.table.headers.host
+
+
+ job.index.table.headers.interval
+ __job.index.table.headers.interval
+
+
+ job.index.table.headers.nextrun
+ __job.index.table.headers.nextrun
+
+
+ job.view.title
+ __job.view.title
+
+
+ job.view.header
+ __job.view.header
+
+
+ job.view.edit
+ __job.view.edit
+
+
+ job.view.show.onlyfailed
+ __job.view.show.onlyfailed
+
+
+ job.view.show.all
+ __job.view.show.all
+
+
+ job.view.results.exitcode
+ __job.view.results.exitcode
+
+
+ job.view.results.runtime
+ __job.view.results.runtime
+
+
+ job.view.results.manual
+ __job.view.results.manual
+
+
+ job.view.results.noresults.failed
+ __job.view.results.noresults.failed
+
+
+ job.view.results.noresults.all
+ __job.view.results.noresults.all
+
+
+ job.edit.title
+ __job.edit.title
+
+
+ job.edit.header
+ __job.edit.header
+
+
+ job.add.title
+ __job.add.title
+
+
+ job.add.header
+ __job.add.header
+
+
+ job.addedit.generalinfo.header
+ __job.addedit.generalinfo.header
+
+
+ job.addedit.generalinfo.name.label
+ __job.addedit.generalinfo.name.label
+
+
+ job.addedit.generalinfo.name.placeholder
+ __job.addedit.generalinfo.name.placeholder
+
+
+ job.addedit.generalinfo.name.helptext
+ __job.addedit.generalinfo.name.helptext
+
+
+ job.addedit.generalinfo.interval.label
+ __job.addedit.generalinfo.interval.label
+
+
+ job.addedit.generalinfo.interval.placeholder
+ __job.addedit.generalinfo.interval.placeholder
+
+
+ job.addedit.generalinfo.interval.patterns.label
+ __job.addedit.generalinfo.interval.patterns.label
+
+
+ job.addedit.generalinfo.interval.patterns.minute
+ __job.addedit.generalinfo.interval.patterns.minute
+
+
+ job.addedit.generalinfo.interval.patterns.hour
+ __job.addedit.generalinfo.interval.patterns.hour
+
+
+ job.addedit.generalinfo.interval.patterns.day
+ __job.addedit.generalinfo.interval.patterns.day
+
+
+ job.addedit.generalinfo.interval.patterns.week
+ __job.addedit.generalinfo.interval.patterns.week
+
+
+ job.addedit.generalinfo.interval.patterns.4week
+ __job.addedit.generalinfo.interval.patterns.4week
+
+
+ job.addedit.generalinfo.nextrun.label
+ __job.addedit.generalinfo.nextrun.label
+
+
+ job.addedit.generalinfo.lastrun.label
+ __job.addedit.generalinfo.lastrun.label
+
+
+ job.addedit.generalinfo.lastrun.eternal.label
+ __job.addedit.generalinfo.lastrun.eternal.label
+
+
+ job.addedit.generalinfo.retention.label
+ __job.addedit.generalinfo.retention.label
+
+
+ job.addedit.generalinfo.retention.placeholder
+ __job.addedit.generalinfo.retention.placeholder
+
+
+ job.addedit.generalinfo.retention.helptext
+ __job.addedit.generalinfo.retention.helptext
+
+
+ job.addedit.generalinfo.failpercentage.label
+ __job.addedit.generalinfo.failpercentage.label
+
+
+ job.addedit.generalinfo.faildays.label
+ __job.addedit.generalinfo.faildays.label
+
+
+ job.addedit.generalinfo.faildays.placeholder
+ __job.addedit.generalinfo.faildays.placeholder
+
+
+ job.addedit.generalinfo.hostlabel.label
+ __job.addedit.generalinfo.hostlabel.label
+
+
+ job.addedit.generalinfo.hostlabel.placeholder
+ __job.addedit.generalinfo.hostlabel.placeholder
+
+
+ job.addedit.generalinfo.hostlabel.helptext
+ __job.addedit.generalinfo.hostlabel.helptext
+
+
+ job.addedit.jobdetails.header
+ __job.addedit.jobdetails.header
+
+
+ job.addedit.crontype.label
+ __job.addedit.crontype.label
+
+
+ job.addedit.crontype.command.label
+ __job.addedit.crontype.command.label
+
+
+ job.addedit.crontype.command.header
+ __job.addedit.crontype.command.header
+
+
+ job.addedit.crontype.command.command.label
+ __job.addedit.crontype.command.command.label
+
+
+ job.addedit.crontype.command.command.placeholder
+ __job.addedit.crontype.command.command.placeholder
+
+
+ job.addedit.crontype.command.response.label
+ __job.addedit.crontype.command.response.label
+
+
+ job.addedit.crontype.command.response.placeholder
+ __job.addedit.crontype.command.response.placeholder
+
+
+ job.addedit.crontype.reboot.label
+ __job.addedit.crontype.reboot.label
+
+
+ job.addedit.crontype.reboot.header
+ __job.addedit.crontype.reboot.header
+
+
+ job.addedit.crontype.reboot.reboot.command.label
+ __job.addedit.crontype.reboot.reboot.command.label
+
+
+ job.addedit.crontype.reboot.reboot.command.placeholder
+ __job.addedit.crontype.reboot.reboot.command.placeholder
+
+
+ job.addedit.crontype.reboot.reboot.command.helptext
+ __job.addedit.crontype.reboot.reboot.command.helptext
+
+
+ job.addedit.crontype.reboot.reboot.delay.label
+ __job.addedit.crontype.reboot.reboot.delay.label
+
+
+ job.addedit.crontype.reboot.reboot.delay.placeholder
+ __job.addedit.crontype.reboot.reboot.delay.placeholder
+
+
+ job.addedit.crontype.reboot.reboot.delay.helptext
+ __job.addedit.crontype.reboot.reboot.delay.helptext
+
+
+ job.addedit.crontype.reboot.reboot.duration.label
+ __job.addedit.crontype.reboot.reboot.duration.label
+
+
+ job.addedit.crontype.reboot.reboot.duration.placeholder
+ __job.addedit.crontype.reboot.reboot.duration.placeholder
+
+
+ job.addedit.crontype.reboot.reboot.duration.helptext
+ __job.addedit.crontype.reboot.reboot.duration.helptext
+
+
+ job.addedit.crontype.reboot.getservices.command.label
+ __job.addedit.crontype.reboot.getservices.command.label
+
+
+ job.addedit.crontype.reboot.getservices.command.placeholder
+ __job.addedit.crontype.reboot.getservices.command.placeholder
+
+
+ job.addedit.crontype.reboot.getservices.response.label
+ __job.addedit.crontype.reboot.getservices.response.label
+
+
+ job.addedit.crontype.reboot.getservices.response.placeholder
+ __job.addedit.crontype.reboot.getservices.response.placeholder
+
+
+ job.addedit.crontype.http.label
+ __job.addedit.crontype.http.label
+
+
+ job.addedit.crontype.http.header
+ __job.addedit.crontype.http.header
+
+
+ job.addedit.crontype.http.url.label
+ __job.addedit.crontype.http.url.label
+
+
+ job.addedit.crontype.http.url.placeholder
+ __job.addedit.crontype.http.url.placeholder
+
+
+ job.addedit.crontype.http.basic-auth.username.label
+ __job.addedit.crontype.http.basic-auth.username.label
+
+
+ job.addedit.crontype.http.basic-auth.username.placeholder
+ __job.addedit.crontype.http.basic-auth.username.placeholder
+
+
+ job.addedit.crontype.http.basic-auth.password.label
+ __job.addedit.crontype.http.basic-auth.password.label
+
+
+ job.addedit.crontype.http.basic-auth.password.placeholder
+ __job.addedit.crontype.http.basic-auth.password.placeholder
+
+
+ job.addedit.crontype.http.basic-auth.password.helptext
+ __job.addedit.crontype.http.basic-auth.password.helptext
+
+
+ job.addedit.crontype.http.response.label
+ __job.addedit.crontype.http.response.label
+
+
+ job.addedit.crontype.http.response.placeholder
+ __job.addedit.crontype.http.response.placeholder
+
+
+ job.addedit.hosttype.label
+ __job.addedit.hosttype.label
+
+
+ job.addedit.hosttype.local.label
+ __job.addedit.hosttype.local.label
+
+
+ job.addedit.hosttype.local.header
+ __job.addedit.hosttype.local.header
+
+
+ job.addedit.hosttype.local.nodetails
+ __job.addedit.hosttype.local.nodetails
+
+
+ job.addedit.hosttype.ssh.label
+ __job.addedit.hosttype.ssh.label
+
+
+ job.addedit.hosttype.ssh.header
+ __job.addedit.hosttype.ssh.header
+
+
+ job.addedit.hosttype.ssh.hostname.label
+ __job.addedit.hosttype.ssh.hostname.label
+
+
+ job.addedit.hosttype.ssh.hostname.placeholder
+ __job.addedit.hosttype.ssh.hostname.placeholder
+
+
+ job.addedit.hosttype.ssh.username.label
+ __job.addedit.hosttype.ssh.username.label
+
+
+ job.addedit.hosttype.ssh.username.placeholder
+ __job.addedit.hosttype.ssh.username.placeholder
+
+
+ job.addedit.hosttype.ssh.privatekey.label
+ __job.addedit.hosttype.ssh.privatekey.label
+
+
+ job.addedit.hosttype.ssh.privatekey.helptext
+ __job.addedit.hosttype.ssh.privatekey.helptext
+
+
+ job.addedit.hosttype.ssh.privatekey.keep.label
+ __job.addedit.hosttype.ssh.privatekey.keep.label
+
+
+ job.addedit.hosttype.ssh.passphrase.label
+ __job.addedit.hosttype.ssh.passphrase.label
+
+
+ job.addedit.hosttype.ssh.passphrase.placeholder
+ __job.addedit.hosttype.ssh.passphrase.placeholder
+
+
+ job.addedit.hosttype.ssh.passphrase.helptext
+ __job.addedit.hosttype.ssh.passphrase.helptext
+
+
+ job.addedit.containertype.label
+ __job.addedit.containertype.label
+
+
+ job.addedit.containertype.none.label
+ __job.addedit.containertype.none.label
+
+
+ job.addedit.containertype.docker.label
+ __job.addedit.containertype.docker.label
+
+
+ job.addedit.containertype.docker.header
+ __job.addedit.containertype.docker.header
+
+
+ job.addedit.containertype.docker.service.label
+ __job.addedit.containertype.docker.service.label
+
+
+ job.addedit.containertype.docker.service.placeholder
+ __job.addedit.containertype.docker.service.placeholder
+
+
+ job.addedit.containertype.docker.username.label
+ __job.addedit.containertype.docker.username.label
+
+
+ job.addedit.containertype.docker.username.placeholder
+ __job.addedit.containertype.docker.username.placeholder
+
+
+ job.addedit.variables.header
+ __job.addedit.variables.header
+
+
+ job.addedit.variables.secret.label
+ __job.addedit.variables.secret.label
+
+
+ job.addedit.variables.name.placeholder
+ __job.addedit.variables.name.placeholder
+
+
+ job.addedit.variables.value.placeholder
+ __job.addedit.variables.value.placeholder
+
+
+ job.addedit.variables.helptext
+ __job.addedit.variables.helptext
+
+
+ job.addedit.variables.add.label
+ __job.addedit.variables.add.label
+
+
+ job.addedit.submit.label
+ __job.addedit.submit.label
+
+
+ footer.title
+ __footer.title
+
+
+ footer.source
+ __footer.source
+
+
+ job.index.run.selecttime.header
+ __job.index.run.selecttime.header
+
+
+ job.index.run.selecttime.description
+ __job.index.run.selecttime.description
+
+
+ job.index.run.selecttime.btnschedule.label
+ __job.index.run.selecttime.btnschedule.label
+
+
+ job.index.run.selecttime.btnrunnow.label
+ __job.index.run.selecttime.btnrunnow.label
+
+
+ job.index.run.ran.btnclose.label
+ __job.index.run.ran.btnclose.label
+
+ job.index.flashes.jobdeleted
+ Taak werd succesvol verwijderd
+
title
Webcron management
@@ -161,30 +165,6 @@
job.index.table.headers.nextrun
Volgende uitvoering
-
- job.index.runnow.deferred.title
- Taak werd doorgestuurd naar de daemon
-
-
- job.index.runnow.deferred.message
- Taak werd doorgestuurd naar de daemon. De output vind u binnenkort in de taakdetails
-
-
- job.index.runnow.ran.title.success
- Taak werd succesvol uitgevoerd
-
-
- job.index.runnow.ran.title.failed
- Taak faalde. Hieronder vind u de output ter controle
-
-
- job.index.runnow.ran.message
- Taak werd in _runtime_ seconden uitgevoerd met resultaat _exitcode_
-
-
- job.index.flashes.jobdeleted
- Taak werd succesvol verwijderd
-
job.view.title
Overzicht van uitvoeringen van _jobname_
@@ -613,6 +593,46 @@
footer.source
Broncode
+
+ job.index.run.selecttime.header
+ Wanneer moet deze taak uitgevoerd worden?
+
+
+ job.index.run.selecttime.description
+ Gelieve de datum en tijd te selecteren om deze taak uit te voeren
+
+
+ job.index.run.selecttime.btnschedule.label
+ Plan
+
+
+ job.index.run.selecttime.btnrunnow.label
+ Nu uitvoeren
+
+
+ job.index.run.ran.btnclose.label
+ Sluiten
+
+
+ job.index.run.deferred.title
+ Taak werd doorgestuurd naar de daemon
+
+
+ job.index.run.deferred.message
+ Taak werd doorgestuurd naar de daemon. De output vind u binnenkort in de taakdetails
+
+
+ job.index.run.ran.title.success
+ Taak werd succesvol uitgevoerd
+
+
+ job.index.run.ran.title.failed
+ Taak faalde. Hieronder vind u de output ter controle
+
+
+ job.index.run.ran.message
+ Taak werd in _runtime_ seconden uitgevoerd met resultaat _exitcode_
+