Files
NetMesh/electron/bridges/inspection/adapterRegistry.cjs
zhaolei c64e00d835 feat: 新增设备巡检模块实现完整的巡检告警功能
新增设备巡检模块核心功能,包括:
- 巡检数据存储与调度系统
- 华为/H3C交换机及Linux服务器采集器
- 设备扩展配置与告警规则管理
- 主机详情页巡检配置入口
- 产品名称自定义设置功能
- 网络设备SSH exec通道兼容处理
2026-10-09 10:37:48 +08:00

96 lines
2.5 KiB
JavaScript
Raw 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.
"use strict";
/**
* 采集器注册表
*
* 自动注册 adapters 目录下的所有采集器,供调度器使用。
*
* 使用方式:
* const adapterRegistry = require("./adapterRegistry.cjs");
* const adapter = adapterRegistry.createAdapter("LinuxServerAdapter", connInfo, options);
*/
const fs = require("fs");
const path = require("path");
const BaseAdapter = require("./adapters/baseAdapter.cjs");
const ADAPTERS_DIR = path.join(__dirname, "adapters");
const registry = {};
/**
* 扫描 adapters 目录,自动注册所有采集器类
* (只注册已实现的文件,不存在的适配器不报错,留作后续扩展)
*/
function loadAdapters() {
if (!fs.existsSync(ADAPTERS_DIR)) return;
const files = fs.readdirSync(ADAPTERS_DIR);
for (const file of files) {
if (!file.endsWith(".cjs")) continue;
if (file === "baseAdapter.cjs") continue;
try {
const modulePath = path.join(ADAPTERS_DIR, file);
const AdapterClass = require(modulePath);
// 验证是否继承自 BaseAdapter
if (
typeof AdapterClass === "function" &&
AdapterClass.prototype instanceof BaseAdapter
) {
console.log(`[Inspection] 注册采集器: ${AdapterClass.name} (${file})`);
registry[AdapterClass.name] = AdapterClass;
} else {
console.warn(`[Inspection] ${file} 不是 BaseAdapter 子类,导出类型: ${typeof AdapterClass}`);
}
} catch (e) {
// 加载失败跳过(比如引用了不存在的模块)
console.error(`[Inspection] 加载采集器失败: ${file}`, e.message, e.stack);
}
}
}
// 启动时自动加载
loadAdapters();
/**
* 获取已注册的采集器列表
* @returns {string[]} 采集器类名列表
*/
function getRegisteredAdapters() {
return Object.keys(registry);
}
/**
* 检查采集器是否已注册
* @param {string} className
* @returns {boolean}
*/
function hasAdapter(className) {
return !!registry[className];
}
/**
* 创建采集器实例
* @param {string} className - 采集器类名(如 "LinuxServerAdapter")
* @param {object} connectionInfo - SSH 连接信息
* @param {object} [options] - 配置项
* @returns {BaseAdapter|null}
*/
function createAdapter(className, connectionInfo, options = {}) {
const AdapterClass = registry[className];
if (!AdapterClass) {
console.warn(`[Inspection] 未找到采集器: ${className}`);
return null;
}
return new AdapterClass(connectionInfo, options);
}
module.exports = {
loadAdapters,
getRegisteredAdapters,
hasAdapter,
createAdapter,
};