# ServiceManager 使用文档 本地 exe 服务管理工具,支持状态查询、启动、停止。 ## 文件说明 | 文件 | 说明 | |------|------| | `ServiceManager.js` | 编译后的 JavaScript 类,可直接在浏览器或 Node.js 使用 | | `ServiceManager.d.ts` | TypeScript 类型声明文件 | | `ServiceManager.ts` | TypeScript 源码 | | `test.html` | 功能演示页面 | ## 快速开始 ### 1. 引入类 **浏览器(ES Module)** ```html ``` **Node.js** ```javascript // 如果使用 Node.js,需要处理 fetch 兼容 // 推荐使用 node-fetch 或 axios ``` ### 2. 基本使用 ```javascript // 创建实例 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` | 获取所有服务状态 | | `getServiceStatus(id)` | `id: string` | `Promise` | 获取单个服务状态 | | `isConnected()` | - | `boolean` | 获取连接状态 | #### 服务控制 | 方法 | 参数 | 返回 | 说明 | |------|------|------|------| | `startService(id)` | `id: string` | `Promise` | 启动服务 | | `stopService(id)` | `id: string` | `Promise` | 停止服务 | #### 自动刷新 | 方法 | 参数 | 说明 | |------|------|------| | `startAutoRefresh(callback)` | `callback?: (services) => void` | 启动自动刷新 | | `stopAutoRefresh()` | - | 停止自动刷新 | | `isAutoRefreshRunning()` | - | 返回自动刷新状态 | #### 事件与日志 | 方法 | 参数 | 说明 | |------|------|------| | `setOnStatusChange(callback)` | `callback: (service) => void` | 设置状态变化回调 | | `getLogs()` | - | 获取所有日志 | | `clearLogs()` | - | 清空日志 | | `destroy()` | - | 销毁实例 | ## 类型定义 ```typescript 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; } ``` ## 完整示例 ```javascript // 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/` | GET | 获取单个服务状态 | | `/api/services//start` | POST | 启动服务 | | `/api/services//stop` | POST | 停止服务 | 后端返回格式: ```json { "code": 0, "data": [{ "id": "watchdog", "name": "🔐 安全控件", "exe_path": "C:\\path\\to\\watchdog.exe", "running": true, "pid": 1234, "status": "running" }] } ```