env-manage-plugin
Version:
A dev env plugin that integrates an Express server with request proxying capabilities.
62 lines (61 loc) • 2.65 kB
JavaScript
import { AppError } from "../utils/errors.js";
import { logger } from "../utils/logger.js";
/**
* 代理自动启动器
* 负责在应用启动时检查并启动数据库中状态为运行的代理
*/
export class ProxyAutoStarter {
constructor(envRepo, proxyService) {
this.envRepo = envRepo;
this.proxyService = proxyService;
this.start();
}
/**
* 应用启动时执行的代理检查和启动逻辑
*/
async start() {
try {
logger.info("开始检查需要自动启动的代理...");
// 查询数据库中状态为"运行中"的代理
const runningProxies = this.envRepo.findAllByStatus("running");
if (runningProxies.length === 0) {
logger.info("没有需要自动启动的代理");
return;
}
logger.info(`发现${runningProxies.length}个状态为运行的代理,准备启动...`);
// 逐个启动代理,记录成功和失败的数量
let successCount = 0;
let failCount = 0;
// 使用for循环而非forEach以支持异步等待
for (const proxy of runningProxies) {
try {
logger.info(`正在启动代理 [${proxy.name}] (ID: ${proxy.id})`);
// 检查代理是否已经在运行(避免重复启动)
// await this.proxyService.handleStartServer({
// id: proxy.id,
// });
// if (isAlreadyRunning) {
// console.warn(`代理 [${proxy.name}] 已在运行,跳过启动`);
// successCount++;
// continue;
// }
// 启动代理
await this.proxyService.handleStartServer(proxy);
logger.info(`代理 [${proxy.name}] 启动成功`);
successCount++;
}
catch (error) {
logger.error(error, `代理 [${proxy.name}] (ID: ${proxy.id}) 启动失败:`);
failCount++;
}
}
// 输出启动结果统计
logger.info(`代理自动启动完成 - 成功: ${successCount}, 失败: ${failCount}, 总计: ${runningProxies.length}`);
}
catch (error) {
logger.error(error, "代理自动启动流程失败:");
// 根据实际需求决定是否抛出错误终止应用,或仅记录错误
throw new AppError("代理自动启动流程执行失败");
}
}
}