daShangDao_psiWebApp/move/demo
2026-06-03 10:53:47 +08:00
..
README.md first commit 2026-06-03 10:53:47 +08:00
ServiceManager.d.ts first commit 2026-06-03 10:53:47 +08:00
ServiceManager.js first commit 2026-06-03 10:53:47 +08:00
ServiceManager.ts first commit 2026-06-03 10:53:47 +08:00
test.html first commit 2026-06-03 10:53:47 +08:00

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"
    }]
}