Files
Web_UploadTest_Rcu_Dev/project.md
XuJiacheng 834ac02da5 feat: 添加可配置升级次数和优化日志时间戳
1. 在pm2.json中添加进程管理配置
2. 在YAML配置中增加upgrade_count字段控制升级次数
3. 修改升级逻辑支持N次升级后切换版本
4. 为API调用日志添加ISO时间戳
5. 更新项目文档说明可配置升级次数
2026-01-22 14:06:22 +08:00

67 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
根据约束帮我写一个nodejs的后端项目。这个项目需要实现以下的功能
1调用其他项目的API是一个升级接口等待返回。返回以后执行下一步。
2有返回值以后等待45秒调用第二个API获取到一个升级是否成功的状态如果调用失败或者返回空则在5分钟之内每30秒调用一次直到成功或者超时
3把上述所有信息记录到日志数据库中需要创建一个日志数据库和时序日志表
4项目需要用pm2部署需要在项目根目录下创建一个pm2.json文件配置好启动参数。
5项目需要在.env文件配置好所有的环境变量和升级参数。
6项目需要创建一个test_upgrade数据库数据库中需要有一个upgrade_log表用于记录升级日志。
7需要一个定时器每隔10分钟时间需要通过env配置文件修改调用升级接口。这里注意配置文件需要特殊设计因为可能需要同时对多个主机分多组进行升级每组主机的升级时间也可能是不同的需要根据实际情况进行配置roomtype_id应当是数组一个roomtype_id应当对应一组host_list_str每个host_list_str也应当是数组一组host_list_str对应2个fileName这里注意2个fileName是因为每一个版本需要连续升级N次N可配置默认为2然后切换另一个版本再升级N次再切换版本以此类推。每次升级最小升级单位是roomtype_id多个roomtype_id的情况下分别使用每一个roomtype_id和他对应的host_list_str以及fileName来调用接口进行下发。你需要设计好配置文件的结构并且给出一个案例。
环境:
Windows server 2022
nodejs 24.10.0
pm2 部署
升级接口:
https://www.boonlive-rcu.com/api/Upgrade_V2
Post方法form表单
参数:
roomtype_id=2 释义房型编号目前固定值需要通过env配置文件修改
host_list_str=[1,2,3] 释义:主机 编号ID 目前固定值需要通过env配置文件修改
fileName=1.bin 释义:固件的名字 目前固定值需要通过env配置文件修改
返回值:
{"IsSuccess":true,"Message":"升级中"} IsSuccess释义是否成功成功返回true失败返回false Message 释义:返回信息
查询升级完成接口:
https://www.boonlive-rcu.com/api/QueryUpdateHostProgressBar
post方法,form形式
参数:
HostIDList=[1,2,3] 释义:主机 编号ID 目前固定值需要通过env配置文件修改等同于升级接口的host_list_str
返回值:
{
"IsSuccess": true,
"Response": [ // 升级状态列表每个对象组是HostIDList中的一个主机的升级状态
{
"HostID": 12345, // 主机编号ID
"Upgrade_status": "升级就绪", // 升级状态枚举值升级就绪升级完成升级失败开始下载下载中下载完成校验中校验完成RCU升级中超时失败
"Upgrade_DateTime": "2026-01-20 09:18:57", // 升级时间格式yyyy-MM-dd HH:mm:ss
"UpgradeFileType": "固件升级", // 升级文件类型(枚举值:固件升级,配置升级)
"FileBlockTotalCount": 100, // 总块数
"FileCurrentNumber": 25, // 当前块数
"BaiFenBi": "25%", // 升级进度(百分比)
"FileName": "firmware_v1.2.bin", // 升级文件名
"Version": "1.2.0", // 固件版本号
"ConfiguraVersion": "2.1.0" // 配置版本号
}
]
}
上述内容里,需要记入数据库的字段有:
-1开始升级时间初次调用Upgrade_V2接口时间格式yyyy-MM-dd HH:mm:ss
-2roomtype_id (升级的房型编号)
-3host_str 升级的主机编号ID列表
-4fileName (升级的文件名)
-5升级状态成功或失败
-6查询到完成升级或者升级失败的时间记录5分钟内最后一次返回值的Upgrade_status时间格式yyyy-MM-dd HH:mm:ss若所有对象Upgrade_status都为升级完成或超时失败则直接结束不需要等待5分钟
-7升级文件类型固件升级或配置升级
-8配置版本号
-9固件版本号
-10其他你认为必要的字段
而且不是每次调用这个查询接口都写库只记录5分钟内最后一次返回值的Upgrade_status字段到status里如果所有对象的Upgrade_status都为升级完成或超时失败则直接结束不需要等待5分钟。
例如调用接口参数roomtype_id=2host_list_str=[1,2,3]。写库3行分别host_str是123。然后调用接口QueryUpdateHostProgressBar参数roomtype_id=2HostIDList=[1,2,3]。返回值里Response里的Upgrade_status字段为升级完成的那次调用里的信息记录到数据库逐个记录例如1为升级成功其余两个无记录则先记录1等2升级成功再记录2以此类推。这里需要用uuid来确保是同一次调用。每次调用Upgrade_V2都应该创建新的数据库行数据。
另外
需要把 https://www.boonlive-rcu.com/api 作为一个常量放在env配置文件中。
链接需要用到的PGSQL的字符串配置的env我已经放在了.env文件中。其他配置字段需要你根据实际情况添加。