Updated croner to 8.1.0 and fixed "recurring-interval" type maintenance

This commit is contained in:
buzzinJohnnyBoi 2024-07-13 13:58:36 -04:00
parent 1a5a1a6e5d
commit d61688315d
3 changed files with 25 additions and 14 deletions

11
package-lock.json generated
View file

@ -24,7 +24,7 @@
"command-exists": "~1.2.9", "command-exists": "~1.2.9",
"compare-versions": "~3.6.0", "compare-versions": "~3.6.0",
"compression": "~1.7.4", "compression": "~1.7.4",
"croner": "~6.0.5", "croner": "^8.1.0",
"dayjs": "~1.11.5", "dayjs": "~1.11.5",
"dev-null": "^0.1.1", "dev-null": "^0.1.1",
"dotenv": "~16.0.3", "dotenv": "~16.0.3",
@ -6738,12 +6738,11 @@
} }
}, },
"node_modules/croner": { "node_modules/croner": {
"version": "6.0.7", "version": "8.1.0",
"resolved": "https://registry.npmjs.org/croner/-/croner-6.0.7.tgz", "resolved": "https://registry.npmjs.org/croner/-/croner-8.1.0.tgz",
"integrity": "sha512-k3Xx3Rcclfr60Yx4TmvsF3Yscuiql8LSvYLaphTsaq5Hk8La4Z/udmUANMOTKpgGGroI2F6/XOr9cU9OFkYluQ==", "integrity": "sha512-sz990XOUPR8dG/r5BRKMBd15MYDDUu8oeSaxFD5DqvNgHSZw8Psd1s689/IGET7ezxRMiNlCIyGeY1Gvxp/MLg==",
"license": "MIT",
"engines": { "engines": {
"node": ">=6.0" "node": ">=18.0"
} }
}, },
"node_modules/cronstrue": { "node_modules/cronstrue": {

View file

@ -89,7 +89,7 @@
"command-exists": "~1.2.9", "command-exists": "~1.2.9",
"compare-versions": "~3.6.0", "compare-versions": "~3.6.0",
"compression": "~1.7.4", "compression": "~1.7.4",
"croner": "~6.0.5", "croner": "^8.1.0",
"dayjs": "~1.11.5", "dayjs": "~1.11.5",
"dev-null": "^0.1.1", "dev-null": "^0.1.1",
"dotenv": "~16.0.3", "dotenv": "~16.0.3",

View file

@ -253,6 +253,10 @@ class Maintenance extends BeanModel {
duration = this.duration * 1000; duration = this.duration * 1000;
} }
if (duration === undefined && this.strategy === "recurring-interval") {
duration = this.duration * 1000;
}
UptimeKumaServer.getInstance().sendMaintenanceListByUserID(this.user_id); UptimeKumaServer.getInstance().sendMaintenanceListByUserID(this.user_id);
this.beanMeta.durationTimeout = setTimeout(() => { this.beanMeta.durationTimeout = setTimeout(() => {
@ -263,9 +267,20 @@ class Maintenance extends BeanModel {
}; };
// Create Cron // Create Cron
this.beanMeta.job = new Cron(this.cron, { if (this.strategy === "recurring-interval") {
timezone: await this.getTimezone(), const startDate = dayjs(this.startDate);
}, startEvent); const [ hour, minute ] = this.startTime.split(":");
const startDateTime = startDate.hour(hour).minute(minute);
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
interval: this.interval_day * 24 * 60 * 60,
startAt: startDateTime.toISOString(),
}, startEvent);
} else {
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
}, startEvent);
}
// Continue if the maintenance is still in the window // Continue if the maintenance is still in the window
let runningTimeslot = this.getRunningTimeslot(); let runningTimeslot = this.getRunningTimeslot();
@ -395,10 +410,7 @@ class Maintenance extends BeanModel {
} else if (!this.strategy.startsWith("recurring-")) { } else if (!this.strategy.startsWith("recurring-")) {
this.cron = ""; this.cron = "";
} else if (this.strategy === "recurring-interval") { } else if (this.strategy === "recurring-interval") {
let array = this.start_time.split(":"); this.cron = "* * * * *";
let hour = parseInt(array[0]);
let minute = parseInt(array[1]);
this.cron = minute + " " + hour + " */" + this.interval_day + " * *";
this.duration = this.calcDuration(); this.duration = this.calcDuration();
log.debug("maintenance", "Cron: " + this.cron); log.debug("maintenance", "Cron: " + this.cron);
log.debug("maintenance", "Duration: " + this.duration); log.debug("maintenance", "Duration: " + this.duration);