XNSim/XNSimHtml/routes/DDSMonitor.js
2025-05-15 10:56:49 +08:00

94 lines
2.6 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { initializeMonitor, cleanupMonitor } = require('../utils/systemMonitor');
// 存储监控服务的状态
let monitorStatus = {
isInitialized: false,
domainId: null,
lastError: null,
activeMonitors: new Set() // 添加活跃监控器集合
};
// 初始化监控服务
router.post('/initialize', async (req, res) => {
try {
const { domainId, monitorId } = req.body;
if (!domainId || !monitorId) {
return res.status(400).json({ error: '缺少必要的参数' });
}
// 如果已经初始化,检查是否是新的监控器
if (monitorStatus.isInitialized) {
if (monitorStatus.domainId !== domainId) {
return res.status(400).json({ error: 'DDS域ID不匹配' });
}
monitorStatus.activeMonitors.add(monitorId);
return res.json({
message: '监控器已注册',
status: monitorStatus
});
}
// 首次初始化
const result = initializeMonitor(domainId);
if (result && result.includes('失败')) {
monitorStatus.lastError = result;
return res.status(500).json({ error: result });
}
monitorStatus.isInitialized = true;
monitorStatus.domainId = domainId;
monitorStatus.lastError = null;
monitorStatus.activeMonitors.add(monitorId);
res.json({
message: '监控服务初始化成功',
status: monitorStatus
});
} catch (error) {
console.error('初始化监控服务失败:', error);
monitorStatus.lastError = error.message;
res.status(500).json({ error: '初始化监控服务失败', message: error.message });
}
});
// 注销监控器
router.post('/unregister', async (req, res) => {
try {
const { monitorId } = req.body;
if (!monitorId) {
return res.status(400).json({ error: '缺少必要的monitorId参数' });
}
monitorStatus.activeMonitors.delete(monitorId);
// 如果没有活跃的监控器了,清理资源
if (monitorStatus.activeMonitors.size === 0) {
cleanupMonitor();
monitorStatus = {
isInitialized: false,
domainId: null,
lastError: null,
activeMonitors: new Set()
};
}
res.json({
message: '监控器注销成功',
status: monitorStatus
});
} catch (error) {
console.error('注销监控器失败:', error);
res.status(500).json({ error: '注销监控器失败', message: error.message });
}
});
// 获取监控服务状态
router.get('/status', (req, res) => {
res.json(monitorStatus);
});
module.exports = router;