mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-09 01:50:06 +08:00
228 lines
7.3 KiB
Go
228 lines
7.3 KiB
Go
|
import { Cronjob } from '@/api/interface/cronjob';
|
||
|
import i18n from '@/lang';
|
||
|
import { loadZero } from '@/utils/util';
|
||
|
|
||
|
export const specOptions = [
|
||
|
{ label: i18n.global.t('cronjob.perMonth'), value: 'perMonth' },
|
||
|
{ label: i18n.global.t('cronjob.perWeek'), value: 'perWeek' },
|
||
|
{ label: i18n.global.t('cronjob.perDay'), value: 'perDay' },
|
||
|
{ label: i18n.global.t('cronjob.perHour'), value: 'perHour' },
|
||
|
{ label: i18n.global.t('cronjob.perNDay'), value: 'perNDay' },
|
||
|
{ label: i18n.global.t('cronjob.perNHour'), value: 'perNHour' },
|
||
|
{ label: i18n.global.t('cronjob.perNMinute'), value: 'perNMinute' },
|
||
|
{ label: i18n.global.t('cronjob.perNSecond'), value: 'perNSecond' },
|
||
|
];
|
||
|
export const weekOptions = [
|
||
|
{ label: i18n.global.t('cronjob.monday'), value: 1 },
|
||
|
{ label: i18n.global.t('cronjob.tuesday'), value: 2 },
|
||
|
{ label: i18n.global.t('cronjob.wednesday'), value: 3 },
|
||
|
{ label: i18n.global.t('cronjob.thursday'), value: 4 },
|
||
|
{ label: i18n.global.t('cronjob.friday'), value: 5 },
|
||
|
{ label: i18n.global.t('cronjob.saturday'), value: 6 },
|
||
|
{ label: i18n.global.t('cronjob.sunday'), value: 0 },
|
||
|
];
|
||
|
function loadWeek(i: number) {
|
||
|
for (const week of weekOptions) {
|
||
|
if (week.value === i) {
|
||
|
return week.label;
|
||
|
}
|
||
|
}
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
export function loadDefaultSpec(type: string) {
|
||
|
let item = {} as Cronjob.SpecObj;
|
||
|
switch (type) {
|
||
|
case 'shell':
|
||
|
item.specType = 'perWeek';
|
||
|
item.week = 1;
|
||
|
item.hour = 1;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'app':
|
||
|
item.specType = 'perDay';
|
||
|
item.hour = 2;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'database':
|
||
|
item.specType = 'perDay';
|
||
|
item.hour = 2;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'clean':
|
||
|
case 'website':
|
||
|
item.specType = 'perWeek';
|
||
|
item.week = 1;
|
||
|
item.hour = 1;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'log':
|
||
|
case 'snapshot':
|
||
|
item.specType = 'perWeek';
|
||
|
item.week = 1;
|
||
|
item.hour = 1;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'directory':
|
||
|
item.specType = 'perDay';
|
||
|
item.hour = 1;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
case 'curl':
|
||
|
item.specType = 'perWeek';
|
||
|
item.week = 1;
|
||
|
item.hour = 1;
|
||
|
item.minute = 30;
|
||
|
break;
|
||
|
}
|
||
|
return item;
|
||
|
}
|
||
|
|
||
|
export function checkScript(specType: string, week, day, hour, minute, second) {
|
||
|
switch (specType) {
|
||
|
case 'perMonth':
|
||
|
return day > 0 && day < 32 && hour >= 0 && hour < 24 && minute >= 0 && minute < 60;
|
||
|
case 'perWeek':
|
||
|
return week >= 0 && week < 7 && hour >= 0 && hour < 24 && minute >= 0 && minute < 60;
|
||
|
case 'perDay':
|
||
|
return hour >= 0 && hour < 24 && minute >= 0 && minute < 60;
|
||
|
case 'perHour':
|
||
|
return minute >= 0 && minute < 60;
|
||
|
case 'perNDay':
|
||
|
return day > 0 && day < 366 && hour >= 0 && hour < 24 && minute >= 0 && minute < 60;
|
||
|
case 'perNHour':
|
||
|
return hour > 0 && hour < 8784 && minute >= 0 && minute < 60;
|
||
|
case 'perNMinute':
|
||
|
return minute > 0 && minute < 527040;
|
||
|
case 'perNSecond':
|
||
|
return second > 0 && second < 31622400;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function transObjToSpec(specType: string, week, day, hour, minute, second): string {
|
||
|
switch (specType) {
|
||
|
case 'perMonth':
|
||
|
return `${minute} ${hour} ${day} * *`;
|
||
|
case 'perWeek':
|
||
|
return `${minute} ${hour} * * ${week}`;
|
||
|
case 'perNDay':
|
||
|
return `${minute} ${hour} */${day} * *`;
|
||
|
case 'perDay':
|
||
|
return `${minute} ${hour} * * *`;
|
||
|
case 'perNHour':
|
||
|
return `${minute} */${hour} * * *`;
|
||
|
case 'perHour':
|
||
|
return `${minute} * * * *`;
|
||
|
case 'perNMinute':
|
||
|
return `@every ${minute}m`;
|
||
|
case 'perNSecond':
|
||
|
return `@every ${second}s`;
|
||
|
default:
|
||
|
return '';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function transSpecToObj(spec: string) {
|
||
|
let specs = spec.split(' ');
|
||
|
let specItem = {
|
||
|
specType: 'perNMinute',
|
||
|
week: 0,
|
||
|
day: 0,
|
||
|
hour: 0,
|
||
|
minute: 0,
|
||
|
second: 0,
|
||
|
};
|
||
|
if (specs.length === 2) {
|
||
|
if (specs[1].indexOf('m') !== -1) {
|
||
|
specItem.specType = 'perNMinute';
|
||
|
specItem.minute = Number(specs[1].replaceAll('m', ''));
|
||
|
return specItem;
|
||
|
} else {
|
||
|
specItem.specType = 'perNSecond';
|
||
|
specItem.second = Number(specs[1].replaceAll('s', ''));
|
||
|
return specItem;
|
||
|
}
|
||
|
}
|
||
|
if (specs.length !== 5 || specs[0] === '*') {
|
||
|
return null;
|
||
|
}
|
||
|
specItem.minute = Number(specs[0]);
|
||
|
if (specs[1] === '*') {
|
||
|
specItem.specType = 'perHour';
|
||
|
return specItem;
|
||
|
}
|
||
|
if (specs[1].indexOf('*/') !== -1) {
|
||
|
specItem.specType = 'perNHour';
|
||
|
specItem.hour = Number(specs[1].replaceAll('*/', ''));
|
||
|
return specItem;
|
||
|
}
|
||
|
specItem.hour = Number(specs[1]);
|
||
|
if (specs[2].indexOf('*/') !== -1) {
|
||
|
specItem.specType = 'perNDay';
|
||
|
specItem.day = Number(specs[2].replaceAll('*/', ''));
|
||
|
return specItem;
|
||
|
}
|
||
|
if (specs[2] !== '*') {
|
||
|
specItem.specType = 'perMonth';
|
||
|
specItem.day = Number(specs[2]);
|
||
|
return specItem;
|
||
|
}
|
||
|
if (specs[4] !== '*') {
|
||
|
specItem.specType = 'perWeek';
|
||
|
specItem.week = Number(specs[4]);
|
||
|
return specItem;
|
||
|
}
|
||
|
specItem.specType = 'perDay';
|
||
|
return specItem;
|
||
|
}
|
||
|
|
||
|
export function transSpecToStr(spec: string): string {
|
||
|
const specObj = transSpecToObj(spec);
|
||
|
let str = '';
|
||
|
if (specObj.specType.indexOf('N') === -1 || specObj.specType === 'perWeek') {
|
||
|
str += i18n.global.t('cronjob.' + specObj.specType) + ' ';
|
||
|
} else {
|
||
|
str += i18n.global.t('cronjob.per') + ' ';
|
||
|
}
|
||
|
switch (specObj.specType) {
|
||
|
case 'perMonth':
|
||
|
str +=
|
||
|
specObj.day +
|
||
|
i18n.global.t('cronjob.day') +
|
||
|
' ' +
|
||
|
loadZero(specObj.hour) +
|
||
|
':' +
|
||
|
loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perWeek':
|
||
|
str += loadWeek(specObj.week) + ' ' + loadZero(specObj.hour) + ':' + loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perDay':
|
||
|
str += loadZero(specObj.hour) + ':' + loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perNDay':
|
||
|
str +=
|
||
|
specObj.day +
|
||
|
i18n.global.t('commons.units.day') +
|
||
|
', ' +
|
||
|
loadZero(specObj.hour) +
|
||
|
':' +
|
||
|
loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perNHour':
|
||
|
str += specObj.hour + i18n.global.t('commons.units.hour') + ', ' + loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perHour':
|
||
|
str += loadZero(specObj.minute);
|
||
|
break;
|
||
|
case 'perNMinute':
|
||
|
str += loadZero(specObj.minute) + i18n.global.t('commons.units.minute');
|
||
|
break;
|
||
|
case 'perNSecond':
|
||
|
str += loadZero(specObj.second) + i18n.global.t('commons.units.second');
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return str + ' ' + i18n.global.t('cronjob.handle');
|
||
|
}
|