add show crontab next 5 execution times

(cherry picked from commit 3a6b8bce14849516d4313427842a670b01903802)
This commit is contained in:
louyongjiu 2024-09-06 17:14:31 +08:00
parent 4276a2c203
commit 6248546e4b

View file

@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import cronstrue from 'cronstrue'; import cronstrue from 'cronstrue';
import { isValidCron } from 'cron-validator'; import { isValidCron } from 'cron-validator';
import { useStyleStore } from '@/stores/style.store';
import { parseExpression } from 'cron-parser'; import { parseExpression } from 'cron-parser';
import { useStyleStore } from '@/stores/style.store';
function isCronValid(v: string) { function isCronValid(v: string) {
return isValidCron(v, { allowBlankDay: true, alias: true, seconds: true }); return isValidCron(v, { allowBlankDay: true, alias: true, seconds: true });
@ -22,7 +22,7 @@ const helpers = [
{ {
symbol: '*', symbol: '*',
meaning: 'Any value', meaning: 'Any value',
example: '* * * *', example: '* * * *',
equivalent: 'Every minute', equivalent: 'Every minute',
}, },
{ {
@ -96,15 +96,12 @@ const helpers = [
function getLastExecutionTimes(cronExpression: string) { function getLastExecutionTimes(cronExpression: string) {
const interval = parseExpression(cronExpression); const interval = parseExpression(cronExpression);
const times = []; const times = [];
// Get the last five execution times
for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) {
times.push(interval.next().toJSON()); times.push(interval.next().toJSON());
} }
return times; return times;
} }
const cronString = computed(() => { const cronString = computed(() => {
if (isCronValid(cron.value)) { if (isCronValid(cron.value)) {
return cronstrue.toString(cron.value, cronstrueConfig); return cronstrue.toString(cron.value, cronstrueConfig);
@ -112,12 +109,11 @@ const cronString = computed(() => {
return ' '; return ' ';
}); });
const executionTimesString = computed(() => { const executionTimesString = computed(() => {
if (isCronValid(cron.value)) { if (isCronValid(cron.value)) {
const lastExecutionTimes = getLastExecutionTimes(cron.value); const lastExecutionTimes = getLastExecutionTimes(cron.value);
const executionTimesString = lastExecutionTimes.join('\n'); const executionTimesString = lastExecutionTimes.join('\n');
return `Next 5 execution times:\n${executionTimesString}`; return `Next 5 execution times:\n${executionTimesString}`;
} }
return ' '; return ' ';
}); });
@ -146,7 +142,9 @@ const cronValidationRules = [
{{ cronString }} {{ cronString }}
</div> </div>
<div class="cron-execution-string">{{ executionTimesString }}</div> <div class="cron-execution-string">
{{ executionTimesString }}
</div>
<n-divider /> <n-divider />