Files
Web_UploadTest_Rcu_Dev/src/loggerService.js
XuJiacheng fc134b0108 feat: 将批量升级改为逐个主机顺序升级并添加超时控制
- 修改升级流程,从同时触发所有主机改为逐个主机顺序触发和轮询
- 添加 session_id 字段到 upgrade_log 表以区分不同主机的升级会话
- 引入 upgradePollTimeoutSeconds 配置项控制单个主机轮询超时时间
- 添加数据库迁移脚本以更新表结构和主键约束
- 实现运行组状态跟踪,防止同一组并发执行
- 改进错误处理和日志记录,为每个主机独立记录升级结果
2026-01-23 18:22:05 +08:00

54 lines
1.5 KiB
JavaScript

const { v4: uuidv4 } = require('uuid');
const db = require('./db');
const logHostResult = async (data) => {
const entryId = uuidv4();
const query = `
INSERT INTO upgrade_log (
uuid, session_id, start_time, roomtype_id, host_str, filename, status,
end_time, file_type, config_version, firmware_version
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
`;
const values = [
entryId,
data.uuid,
data.start_time,
data.roomtype_id,
data.host_str,
data.filename,
data.status,
data.end_time,
data.file_type,
data.config_version,
data.firmware_version
];
await db.query(query, values);
};
const getUpgradeState = async (key) => {
const res = await db.query('SELECT * FROM upgrade_state WHERE state_key = $1', [key]);
if (res.rows.length > 0) {
return res.rows[0];
}
return null;
};
const updateUpgradeState = async (key, currentRoomtypeIndex, executionCount) => {
const query = `
INSERT INTO upgrade_state (state_key, current_roomtype_index, execution_count, last_updated)
VALUES ($1, $2, $3, NOW())
ON CONFLICT (state_key)
DO UPDATE SET
current_roomtype_index = EXCLUDED.current_roomtype_index,
execution_count = EXCLUDED.execution_count,
last_updated = NOW();
`;
await db.query(query, [key, currentRoomtypeIndex, executionCount]);
};
module.exports = {
logHostResult,
getUpgradeState,
updateUpgradeState
};