XNSim/XNSimHtml/routes/DataMonitor.js

178 lines
5.7 KiB
JavaScript
Raw Normal View History

const express = require('express');
const router = express.Router();
const systemMonitor = require('../utils/systemMonitor');
/**
* @brief 启动数据监控
* @route POST /api/data-monitor/start
* @param {string} structName - 结构体名称
* @returns {Object} 返回启动结果
*/
router.post('/start', async (req, res) => {
try {
const { structName } = req.body;
if (!structName) {
return res.status(400).json({ success: false, message: '结构体名称不能为空' });
}
const result = systemMonitor.startDataMonitor(structName);
if (result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
res.json({ success: true, message: result });
} catch (error) {
res.status(500).json({ success: false, message: `启动数据监控失败: ${error.message}` });
}
});
/**
* @brief 停止数据监控
* @route POST /api/data-monitor/stop
* @param {string} structName - 结构体名称
* @returns {Object} 返回停止结果
*/
router.post('/stop', async (req, res) => {
try {
const { structName } = req.body;
if (!structName) {
return res.status(400).json({ success: false, message: '结构体名称不能为空' });
}
const result = systemMonitor.stopDataMonitor(structName);
if (result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
res.json({ success: true, message: result });
} catch (error) {
res.status(500).json({ success: false, message: `停止数据监控失败: ${error.message}` });
}
});
/**
* @brief 获取数据监控信息
* @route GET /api/data-monitor/info
* @param {string} structName - 结构体名称
* @param {string} interfaceName - 接口名称
* @param {number} [bufferSize=8192] - 数据缓冲区大小可选
* @returns {Object} 返回监控信息data字段包含解析后的JSON对象
*/
router.get('/info', async (req, res) => {
try {
const { structName, interfaceName, bufferSize } = req.query;
if (!structName || !interfaceName) {
return res.status(400).json({
success: false,
message: '结构体名称和接口名称不能为空'
});
}
const result = systemMonitor.getDataMonitorInfo(
structName,
interfaceName,
bufferSize ? parseInt(bufferSize) : undefined
);
if (typeof result === 'string' && result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
// 解析数据字符串为JSON对象
let parsedData;
try {
parsedData = JSON.parse(result.data);
} catch (parseError) {
return res.status(500).json({
success: false,
message: `数据解析失败: ${parseError.message}`
});
}
res.json({
success: true,
data: parsedData,
info: result.info
});
} catch (error) {
res.status(500).json({ success: false, message: `获取数据监控信息失败: ${error.message}` });
}
});
/**
* @brief 注入数据接口
* @route POST /api/data-monitor/inject
* @param {string} structName - 结构体名称
* @param {string} interfaceNameAndData - 接口名称和数据JSON字符串
* @returns {Object} 返回注入结果
*/
router.post('/inject', async (req, res) => {
try {
const { structName, interfaceNameAndData } = req.body;
if (!structName || !interfaceNameAndData) {
return res.status(400).json({
success: false,
message: '结构体名称和接口数据不能为空'
});
}
const result = systemMonitor.injectDataInterface(structName, interfaceNameAndData);
if (result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
res.json({ success: true, message: result });
} catch (error) {
res.status(500).json({ success: false, message: `注入数据接口失败: ${error.message}` });
}
});
/**
* @brief 启动持续注入数据
* @route POST /api/data-monitor/start-continuous
* @param {string} structName - 结构体名称
* @param {string} interfaceNameAndData - 接口名称和数据JSON字符串
* @param {number} frequency - 注入频率
* @returns {Object} 返回启动结果
*/
router.post('/start-continuous', async (req, res) => {
try {
const { structName, interfaceNameAndData, frequency } = req.body;
if (!structName || !interfaceNameAndData || frequency === undefined) {
return res.status(400).json({
success: false,
message: '结构体名称、接口数据和注入频率不能为空'
});
}
const result = systemMonitor.startInjectContinuous(structName, interfaceNameAndData, frequency);
if (result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
res.json({ success: true, message: result });
} catch (error) {
res.status(500).json({ success: false, message: `启动持续注入数据失败: ${error.message}` });
}
});
/**
* @brief 停止持续注入数据
* @route POST /api/data-monitor/stop-continuous
* @param {string} structName - 结构体名称
* @returns {Object} 返回停止结果
*/
router.post('/stop-continuous', async (req, res) => {
try {
const { structName } = req.body;
if (!structName) {
return res.status(400).json({ success: false, message: '结构体名称不能为空' });
}
const result = systemMonitor.stopInjectContinuous(structName);
if (result.includes('失败')) {
return res.status(500).json({ success: false, message: result });
}
res.json({ success: true, message: result });
} catch (error) {
res.status(500).json({ success: false, message: `停止持续注入数据失败: ${error.message}` });
}
});
module.exports = router;