mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-06-19 10:46:48 +02:00
feat(maintenance): Perform the CRON migration in the migration file, and add an espilon for check safety
This commit is contained in:
parent
f0abbe0861
commit
3075bc9bd9
2 changed files with 28 additions and 6 deletions
|
@ -1,9 +1,30 @@
|
||||||
// Add column last_start_date to maintenance table
|
// Add column last_start_date to maintenance table
|
||||||
exports.up = function (knex) {
|
exports.up = async function (knex) {
|
||||||
return knex.schema
|
await knex.schema
|
||||||
.alterTable("maintenance", function (table) {
|
.alterTable("maintenance", function (table) {
|
||||||
table.datetime("last_start_date");
|
table.datetime("last_start_date");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Perform migration for recurring-interval strategy
|
||||||
|
const recurringMaintenances = await knex("maintenance").where({
|
||||||
|
strategy: "recurring-interval",
|
||||||
|
cron: "* * * * *"
|
||||||
|
}).select("id", "start_time");
|
||||||
|
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
const maintenanceUpdates = recurringMaintenances.map(async ({ start_time, id }) => {
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
const [ hourStr, minuteStr ] = start_time.split(":");
|
||||||
|
const hour = parseInt(hourStr, 10);
|
||||||
|
const minute = parseInt(minuteStr, 10);
|
||||||
|
|
||||||
|
const cron = `${minute} ${hour} * * *`;
|
||||||
|
|
||||||
|
await knex("maintenance")
|
||||||
|
.where({ id })
|
||||||
|
.update({ cron });
|
||||||
|
});
|
||||||
|
await Promise.all(maintenanceUpdates);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.down = function (knex) {
|
exports.down = function (knex) {
|
||||||
|
|
|
@ -219,8 +219,8 @@ class Maintenance extends BeanModel {
|
||||||
|
|
||||||
log.debug("maintenance", "Run maintenance id: " + this.id);
|
log.debug("maintenance", "Run maintenance id: " + this.id);
|
||||||
|
|
||||||
// 1.21.2 migration and 2.0.0-beta.4 migration
|
// 1.21.2 migration
|
||||||
if (!this.cron || this.strategy === "recurring-interval" && this.cron === "* * * * *") {
|
if (!this.cron) {
|
||||||
await this.generateCron();
|
await this.generateCron();
|
||||||
if (!this.timezone) {
|
if (!this.timezone) {
|
||||||
this.timezone = "UTC";
|
this.timezone = "UTC";
|
||||||
|
@ -281,7 +281,8 @@ class Maintenance extends BeanModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If last start date is set, it means the maintenance has been started before
|
// If last start date is set, it means the maintenance has been started before
|
||||||
let lastStartDate = dayjs(this.lastStartDate);
|
let lastStartDate = dayjs(this.lastStartDate)
|
||||||
|
.subtract(1.1, "hour"); // Subtract 1.1 hour to avoid issues with timezone differences
|
||||||
|
|
||||||
// Check if the interval is enough
|
// Check if the interval is enough
|
||||||
if (current.diff(lastStartDate, "day") < this.interval_day) {
|
if (current.diff(lastStartDate, "day") < this.interval_day) {
|
||||||
|
@ -447,7 +448,7 @@ class Maintenance extends BeanModel {
|
||||||
let array = this.start_time.split(":");
|
let array = this.start_time.split(":");
|
||||||
let hour = parseInt(array[0]);
|
let hour = parseInt(array[0]);
|
||||||
let minute = parseInt(array[1]);
|
let minute = parseInt(array[1]);
|
||||||
this.cron = minute + " " + hour + " * * *";
|
this.cron = `${minute} ${hour} * * *`;
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue