@zhin.js/process-monitor 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 凉菜
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,274 @@
1
+ # @zhin.js/process-monitor
2
+
3
+ 进程监控与重启通知插件,自动记录机器人重启情况并通知管理员。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ **智能检测**:自动识别启动类型(首次启动/正常重启/异常崩溃)
8
+ - ✅ **历史记录**:数据库持久化存储重启历史
9
+ - ✅ **多渠道通知**:支持用户私聊、群组消息、邮件、Webhook
10
+ - ✅ **统计分析**:重启次数、崩溃次数、累计运行时长
11
+ - ✅ **健康检查**:定期检查进程状态(内存、运行时长)
12
+ - ✅ **命令管理**:查看状态、历史记录、重置统计
13
+
14
+ ## 安装
15
+
16
+ ### 方式一:从 npm 安装(发布后)
17
+
18
+ ```bash
19
+ pnpm add @zhin.js/process-monitor
20
+ ```
21
+
22
+ ### 方式二:本地开发
23
+
24
+ 如果你在 Zhin 项目中开发,插件已经在 workspace 中,直接在配置文件中启用即可:
25
+
26
+ ```yaml
27
+ plugins:
28
+ - "@zhin.js/process-monitor"
29
+ ```
30
+
31
+ ## 配置
32
+
33
+ 在 `zhin.config.yml` 中配置:
34
+
35
+ ```yaml
36
+ plugins:
37
+ - "@zhin.js/process-monitor"
38
+
39
+ process-monitor:
40
+ enabled: true # 是否启用
41
+ recordHistory: true # 是否记录历史
42
+ maxHistoryRecords: 100 # 最大历史记录数
43
+ checkInterval: 60000 # 健康检查间隔(毫秒)
44
+ notifyOnStart: true # 启动时通知
45
+ notifyOnRestart: true # 重启时通知
46
+ notifyOnCrash: true # 崩溃时通知
47
+
48
+ notifyChannels:
49
+ # 方式一:发送给指定用户(私聊)
50
+ - type: user
51
+ target: "123456789" # 用户 ID
52
+ platform: "icqq" # 平台标识(可选,默认第一个适配器)
53
+
54
+ # 方式二:发送到指定群组
55
+ - type: group
56
+ target: "987654321" # 群组 ID
57
+ platform: "icqq"
58
+
59
+ # 方式三:发送邮件(需配置邮件服务)
60
+ - type: email
61
+ target: "admin@example.com"
62
+
63
+ # 方式四:Webhook 回调
64
+ - type: webhook
65
+ target: "https://your-webhook.com/notify"
66
+ ```
67
+
68
+ ## 使用
69
+
70
+ ### 查看状态
71
+
72
+ ```bash
73
+ monitor --status
74
+ # 或
75
+ pm -s
76
+ ```
77
+
78
+ 输出示例:
79
+ ```
80
+ 📊 进程监控状态
81
+
82
+ 🚀 当前 PID: 12345
83
+ ⏱️ 运行时长: 2天5小时30分钟
84
+ 💾 内存使用: 156 MB
85
+ 🔄 总重启: 3 次
86
+ 💥 崩溃: 1 次
87
+ 📈 累计运行: 15天8小时
88
+ 🖥️ 主机: my-server
89
+ 💻 平台: linux-x64
90
+ 📦 Node: v23.7.0
91
+ ```
92
+
93
+ ### 查看重启历史
94
+
95
+ ```bash
96
+ monitor --history # 最近 10 条
97
+ monitor --history 20 # 最近 20 条
98
+ ```
99
+
100
+ 输出示例:
101
+ ```
102
+ 📜 重启历史记录
103
+
104
+ 🔄 2026-02-05 14:30:25
105
+ 原因: restart | PID: 12345
106
+ 运行: 2天5小时30分钟
107
+
108
+ 💥 2026-02-03 09:15:10
109
+ 原因: crash | PID: 11234
110
+ 运行: 3小时45分钟
111
+
112
+ 🚀 2026-02-03 05:30:00
113
+ 原因: start | PID: 11234
114
+ ```
115
+
116
+ ### 重置统计
117
+
118
+ ```bash
119
+ monitor --reset
120
+ ```
121
+
122
+ ## 通知示例
123
+
124
+ ### 启动通知
125
+
126
+ ```
127
+ 🚀 【进程监控通知】
128
+
129
+ 📊 事件: 首次启动
130
+ ⏰ 时间: 2026-02-05 14:30:25
131
+ 🖥️ 主机: my-server
132
+ 🔢 PID: 12345
133
+ 💻 平台: linux-x64
134
+ 📦 Node: v23.7.0
135
+ 💾 内存: 120 MB
136
+
137
+ 📈 统计:
138
+ • 总重启: 0 次
139
+ • 崩溃: 0 次
140
+ • 累计运行: 0秒
141
+ ```
142
+
143
+ ### 崩溃通知
144
+
145
+ ```
146
+ 💥 【进程监控通知】
147
+
148
+ 📊 事件: 异常崩溃
149
+ ⏰ 时间: 2026-02-05 18:45:30
150
+ 🖥️ 主机: my-server
151
+ 🔢 PID: 12346
152
+ 💻 平台: linux-x64
153
+ 📦 Node: v23.7.0
154
+ ⏱️ 运行时长: 4小时15分钟
155
+ 💾 内存: 256 MB
156
+
157
+ 📈 统计:
158
+ • 总重启: 3 次
159
+ • 崩溃: 1 次
160
+ • 累计运行: 15天8小时
161
+ ```
162
+
163
+ ## 工作原理
164
+
165
+ ### 启动检测
166
+
167
+ 1. **首次启动**:无历史状态文件
168
+ 2. **正常重启**:距上次启动 > 5 分钟
169
+ 3. **异常崩溃**:距上次启动 < 5 分钟
170
+
171
+ ### 数据持久化
172
+
173
+ - **状态文件**:`data/process-state.json`
174
+ - 记录上次 PID、启动时间、统计数据
175
+
176
+ - **数据库表**:`process_restart_records`
177
+ - 完整的重启历史记录
178
+
179
+ ### 通知流程
180
+
181
+ ```
182
+ 进程启动 → 检测启动原因 → 记录数据库 → 判断是否通知 → 发送通知
183
+ ```
184
+
185
+ ## Webhook 数据格式
186
+
187
+ POST 请求体:
188
+
189
+ ```json
190
+ {
191
+ "event": "process_restart",
192
+ "data": {
193
+ "timestamp": "2026-02-05T14:30:25.000Z",
194
+ "reason": "crash",
195
+ "exitCode": 1,
196
+ "uptime": 15300000,
197
+ "pid": 12346,
198
+ "hostname": "my-server",
199
+ "platform": "linux-x64",
200
+ "nodeVersion": "v23.7.0",
201
+ "memory": 256
202
+ },
203
+ "stats": {
204
+ "restartCount": 3,
205
+ "crashCount": 1,
206
+ "totalUptime": 1324800000
207
+ }
208
+ }
209
+ ```
210
+
211
+ ## 最佳实践
212
+
213
+ ### 生产环境配置
214
+
215
+ ```yaml
216
+ process-monitor:
217
+ enabled: true
218
+ recordHistory: true
219
+ maxHistoryRecords: 200
220
+ checkInterval: 300000 # 5 分钟检查一次
221
+ notifyOnStart: true
222
+ notifyOnRestart: true
223
+ notifyOnCrash: true
224
+
225
+ notifyChannels:
226
+ # 主管理员(私聊)
227
+ - type: user
228
+ target: "${ADMIN_USER_ID}"
229
+ platform: "icqq"
230
+
231
+ # 运维群组
232
+ - type: group
233
+ target: "${OPS_GROUP_ID}"
234
+ platform: "icqq"
235
+
236
+ # 监控系统 Webhook
237
+ - type: webhook
238
+ target: "${MONITORING_WEBHOOK_URL}"
239
+ ```
240
+
241
+ ### 配合系统服务
242
+
243
+ 与 systemd/launchd/NSSM 配合使用,实现:
244
+ - **系统级监督**:守护进程崩溃自动重启
245
+ - **应用级通知**:插件记录并通知管理员
246
+
247
+ ### 告警规则建议
248
+
249
+ - 🟢 **正常重启**:记录即可,可选通知
250
+ - 🟡 **频繁重启**:1小时内重启 > 3 次,需关注
251
+ - 🔴 **持续崩溃**:5分钟内崩溃 > 2 次,立即处理
252
+
253
+ ## 故障排查
254
+
255
+ ### 通知未发送
256
+
257
+ 1. 检查配置:`notifyChannels` 是否正确
258
+ 2. 检查权限:机器人是否有发送消息权限
259
+ 3. 查看日志:是否有错误信息
260
+
261
+ ### 历史记录丢失
262
+
263
+ 1. 检查数据库连接
264
+ 2. 确认 `recordHistory: true`
265
+ 3. 查看 `data/process-state.json` 是否存在
266
+
267
+ ### 启动类型误判
268
+
269
+ - 调整判断阈值(默认 5 分钟)
270
+ - 检查系统时间是否正确
271
+
272
+ ## 许可证
273
+
274
+ MIT License
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare const plugin: import("zhin.js").Plugin;
2
+ export default plugin;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,0BAAc,CAAC;AA8O3B,eAAe,MAAM,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @zhin.js/process-monitor
3
+ *
4
+ * 进程监控与重启通知插件
5
+ */
6
+ import { usePlugin, ZhinTool } from 'zhin.js';
7
+ import os from 'os';
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ const plugin = usePlugin();
11
+ const { logger, root } = plugin;
12
+ const configService = root.inject('config');
13
+ const appConfig = configService?.getPrimary() || {};
14
+ const config = {
15
+ enabled: true,
16
+ notifyChannels: [],
17
+ notifyOnStart: true,
18
+ notifyOnRestart: true,
19
+ notifyOnCrash: true,
20
+ ...appConfig['process-monitor'],
21
+ };
22
+ if (!config.enabled) {
23
+ logger.info('进程监控已禁用');
24
+ }
25
+ // ─── 状态管理 ────────────────────────────────────────────────────────────────
26
+ const STATE_FILE = path.join(process.cwd(), 'data', 'process-state.json');
27
+ let processState = {
28
+ restartCount: 0,
29
+ crashCount: 0,
30
+ totalUptime: 0,
31
+ };
32
+ const startTime = Date.now();
33
+ function loadProcessState() {
34
+ try {
35
+ if (fs.existsSync(STATE_FILE)) {
36
+ const data = fs.readFileSync(STATE_FILE, 'utf-8');
37
+ processState = JSON.parse(data);
38
+ }
39
+ }
40
+ catch (error) {
41
+ logger.warn('加载进程状态失败:', error);
42
+ }
43
+ }
44
+ function saveProcessState() {
45
+ try {
46
+ fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true });
47
+ fs.writeFileSync(STATE_FILE, JSON.stringify(processState, null, 2));
48
+ }
49
+ catch (error) {
50
+ logger.warn('保存进程状态失败:', error);
51
+ }
52
+ }
53
+ // ─── 启动检测 ────────────────────────────────────────────────────────────────
54
+ async function detectStartupReason() {
55
+ const currentPid = process.pid;
56
+ const currentTime = Date.now();
57
+ let reason = 'start';
58
+ let uptime;
59
+ if (processState.lastPid && processState.lastStartTime) {
60
+ const timeSinceLastStart = currentTime - processState.lastStartTime;
61
+ if (timeSinceLastStart < 5 * 60 * 1000) {
62
+ reason = 'crash';
63
+ processState.crashCount++;
64
+ logger.warn(`检测到异常重启(距上次启动 ${Math.floor(timeSinceLastStart / 1000)}s)`);
65
+ }
66
+ else {
67
+ reason = 'restart';
68
+ processState.restartCount++;
69
+ logger.info('检测到正常重启');
70
+ }
71
+ uptime = timeSinceLastStart;
72
+ processState.totalUptime += uptime;
73
+ }
74
+ else {
75
+ logger.info('首次启动');
76
+ }
77
+ processState.lastPid = currentPid;
78
+ processState.lastStartTime = currentTime;
79
+ saveProcessState();
80
+ const record = {
81
+ timestamp: new Date(),
82
+ reason,
83
+ uptime,
84
+ pid: currentPid,
85
+ hostname: os.hostname(),
86
+ platform: `${os.platform()}-${os.arch()}`,
87
+ nodeVersion: process.version,
88
+ memory: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
89
+ };
90
+ const shouldNotify = (reason === 'start' && config.notifyOnStart) ||
91
+ (reason === 'restart' && config.notifyOnRestart) ||
92
+ (reason === 'crash' && config.notifyOnCrash);
93
+ if (shouldNotify && config.notifyChannels && config.notifyChannels.length > 0) {
94
+ await sendNotification(record);
95
+ }
96
+ }
97
+ // ─── 通知 ────────────────────────────────────────────────────────────────────
98
+ function formatNotificationMessage(record) {
99
+ const emoji = { start: '🚀', restart: '🔄', crash: '💥' }[record.reason] || '📊';
100
+ const reasonText = { start: '首次启动', restart: '正常重启', crash: '异常崩溃' }[record.reason] || '未知';
101
+ const lines = [
102
+ `${emoji} 【进程监控通知】`,
103
+ '',
104
+ `📊 事件: ${reasonText}`,
105
+ `⏰ 时间: ${record.timestamp.toLocaleString('zh-CN')}`,
106
+ `🖥️ 主机: ${record.hostname}`,
107
+ `🔢 PID: ${record.pid}`,
108
+ `💻 平台: ${record.platform}`,
109
+ `📦 Node: ${record.nodeVersion}`,
110
+ ];
111
+ if (record.uptime) {
112
+ lines.push(`⏱️ 运行时长: ${formatUptime(record.uptime)}`);
113
+ }
114
+ if (record.memory) {
115
+ lines.push(`💾 内存: ${record.memory} MB`);
116
+ }
117
+ lines.push('', `📈 统计:`);
118
+ lines.push(` • 总重启: ${processState.restartCount} 次`);
119
+ lines.push(` • 崩溃: ${processState.crashCount} 次`);
120
+ lines.push(` • 累计运行: ${formatUptime(processState.totalUptime)}`);
121
+ return lines.join('\n');
122
+ }
123
+ function formatUptime(ms) {
124
+ const seconds = Math.floor(ms / 1000);
125
+ const minutes = Math.floor(seconds / 60);
126
+ const hours = Math.floor(minutes / 60);
127
+ const days = Math.floor(hours / 24);
128
+ if (days > 0)
129
+ return `${days}天${hours % 24}小时`;
130
+ if (hours > 0)
131
+ return `${hours}小时${minutes % 60}分钟`;
132
+ if (minutes > 0)
133
+ return `${minutes}分钟`;
134
+ return `${seconds}秒`;
135
+ }
136
+ async function sendNotification(record) {
137
+ const message = formatNotificationMessage(record);
138
+ for (const channel of config.notifyChannels || []) {
139
+ try {
140
+ if (channel.type === 'webhook') {
141
+ await fetch(channel.target, {
142
+ method: 'POST',
143
+ headers: { 'Content-Type': 'application/json' },
144
+ body: JSON.stringify({ event: 'process_restart', data: record, stats: processState }),
145
+ });
146
+ logger.debug(`Webhook 通知已发送: ${channel.target}`);
147
+ }
148
+ }
149
+ catch (error) {
150
+ logger.error(`发送通知失败 (${channel.type}):`, error);
151
+ }
152
+ }
153
+ }
154
+ // ─── 初始化 ──────────────────────────────────────────────────────────────────
155
+ if (config.enabled) {
156
+ loadProcessState();
157
+ detectStartupReason();
158
+ process.on('SIGTERM', () => {
159
+ logger.info('收到 SIGTERM 信号');
160
+ saveProcessState();
161
+ });
162
+ process.on('SIGINT', () => {
163
+ logger.info('收到 SIGINT 信号');
164
+ saveProcessState();
165
+ });
166
+ }
167
+ // ═══════════════════════════════════════════════════════════════════════════════
168
+ // 工具定义
169
+ // ═══════════════════════════════════════════════════════════════════════════════
170
+ // 工具会自动注册
171
+ new ZhinTool('process_status')
172
+ .desc('查看进程监控状态')
173
+ .tag('监控', '进程')
174
+ .keyword('进程状态', '监控状态', 'process status')
175
+ .alias('monitor', 'pm')
176
+ .usage('查看当前进程状态和统计信息')
177
+ .examples('/monitor', '/pm')
178
+ .execute(async () => {
179
+ const uptime = Date.now() - startTime;
180
+ const memUsage = process.memoryUsage();
181
+ return [
182
+ '📊 进程监控状态',
183
+ '',
184
+ `🚀 当前 PID: ${process.pid}`,
185
+ `⏱️ 运行时长: ${formatUptime(uptime)}`,
186
+ `💾 内存使用: ${Math.round(memUsage.heapUsed / 1024 / 1024)} MB`,
187
+ `🔄 总重启: ${processState.restartCount} 次`,
188
+ `💥 崩溃: ${processState.crashCount} 次`,
189
+ `📈 累计运行: ${formatUptime(processState.totalUptime)}`,
190
+ `🖥️ 主机: ${os.hostname()}`,
191
+ `💻 平台: ${os.platform()}-${os.arch()}`,
192
+ `📦 Node: ${process.version}`,
193
+ ].join('\n');
194
+ });
195
+ export default plugin;
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@zhin.js/process-monitor",
3
+ "version": "0.0.0",
4
+ "description": "进程监控与重启通知插件",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "import": "./lib/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "lib",
17
+ "README.md"
18
+ ],
19
+ "keywords": [
20
+ "zhin",
21
+ "plugin",
22
+ "monitor",
23
+ "process",
24
+ "notification"
25
+ ],
26
+ "author": "Zhin.js Team",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "zhin.js": "1.0.27"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^24.10.4",
33
+ "typescript": "^5.7.3"
34
+ },
35
+ "peerDependencies": {
36
+ "zhin.js": "^1.0.0"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "dev": "tsc --watch"
41
+ }
42
+ }