Files
yunrui_asset/backend/utils/maintenanceMode.js
T

80 lines
1.8 KiB
JavaScript
Raw Normal View History

const logger = require('./logger').module('MaintenanceMode');
const MAINTENANCE_TIMEOUT_MS = 30 * 60 * 1000;
const MaintenanceMode = {
isActive: false,
startTime: null,
reason: null,
allowedRoutes: ['/api/backup', '/api/auth', '/api/maintenance'],
};
let timeoutTimer = null;
function clearTimeoutTimer() {
if (timeoutTimer) {
clearTimeout(timeoutTimer);
timeoutTimer = null;
}
}
function isTimedOut() {
if (!MaintenanceMode.startTime) return false;
return Date.now() - MaintenanceMode.startTime.getTime() > MAINTENANCE_TIMEOUT_MS;
}
function enableMaintenanceMode(reason = '系统维护中') {
clearTimeoutTimer();
MaintenanceMode.isActive = true;
MaintenanceMode.startTime = new Date();
MaintenanceMode.reason = reason;
timeoutTimer = setTimeout(() => {
if (MaintenanceMode.isActive) {
logger.warn('维护模式超时,自动解除', {
reason: MaintenanceMode.reason,
startTime: MaintenanceMode.startTime,
});
disableMaintenanceMode();
}
}, MAINTENANCE_TIMEOUT_MS);
logger.info('维护模式已启用', { reason });
}
function disableMaintenanceMode() {
clearTimeoutTimer();
MaintenanceMode.isActive = false;
MaintenanceMode.reason = null;
MaintenanceMode.startTime = null;
logger.info('维护模式已解除');
}
function isMaintenanceModeActive() {
if (MaintenanceMode.isActive && isTimedOut()) {
disableMaintenanceMode();
return false;
}
return MaintenanceMode.isActive;
}
function getMaintenanceStatus() {
return {
active: MaintenanceMode.isActive,
reason: MaintenanceMode.reason,
startTime: MaintenanceMode.startTime,
timeoutMs: MAINTENANCE_TIMEOUT_MS,
};
}
module.exports = {
MaintenanceMode,
enableMaintenanceMode,
disableMaintenanceMode,
isMaintenanceModeActive,
getMaintenanceStatus,
};