Skip to content

插件可用的 RPC 接口

插件通过 server.call(method, params...) 调用系统的 JSON-RPC 2.0 方法(以管理员身份), 也可通过 server.registerRPC 注册自己的方法供前端和其他插件调用。

调用方式、参数编组与错误处理详见 server 模块。各方法的 参数与返回结构的完整文档见 RPC 接口

权限

server.call 需要 allowSystemRPC 权限,且调用以管理员身份执行——可以调用 全部 admin:* 方法(包括 admin:exec 等敏感操作)。请只声明真正需要的能力。

命名空间与可用方法

common:(通用)

方法说明
common:getNodes获取节点信息({uuid} 可选;返回单个 Client{[uuid]: Client}
common:getNodesLatestStatus获取节点最新状态({uuid} / {uuids} 可选)
common:getNodeRecentStatus获取节点最近状态记录列表({uuid}
common:getRecords按时间范围查询历史记录(负载或 Ping,支持指标筛选与点数上限)
common:getMe当前登录用户信息
common:getPublicInfo公开站点与运行配置
common:getVersion服务端版本与构建哈希

public:(公开)

方法说明
public:getMe当前用户(访客返回 Guest 占位)
public:getNodesInformation公开节点基本信息(隐藏节点/敏感字段已过滤)
public:getPublicSettings公开站点设置
public:getVersion服务端版本
public:getClientRecentRecords节点最近状态缓存
public:getRecordsByUUID按相对时间窗口查询单节点负载记录
public:getPingRecords按节点或任务查询 Ping 历史与统计
public:getPublicPingTasks公开 Ping 任务
public:listMetricDefinitions公开指标定义与保留策略
public:queryMetrics查询指标时间序列(支持聚合、标签筛选、填充空桶)
public:getPingMetricStatsPing 延迟/丢包/分位数统计
public:recordVisitorEvent上报访客事件

admin:(管理,完整列表)

方法说明
admin:addClient / editClient / removeClient / getClient / listClients / getClientToken / orderClients节点管理
admin:clearRecords / clearAllRecords清空历史记录
admin:getTasks / getTaskById / getTasksByClientId / getSpecificTaskResult / getTaskResultsByTaskId / exec远程执行任务
admin:addPingTask / deletePingTask / editPingTask / getAllPingTasks / orderPingTaskPing 任务
admin:addLoadNotification / deleteLoadNotification / editLoadNotification / getAllLoadNotifications负载通知
admin:listOfflineNotifications / editOfflineNotification / enableOfflineNotification / disableOfflineNotification离线通知
admin:listTrafficReportNotifications / editTrafficReportNotifications / enableTrafficReportNotifications / disableTrafficReportNotifications流量报告
admin:getSessions / deleteSession / deleteAllSessions登录会话
admin:getSettings / editSettings系统设置
admin:getClipboard / listClipboard / createClipboard / updateClipboard / deleteClipboard / batchDeleteClipboard剪贴板
admin:getMessageSenderProvider / setMessageSenderProvider通知发送器配置
admin:getOidcProvider / setOidcProviderOIDC 配置
admin:getLogs分页审计日志
admin:testSendMessage / testGeoip测试工具
admin:getXtermjsSettings / setXtermjsSettings终端设置
admin:listMetricDefinitions / updateMetricDefinition / getMetricMigrationStatus / startMetricMigration / cancelMetricMigration指标管理
admin:getDatabaseSize / vacuumDatabase数据库维护
admin:listPlugins / setPluginEnabled / getPluginLogs / deletePlugin / getPluginConfiguration / setPluginConfiguration插件管理

client:(Agent)

方法说明
client:getPingTasks获取分配给客户端的 Ping 任务
client:uploadPingResult上报 Ping 执行结果
client:taskResult上报远程命令执行结果

插件注册的方法

任何插件通过 server.registerRPC 注册的方法(建议 plugin: 前缀命名)都可以通过 server.call 调用。rpc. 前缀为保留前缀,插件不能注册。

调用示例

js
const server = require("server");

async function collect() {
  // 1. 获取全部节点基本信息
  const nodes = await server.call("common:getNodes");

  // 2. 获取在线状态
  const status = await server.call("common:getNodesLatestStatus");

  // 3. 创建 Ping 任务
  await server.call("admin:addPingTask", {
    name: "google",
    target: "8.8.8.8",
    type: "icmp",
    interval: 30,
    clients: [Object.keys(nodes)[0]],
    default_on: true
  });

  return { online: Object.keys(status).length };
}

错误处理

js
try {
  await server.call("admin:getClient", { uuid: "not-exist" });
} catch (err) {
  console.log(err.code);    // 整数,JSON-RPC 错误码
  console.log(err.message); // 错误信息
  console.log(err.data);    // 附加数据(可选)
}

插件管理相关方法的补充说明

方法参数返回说明
admin:listPluginsPlugin[]清单 + {enabled, running, last_error}
admin:setPluginEnabled{short, enabled, approved?}null{requires_approval: true}批准流程见 插件开发指南
admin:getPluginLogs{short}{logs}64 KiB 环形日志
admin:deletePlugin{short}null未安装返回 404 错误
admin:getPluginConfiguration{short}{configuration, data}声明项 + 合并后的保存值
admin:setPluginConfiguration{short, data}null保存配置

此外还有 REST 端点(均需管理员):

端点说明
POST /api/admin/plugin/install上传 ZIP(请求体为原始 ZIP 二进制)
GET /api/admin/plugin/market/sources市场源列表
POST/PUT/DELETE /api/admin/plugin/market/sources[/:id]管理市场源
GET /api/admin/plugin/market/catalog市场目录(?refresh=true 强制刷新)
POST /api/admin/plugin/market/install从市场安装({source_id, short}
GET /api/plugin/:short/*filepath公开插件页面静态文件(无需认证)
GET /api/admin/plugin/:short/*filepath管理插件页面静态文件

Released under the MIT license.