V0.21.17.250612_alpha:数据监控的CSV文件注入已能自动停止
This commit is contained in:
parent
cdb3c18361
commit
5b9bb35775
Binary file not shown.
@ -118,6 +118,11 @@ void CSVDataInjectThread::updateData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSVDataInjectThread::isRunning() const
|
||||||
|
{
|
||||||
|
return m_running;
|
||||||
|
}
|
||||||
|
|
||||||
void CSVDataInjectThread::threadFunc()
|
void CSVDataInjectThread::threadFunc()
|
||||||
{
|
{
|
||||||
// 读取第一行数据
|
// 读取第一行数据
|
||||||
|
@ -42,6 +42,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void updateData();
|
void updateData();
|
||||||
|
|
||||||
|
bool isRunning() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief 线程执行函数
|
* @brief 线程执行函数
|
||||||
|
@ -651,6 +651,21 @@ int XNMONITORSERVER_EXPORT XN_InjectDataInterfaceFromCsv(const char *structName,
|
|||||||
return 0;
|
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)
|
int XN_StopCsvDataInject(char *infoMsg, int infoMsgSize)
|
||||||
{
|
{
|
||||||
if (g_csvDataInjectThread == nullptr) {
|
if (g_csvDataInjectThread == nullptr) {
|
||||||
|
@ -412,6 +412,24 @@ class DataMonitor extends HTMLElement {
|
|||||||
|
|
||||||
this.dataUpdateTimer = setInterval(async () => {
|
this.dataUpdateTimer = setInterval(async () => {
|
||||||
try {
|
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监控状态
|
// 检查DDS监控状态
|
||||||
const statusResponse = await fetch('/api/dds-monitor/status');
|
const statusResponse = await fetch('/api/dds-monitor/status');
|
||||||
if (!statusResponse.ok) {
|
if (!statusResponse.ok) {
|
||||||
|
@ -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;
|
module.exports = router;
|
||||||
|
@ -61,7 +61,8 @@ try {
|
|||||||
'XN_StartInjectContinuous': ['int', [StringType, 'int', StringType, 'int', 'double', StringType, 'int']],
|
'XN_StartInjectContinuous': ['int', [StringType, 'int', StringType, 'int', 'double', StringType, 'int']],
|
||||||
'XN_StopInjectContinuous': ['int', [StringType, 'int', StringType, 'int']],
|
'XN_StopInjectContinuous': ['int', [StringType, 'int', StringType, 'int']],
|
||||||
'XN_InjectDataInterfaceFromCsv': ['int', [StringType, '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) {
|
} catch (error) {
|
||||||
console.error(`加载 ${monitorLibName} 失败:`, 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 = {
|
module.exports = {
|
||||||
loginLib,
|
loginLib,
|
||||||
monitorLib,
|
monitorLib,
|
||||||
@ -507,5 +526,6 @@ module.exports = {
|
|||||||
startInjectContinuous,
|
startInjectContinuous,
|
||||||
stopInjectContinuous,
|
stopInjectContinuous,
|
||||||
injectDataInterfaceFromCsv,
|
injectDataInterfaceFromCsv,
|
||||||
stopCsvDataInject
|
stopCsvDataInject,
|
||||||
|
getCsvDataInjectStatus
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user