daShangDao_psiWebApp/move/demo/README.md
2026-06-03 10:53:47 +08:00

4.6 KiB
Raw Blame History

ServiceManager 使用文档

本地 exe 服务管理工具,支持状态查询、启动、停止。

文件说明

文件 说明
ServiceManager.js 编译后的 JavaScript 类,可直接在浏览器或 Node.js 使用
ServiceManager.d.ts TypeScript 类型声明文件
ServiceManager.ts TypeScript 源码
test.html 功能演示页面

快速开始

1. 引入类

浏览器ES Module

<script type="module">
    import { ServiceManager } from './ServiceManager.js';
</script>

Node.js

// 如果使用 Node.js需要处理 fetch 兼容
// 推荐使用 node-fetch 或 axios

2. 基本使用

// 创建实例
const sm = new ServiceManager('http://127.0.0.1:5000');

// 查询所有服务状态
const services = await sm.getServicesStatus();
console.log(services);

// 启动服务
await sm.startService('watchdog');

// 停止服务
await sm.stopService('watchdog');

API 参考

静态方法

方法 说明
ServiceManager.enableDebug() 开启 DEBUG 模式,浏览器控制台输出详细日志
ServiceManager.disableDebug() 关闭 DEBUG 模式
ServiceManager.isDebugEnabled() 返回当前 DEBUG 状态

实例方法

配置

方法 参数 说明
setBaseUrl(url) url: string 设置 API 地址
getBaseUrl() - 获取当前 API 地址
setPollInterval(ms) ms: number 设置自动刷新间隔(毫秒)
getPollInterval() - 获取当前间隔

状态查询

方法 参数 返回 说明
getServicesStatus() - Promise<ServiceInfo[]> 获取所有服务状态
getServiceStatus(id) id: string Promise<ServiceInfo | null> 获取单个服务状态
isConnected() - boolean 获取连接状态

服务控制

方法 参数 返回 说明
startService(id) id: string Promise<boolean> 启动服务
stopService(id) id: string Promise<boolean> 停止服务

自动刷新

方法 参数 说明
startAutoRefresh(callback) callback?: (services) => void 启动自动刷新
stopAutoRefresh() - 停止自动刷新
isAutoRefreshRunning() - 返回自动刷新状态

事件与日志

方法 参数 说明
setOnStatusChange(callback) callback: (service) => void 设置状态变化回调
getLogs() - 获取所有日志
clearLogs() - 清空日志
destroy() - 销毁实例

类型定义

interface ServiceInfo {
    id: string;
    name: string;
    exe_path: string;
    running: boolean;
    pid: number | null;
    port: number | null;
    port_open: boolean | null;
    status: 'running' | 'stopped';
}

interface LogEntry {
    time: string;
    level: 'info' | 'success' | 'error' | 'warn' | 'debug';
    message: string;
    data?: any;
}

完整示例

// 1. 开启 DEBUG在浏览器控制台查看详细日志
ServiceManager.enableDebug();

// 2. 创建实例
const sm = new ServiceManager('http://127.0.0.1:5000');

// 3. 设置轮询间隔(可选,默认 3000ms
sm.setPollInterval(5000);

// 4. 设置状态变化回调
sm.setOnStatusChange((service) => {
    console.log(`${service.name} 状态变化: ${service.status}`);
    if (service.running) {
        console.log(`PID: ${service.pid}`);
    }
});

// 5. 启动自动刷新
sm.startAutoRefresh((services) => {
    services.forEach(s => {
        console.log(`${s.name}: ${s.status}`);
    });
});

// 6. 或者手动查询
const services = await sm.getServicesStatus();
await sm.startService('watchdog');
await sm.stopService('watchdog');

// 7. 查看日志
const logs = sm.getLogs();
console.log(logs);

// 8. 停止自动刷新
sm.stopAutoRefresh();

// 9. 销毁实例
sm.destroy();

依赖后端

本工具需要配合 Flask 后端使用,后端需要提供以下 API

端点 方法 说明
/api/services GET 获取所有服务状态
/api/services/<id> GET 获取单个服务状态
/api/services/<id>/start POST 启动服务
/api/services/<id>/stop POST 停止服务

后端返回格式:

{
    "code": 0,
    "data": [{
        "id": "watchdog",
        "name": "🔐 安全控件",
        "exe_path": "C:\\path\\to\\watchdog.exe",
        "running": true,
        "pid": 1234,
        "status": "running"
    }]
}