feat: 实现统一日志系统和维护模式功能
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
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,
|
||||
};
|
||||
Reference in New Issue
Block a user