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;