191 lines
4.6 KiB
Markdown
191 lines
4.6 KiB
Markdown
# ServiceManager 使用文档
|
||
|
||
本地 exe 服务管理工具,支持状态查询、启动、停止。
|
||
|
||
## 文件说明
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `ServiceManager.js` | 编译后的 JavaScript 类,可直接在浏览器或 Node.js 使用 |
|
||
| `ServiceManager.d.ts` | TypeScript 类型声明文件 |
|
||
| `ServiceManager.ts` | TypeScript 源码 |
|
||
| `test.html` | 功能演示页面 |
|
||
|
||
## 快速开始
|
||
|
||
### 1. 引入类
|
||
|
||
**浏览器(ES Module)**
|
||
```html
|
||
<script type="module">
|
||
import { ServiceManager } from './ServiceManager.js';
|
||
</script>
|
||
```
|
||
|
||
**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<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()` | - | 销毁实例 |
|
||
|
||
## 类型定义
|
||
|
||
```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/<id>` | GET | 获取单个服务状态 |
|
||
| `/api/services/<id>/start` | POST | 启动服务 |
|
||
| `/api/services/<id>/stop` | POST | 停止服务 |
|
||
|
||
后端返回格式:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": [{
|
||
"id": "watchdog",
|
||
"name": "🔐 安全控件",
|
||
"exe_path": "C:\\path\\to\\watchdog.exe",
|
||
"running": true,
|
||
"pid": 1234,
|
||
"status": "running"
|
||
}]
|
||
}
|
||
```
|