import Emitter from 'component-emitter'; import { RunningStatus } from './RunningStatus'; import type { Module } from './Module'; /** * 模块管理器配置参数 */ export interface ModuleManagerOptions { /** * 是否打印未处理的错误信息,默认 true */ printError?: boolean; /** * 是否打印健康检查异常信息,默认 true */ printUnhealthy?: boolean; /** * 当触发 error 事件时,是否自动 stop(2) */ stopOnError?: boolean; /** * 当触发 unhealthy 事件时,是否自动 stop(2) */ stopOnUnhealthy?: boolean; } /** * 模块管理器,管理模块的添加、启动、停止、异常处理 * @description 事件列表 * ```typescript * on(event: 'started', listener: () => void): Emitter; * on(event: 'stopped', listener: (exitCode: number) => void): Emitter; * on(event: 'error', listener: (error: Error, module: Module) => void): Emitter; * on(event: 'unhealthy', listener: (error: Error, module: Module) => void): Emitter; * ``` */ export declare class ModuleManager extends Emitter { /** * 模块列表 */ readonly modules: ReadonlyMap; /** * 运行状态 */ readonly status: RunningStatus; /** * 当前模块管理器的名称(默认是类名) */ get name(): string; /** * @param options 配置参数 */ constructor(options?: ModuleManagerOptions); /** * 启动所有模块 * @description * 按照注册的先后顺序来启动,先注册的先启动。 * 如果启动的过程中某个模块出现了异常,则后面的模块将不再被启动,之前启动过了的模块也会被依次关闭(按照从后向前的顺序关闭)。 * 如果启动成功将触发 started 事件。 * 如果启动失败将触发 stopped 事件。 * @returns 如果启动的过程中出现了异常,则返回一个数组,其中包含了所有的异常信息 */ start(): Promise; /** * 关闭所有模块 * @description * 按照注册的先后顺序来关闭,后注册的先关闭。 * 如果关闭的过程中某个模块出现了异常,后面的模块依然会继续被关闭。 * 关闭完成后将触发 stopped 事件。 * @param exitCode 程序退出的状态码。0 正常退出 1 是系统错误 2 用户模块错误 * @returns 如果关闭的过程中出现了异常,则返回一个数组,其中包含了所有的异常信息 */ stop(exitCode?: number): Promise; /** * 健康检查 * @description * 注意:为了符合 Docker 的健康检查策略,模块管理器的运行状态为 starting,stopping,stopped 时会直接被认为是不健康。 * 只有当模块管理器的运行状态为 running 时才会开始健康检查,如果某个模块不健康,将触发 unhealthy(err, module) 事件。 * @returns 如果某个模块不健康,将返回异常信息 */ healthCheck(): Promise; /** * 注册模块 * @param module 模块实例 */ registerModule(module: Module): void; }