fix parsing of cron pattern

in some old instances, we had "00 00  * * *" (note double space
and only 5 components).
This commit is contained in:
Girish Ramakrishnan
2025-11-18 09:58:38 +01:00
parent 2cb7b4d1ea
commit c5f97e8bb0
4 changed files with 63 additions and 71 deletions
@@ -3,7 +3,7 @@
import { ref, useTemplateRef, computed } from 'vue';
import { Radiobutton, Dialog, FormGroup, SingleSelect, MultiSelect } from '@cloudron/pankow';
import BackupSitesModel from '../models/BackupSitesModel.js';
import { cronDays, cronHours } from '../utils.js';
import { cronDays, cronHours, parseSchedule } from '../utils.js';
const emit = defineEmits([ 'success' ]);
@@ -76,16 +76,9 @@ defineExpose({
scheduleType.value = 'never';
} else {
scheduleType.value = 'pattern';
const tmp = site.value.schedule.split(' ');
const tmpHours = tmp[2].split(',');
const tmpDays = tmp[5].split(',');
if (tmpDays[0] === '*') days.value = cronDays.map((day) => { return day.id; });
else days.value = tmpDays.map((day) => { return parseInt(day, 10); });
if (tmpHours[0] === '*') hours.value = cronHours.map(h => h.id);
else hours.value = tmpHours.map((hour) => { return parseInt(hour, 10); });
const result = parseSchedule(site.value.schedule);
days.value = result.days; // Array of cronDays.id
hours.value = result.hours; // Array of cronHours.id
}
dialog.value.open();
+9 -34
View File
@@ -15,32 +15,13 @@ import AppsModel from '../models/AppsModel.js';
import UpdaterModel from '../models/UpdaterModel.js';
import TasksModel from '../models/TasksModel.js';
import DashboardModel from '../models/DashboardModel.js';
import { cronDays, cronHours } from '../utils.js';
import { cronDays, cronHours, prettySchedule, parseSchedule } from '../utils.js';
const appsModel = AppsModel.create();
const tasksModel = TasksModel.create();
const updaterModel = UpdaterModel.create();
const dashboardModel = DashboardModel.create();
function prettyAutoUpdateSchedule(pattern) {
if (!pattern) return '';
const tmp = pattern.split(' ');
if (tmp.length === 1) return tmp[0];
const hours = tmp[2].split(',');
const days = tmp[5].split(',');
const prettyDay = (days.length === 7 || days[0] === '*') ? 'Every day' : days.map((day) => { return cronDays[parseInt(day, 10)].name.substr(0, 3); }).join(', ');
try {
const prettyHour = hours.map((hour) => { return cronHours[parseInt(hour, 10)]; }).sort((a,b) => a.value - b.value).map(h => h.name).join(', ');
return prettyDay + ' at ' + prettyHour;
} catch (error) {
console.error('Unable to build pattern.', error);
return 'Custom pattern';
}
}
const inputDialog = useTemplateRef('inputDialog');
const updateDialog = useTemplateRef('updateDialog');
@@ -106,19 +87,13 @@ async function refreshPendingUpdateInfo() {
}
function onShowConfigure() {
configureType.value = configurePattern.value === 'never' ? 'never' : 'pattern';
const tmp = currentPattern.value.split(' ');
const hours = tmp[2] ? tmp[2].split(',') : [];
const days = tmp[5] ? tmp[5].split(',') : [];
if (days[0] === '*') configureDays.value = cronDays.map(day => { return day.id; });
else configureDays.value = days.map(day => { return parseInt(day, 10); });
try {
configureHours.value = hours.map(hour => { return parseInt(hour, 10); });
} catch (error) {
console.error('Error parsing hour', error);
if (currentPattern.value === 'never') {
configureType.value = 'never';
} else {
configureType.value = 'pattern';
const result = parseSchedule(currentPattern.value);
configureDays.value = result.days; // Array of cronDays.id
configureHours.value = result.hours; // Array of cronHours.id
}
configureDialog.value.open();
@@ -347,7 +322,7 @@ onMounted(async () => {
<SettingsItem v-if="ready">
<div>
<label>{{ $t('settings.updates.schedule') }}</label>
<span v-if="currentPattern !== 'never'">{{ prettyAutoUpdateSchedule(currentPattern) || '-' }}</span>
<span v-if="currentPattern !== 'never'">{{ prettySchedule(currentPattern) }}</span>
<span v-else>{{ $t('settings.updates.disabled') }}</span>
</div>
<div style="display: flex; align-items: center">