79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { defaultLogger } = require('../utils/logger');
|
|
|
|
// 创建logger实例
|
|
const logger = defaultLogger.child('SystemRouter');
|
|
|
|
/**
|
|
* 重启服务器
|
|
* POST /api/system/restart
|
|
*/
|
|
router.post('/restart', async (req, res) => {
|
|
try {
|
|
logger.info('收到重启请求');
|
|
|
|
// 立即返回响应,避免客户端等待超时
|
|
res.json({
|
|
success: true,
|
|
message: '服务器正在重启,请稍后刷新页面'
|
|
});
|
|
|
|
// 延迟执行重启,给响应时间发送
|
|
setTimeout(async () => {
|
|
try {
|
|
// 获取服务器实例(通过全局变量或其他方式)
|
|
const server = req.app.locals.serverInstance;
|
|
if (server && typeof server.restart === 'function') {
|
|
await server.restart();
|
|
} else {
|
|
logger.error('无法获取服务器实例或重启方法');
|
|
// 如果无法优雅重启,则退出进程让进程管理器重启
|
|
process.exit(1);
|
|
}
|
|
} catch (error) {
|
|
logger.error('重启失败:', error);
|
|
// 强制退出进程
|
|
process.exit(1);
|
|
}
|
|
}, 1000); // 延迟1秒执行重启
|
|
|
|
} catch (error) {
|
|
logger.error('处理重启请求失败:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 获取系统状态
|
|
* GET /api/system/status
|
|
*/
|
|
router.get('/status', (req, res) => {
|
|
try {
|
|
const status = {
|
|
uptime: process.uptime(),
|
|
memory: process.memoryUsage(),
|
|
version: process.version,
|
|
platform: process.platform,
|
|
arch: process.arch,
|
|
pid: process.pid,
|
|
timestamp: new Date().toISOString()
|
|
};
|
|
|
|
res.json({
|
|
success: true,
|
|
data: status
|
|
});
|
|
} catch (error) {
|
|
logger.error('获取系统状态失败:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router; |