feat: 实现RCU固件升级服务核心功能

- 添加升级服务主逻辑,包括定时触发升级、状态查询和日志记录
- 实现数据库初始化脚本和日志表结构
- 添加PM2部署配置文件
- 实现环境变量配置系统
- 添加API客户端模块处理外部接口调用
- 实现升级状态轮询和超时处理机制
- 添加测试用例验证核心功能
This commit is contained in:
2026-01-21 13:34:42 +08:00
commit d04205ddba
23 changed files with 8788 additions and 0 deletions

45
scripts/init_db.js Normal file
View File

@@ -0,0 +1,45 @@
require('dotenv').config();
const { Client } = require('pg');
const fs = require('fs');
const path = require('path');
const getDbConfig = (database) => ({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database
});
const ensureDatabase = async () => {
const adminClient = new Client(getDbConfig('postgres'));
await adminClient.connect();
const dbName = process.env.DB_NAME;
const exists = await adminClient.query('SELECT 1 FROM pg_database WHERE datname = $1', [dbName]);
if (exists.rowCount === 0) {
await adminClient.query(`CREATE DATABASE ${dbName}`);
}
await adminClient.end();
};
const ensureSchema = async () => {
const dbClient = new Client(getDbConfig(process.env.DB_NAME));
await dbClient.connect();
const sqlPath = path.join(__dirname, 'init_db.sql');
const sql = fs.readFileSync(sqlPath, 'utf8');
await dbClient.query(sql);
await dbClient.end();
};
const run = async () => {
try {
await ensureDatabase();
await ensureSchema();
console.log('Database initialization complete.');
} catch (err) {
console.error('Database initialization failed:', err.message);
process.exit(1);
}
};
run();