V0.21.17.250612_alpha:数据监控的CSV文件注入已能自动停止

This commit is contained in:
jinchao 2025-06-12 17:04:01 +08:00
parent cdb3c18361
commit 5b9bb35775
7 changed files with 76 additions and 2 deletions

Binary file not shown.

View File

@ -118,6 +118,11 @@ void CSVDataInjectThread::updateData()
}
}
bool CSVDataInjectThread::isRunning() const
{
return m_running;
}
void CSVDataInjectThread::threadFunc()
{
// 读取第一行数据

View File

@ -42,6 +42,8 @@ public:
*/
void updateData();
bool isRunning() const;
private:
/**
* @brief 线

View File

@ -651,6 +651,21 @@ int XNMONITORSERVER_EXPORT XN_InjectDataInterfaceFromCsv(const char *structName,
return 0;
}
int XN_GetCsvDataInjectStatus(char *infoMsg, int infoMsgSize)
{
if (g_csvDataInjectThread == nullptr) {
if (infoMsg && infoMsgSize > 0) {
strncpy(infoMsg, "CSV 注入线程已不存在", infoMsgSize - 1);
infoMsg[infoMsgSize - 1] = '\0';
}
return -1;
}
if (g_csvDataInjectThread->isRunning()) {
return 1;
}
return 0;
}
int XN_StopCsvDataInject(char *infoMsg, int infoMsgSize)
{
if (g_csvDataInjectThread == nullptr) {

View File

@ -412,6 +412,24 @@ class DataMonitor extends HTMLElement {
this.dataUpdateTimer = setInterval(async () => {
try {
// 检查CSV注入状态
if (this.csvState.isInjecting) {
const csvStatusResponse = await fetch('/api/data-monitor/csv-inject-status');
if (!csvStatusResponse.ok) {
throw new Error(`获取CSV注入状态失败: ${csvStatusResponse.status} ${csvStatusResponse.statusText}`);
}
const csvStatusData = await csvStatusResponse.json();
console.log('CSV注入状态:', csvStatusData.data);
// 如果状态为0触发停止注入
if (csvStatusData.data === 0) {
// 模拟点击停止CSV注入按钮
const csvInjectButton = this.shadowRoot.getElementById('csvInjectButton');
if (csvInjectButton) {
csvInjectButton.click();
}
}
}
// 检查DDS监控状态
const statusResponse = await fetch('/api/dds-monitor/status');
if (!statusResponse.ok) {

View File

@ -367,4 +367,18 @@ router.post('/stop-csv-inject', async (req, res) => {
}
});
/**
* @brief 获取CSV数据注入状态
* @route GET /api/data-monitor/csv-inject-status
* @returns {Object} 返回CSV数据注入状态
*/
router.get('/csv-inject-status', async (req, res) => {
try {
const result = systemMonitor.getCsvDataInjectStatus();
res.json({ success: true, data: result });
} catch (error) {
res.status(500).json({ success: false, message: `获取CSV数据注入状态失败: ${error.message}` });
}
});
module.exports = router;

View File

@ -61,7 +61,8 @@ try {
'XN_StartInjectContinuous': ['int', [StringType, 'int', StringType, 'int', 'double', StringType, 'int']],
'XN_StopInjectContinuous': ['int', [StringType, 'int', StringType, 'int']],
'XN_InjectDataInterfaceFromCsv': ['int', [StringType, 'int', StringType, 'int', StringType, 'int']],
'XN_StopCsvDataInject': ['int', [StringType, 'int']]
'XN_StopCsvDataInject': ['int', [StringType, 'int']],
'XN_GetCsvDataInjectStatus': ['int', [StringType, 'int']]
});
} catch (error) {
console.error(`加载 ${monitorLibName} 失败:`, error);
@ -482,6 +483,24 @@ function stopCsvDataInject() {
}
}
// 获取CSV数据注入状态
function getCsvDataInjectStatus() {
if (!monitorLib) {
return '监控服务器库未加载';
}
try {
const infoMsg = Buffer.alloc(1024);
const result = monitorLib.XN_GetCsvDataInjectStatus(infoMsg, infoMsg.length);
if (result === -1) {
return `获取状态失败: ${infoMsg.toString('utf8').replace(/\0/g, '')}`;
}
return result; // 直接返回result值
} catch (error) {
return `获取状态失败: ${error.message}`;
}
}
module.exports = {
loginLib,
monitorLib,
@ -507,5 +526,6 @@ module.exports = {
startInjectContinuous,
stopInjectContinuous,
injectDataInterfaceFromCsv,
stopCsvDataInject
stopCsvDataInject,
getCsvDataInjectStatus
};