node-os-utils 1.3.7 → 2.0.1-beta.2

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.
Files changed (220) hide show
  1. package/README.md +1113 -237
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/package.json +99 -0
  4. package/dist/src/adapters/adapter-factory.d.ts +87 -0
  5. package/dist/src/adapters/adapter-factory.d.ts.map +1 -0
  6. package/dist/src/adapters/adapter-factory.js +272 -0
  7. package/dist/src/adapters/adapter-factory.js.map +1 -0
  8. package/dist/src/adapters/linux-adapter.d.ts +199 -0
  9. package/dist/src/adapters/linux-adapter.d.ts.map +1 -0
  10. package/dist/src/adapters/linux-adapter.js +1308 -0
  11. package/dist/src/adapters/linux-adapter.js.map +1 -0
  12. package/dist/src/adapters/macos-adapter.d.ts +232 -0
  13. package/dist/src/adapters/macos-adapter.d.ts.map +1 -0
  14. package/dist/src/adapters/macos-adapter.js +1144 -0
  15. package/dist/src/adapters/macos-adapter.js.map +1 -0
  16. package/dist/src/adapters/windows-adapter.d.ts +124 -0
  17. package/dist/src/adapters/windows-adapter.d.ts.map +1 -0
  18. package/dist/src/adapters/windows-adapter.js +601 -0
  19. package/dist/src/adapters/windows-adapter.js.map +1 -0
  20. package/dist/src/core/base-monitor.d.ts +107 -0
  21. package/dist/src/core/base-monitor.d.ts.map +1 -0
  22. package/dist/src/core/base-monitor.js +312 -0
  23. package/dist/src/core/base-monitor.js.map +1 -0
  24. package/dist/src/core/cache-manager.d.ts +157 -0
  25. package/dist/src/core/cache-manager.d.ts.map +1 -0
  26. package/dist/src/core/cache-manager.js +315 -0
  27. package/dist/src/core/cache-manager.js.map +1 -0
  28. package/dist/src/core/platform-adapter.d.ts +197 -0
  29. package/dist/src/core/platform-adapter.d.ts.map +1 -0
  30. package/dist/src/core/platform-adapter.js +244 -0
  31. package/dist/src/core/platform-adapter.js.map +1 -0
  32. package/dist/src/index.d.ts +205 -0
  33. package/dist/src/index.d.ts.map +1 -0
  34. package/dist/src/index.js +315 -0
  35. package/dist/src/index.js.map +1 -0
  36. package/dist/src/monitors/cpu-monitor.d.ts +139 -0
  37. package/dist/src/monitors/cpu-monitor.d.ts.map +1 -0
  38. package/dist/src/monitors/cpu-monitor.js +433 -0
  39. package/dist/src/monitors/cpu-monitor.js.map +1 -0
  40. package/dist/src/monitors/disk-monitor.d.ts +136 -0
  41. package/dist/src/monitors/disk-monitor.d.ts.map +1 -0
  42. package/dist/src/monitors/disk-monitor.js +465 -0
  43. package/dist/src/monitors/disk-monitor.js.map +1 -0
  44. package/dist/src/monitors/memory-monitor.d.ts +136 -0
  45. package/dist/src/monitors/memory-monitor.d.ts.map +1 -0
  46. package/dist/src/monitors/memory-monitor.js +443 -0
  47. package/dist/src/monitors/memory-monitor.js.map +1 -0
  48. package/dist/src/monitors/network-monitor.d.ts +166 -0
  49. package/dist/src/monitors/network-monitor.d.ts.map +1 -0
  50. package/dist/src/monitors/network-monitor.js +586 -0
  51. package/dist/src/monitors/network-monitor.js.map +1 -0
  52. package/dist/src/monitors/process-monitor.d.ts +142 -0
  53. package/dist/src/monitors/process-monitor.d.ts.map +1 -0
  54. package/dist/src/monitors/process-monitor.js +460 -0
  55. package/dist/src/monitors/process-monitor.js.map +1 -0
  56. package/dist/src/monitors/system-monitor.d.ts +173 -0
  57. package/dist/src/monitors/system-monitor.d.ts.map +1 -0
  58. package/dist/src/monitors/system-monitor.js +592 -0
  59. package/dist/src/monitors/system-monitor.js.map +1 -0
  60. package/dist/src/types/common.d.ts +135 -0
  61. package/dist/src/types/common.d.ts.map +1 -0
  62. package/dist/src/types/common.js +141 -0
  63. package/dist/src/types/common.js.map +1 -0
  64. package/dist/src/types/config.d.ts +288 -0
  65. package/dist/src/types/config.d.ts.map +1 -0
  66. package/dist/src/types/config.js +3 -0
  67. package/dist/src/types/config.js.map +1 -0
  68. package/dist/src/types/errors.d.ts +40 -0
  69. package/dist/src/types/errors.d.ts.map +1 -0
  70. package/dist/src/types/errors.js +67 -0
  71. package/dist/src/types/errors.js.map +1 -0
  72. package/dist/src/types/index.d.ts +16 -0
  73. package/dist/src/types/index.d.ts.map +1 -0
  74. package/dist/src/types/index.js +36 -0
  75. package/dist/src/types/index.js.map +1 -0
  76. package/dist/src/types/monitors.d.ts +623 -0
  77. package/dist/src/types/monitors.d.ts.map +1 -0
  78. package/dist/src/types/monitors.js +3 -0
  79. package/dist/src/types/monitors.js.map +1 -0
  80. package/dist/src/types/platform.d.ts +435 -0
  81. package/dist/src/types/platform.d.ts.map +1 -0
  82. package/dist/src/types/platform.js +3 -0
  83. package/dist/src/types/platform.js.map +1 -0
  84. package/dist/src/utils/command-executor.d.ts +58 -0
  85. package/dist/src/utils/command-executor.d.ts.map +1 -0
  86. package/dist/src/utils/command-executor.js +321 -0
  87. package/dist/src/utils/command-executor.js.map +1 -0
  88. package/dist/test/config/test-config.d.ts +301 -0
  89. package/dist/test/config/test-config.d.ts.map +1 -0
  90. package/dist/test/config/test-config.js +235 -0
  91. package/dist/test/config/test-config.js.map +1 -0
  92. package/dist/test/platform/linux.test.d.ts +6 -0
  93. package/dist/test/platform/linux.test.d.ts.map +1 -0
  94. package/dist/test/platform/linux.test.js +307 -0
  95. package/dist/test/platform/linux.test.js.map +1 -0
  96. package/dist/test/platform/macos.test.d.ts +6 -0
  97. package/dist/test/platform/macos.test.d.ts.map +1 -0
  98. package/dist/test/platform/macos.test.js +276 -0
  99. package/dist/test/platform/macos.test.js.map +1 -0
  100. package/dist/test/platform/windows.test.d.ts +6 -0
  101. package/dist/test/platform/windows.test.d.ts.map +1 -0
  102. package/dist/test/platform/windows.test.js +320 -0
  103. package/dist/test/platform/windows.test.js.map +1 -0
  104. package/dist/test/unit/adapters/adapter-factory.test.d.ts +2 -0
  105. package/dist/test/unit/adapters/adapter-factory.test.d.ts.map +1 -0
  106. package/dist/test/unit/adapters/adapter-factory.test.js +147 -0
  107. package/dist/test/unit/adapters/adapter-factory.test.js.map +1 -0
  108. package/dist/test/unit/adapters/linux-adapter.test.d.ts +2 -0
  109. package/dist/test/unit/adapters/linux-adapter.test.d.ts.map +1 -0
  110. package/dist/test/unit/adapters/linux-adapter.test.js +191 -0
  111. package/dist/test/unit/adapters/linux-adapter.test.js.map +1 -0
  112. package/dist/test/unit/adapters/macos-adapter.test.d.ts +2 -0
  113. package/dist/test/unit/adapters/macos-adapter.test.d.ts.map +1 -0
  114. package/dist/test/unit/adapters/macos-adapter.test.js +224 -0
  115. package/dist/test/unit/adapters/macos-adapter.test.js.map +1 -0
  116. package/dist/test/unit/adapters/windows-adapter.test.d.ts +2 -0
  117. package/dist/test/unit/adapters/windows-adapter.test.d.ts.map +1 -0
  118. package/dist/test/unit/adapters/windows-adapter.test.js +41 -0
  119. package/dist/test/unit/adapters/windows-adapter.test.js.map +1 -0
  120. package/dist/test/unit/core/base-monitor.test.d.ts +2 -0
  121. package/dist/test/unit/core/base-monitor.test.d.ts.map +1 -0
  122. package/dist/test/unit/core/base-monitor.test.js +157 -0
  123. package/dist/test/unit/core/base-monitor.test.js.map +1 -0
  124. package/dist/test/unit/core/cache-manager.test.d.ts +6 -0
  125. package/dist/test/unit/core/cache-manager.test.d.ts.map +1 -0
  126. package/dist/test/unit/core/cache-manager.test.js +127 -0
  127. package/dist/test/unit/core/cache-manager.test.js.map +1 -0
  128. package/dist/test/unit/core/platform-adapter.test.d.ts +2 -0
  129. package/dist/test/unit/core/platform-adapter.test.d.ts.map +1 -0
  130. package/dist/test/unit/core/platform-adapter.test.js +186 -0
  131. package/dist/test/unit/core/platform-adapter.test.js.map +1 -0
  132. package/dist/test/unit/index.test.d.ts +2 -0
  133. package/dist/test/unit/index.test.d.ts.map +1 -0
  134. package/dist/test/unit/index.test.js +183 -0
  135. package/dist/test/unit/index.test.js.map +1 -0
  136. package/dist/test/unit/monitors/cpu-monitor.test.d.ts +2 -0
  137. package/dist/test/unit/monitors/cpu-monitor.test.d.ts.map +1 -0
  138. package/dist/test/unit/monitors/cpu-monitor.test.js +166 -0
  139. package/dist/test/unit/monitors/cpu-monitor.test.js.map +1 -0
  140. package/dist/test/unit/monitors/disk-monitor.test.d.ts +2 -0
  141. package/dist/test/unit/monitors/disk-monitor.test.d.ts.map +1 -0
  142. package/dist/test/unit/monitors/disk-monitor.test.js +46 -0
  143. package/dist/test/unit/monitors/disk-monitor.test.js.map +1 -0
  144. package/dist/test/unit/monitors/memory-monitor.test.d.ts +2 -0
  145. package/dist/test/unit/monitors/memory-monitor.test.d.ts.map +1 -0
  146. package/dist/test/unit/monitors/memory-monitor.test.js +142 -0
  147. package/dist/test/unit/monitors/memory-monitor.test.js.map +1 -0
  148. package/dist/test/unit/monitors/network-monitor.test.d.ts +2 -0
  149. package/dist/test/unit/monitors/network-monitor.test.d.ts.map +1 -0
  150. package/dist/test/unit/monitors/network-monitor.test.js +22 -0
  151. package/dist/test/unit/monitors/network-monitor.test.js.map +1 -0
  152. package/dist/test/unit/monitors/process-monitor.test.d.ts +2 -0
  153. package/dist/test/unit/monitors/process-monitor.test.d.ts.map +1 -0
  154. package/dist/test/unit/monitors/process-monitor.test.js +165 -0
  155. package/dist/test/unit/monitors/process-monitor.test.js.map +1 -0
  156. package/dist/test/unit/monitors/system-monitor-macos.test.d.ts +2 -0
  157. package/dist/test/unit/monitors/system-monitor-macos.test.d.ts.map +1 -0
  158. package/dist/test/unit/monitors/system-monitor-macos.test.js +115 -0
  159. package/dist/test/unit/monitors/system-monitor-macos.test.js.map +1 -0
  160. package/dist/test/unit/monitors/system-monitor.test.d.ts +2 -0
  161. package/dist/test/unit/monitors/system-monitor.test.d.ts.map +1 -0
  162. package/dist/test/unit/monitors/system-monitor.test.js +70 -0
  163. package/dist/test/unit/monitors/system-monitor.test.js.map +1 -0
  164. package/dist/test/unit/types/common.test.d.ts +6 -0
  165. package/dist/test/unit/types/common.test.d.ts.map +1 -0
  166. package/dist/test/unit/types/common.test.js +139 -0
  167. package/dist/test/unit/types/common.test.js.map +1 -0
  168. package/dist/test/unit/types/config.test.d.ts +2 -0
  169. package/dist/test/unit/types/config.test.d.ts.map +1 -0
  170. package/dist/test/unit/types/config.test.js +9 -0
  171. package/dist/test/unit/types/config.test.js.map +1 -0
  172. package/dist/test/unit/types/errors.test.d.ts +6 -0
  173. package/dist/test/unit/types/errors.test.d.ts.map +1 -0
  174. package/dist/test/unit/types/errors.test.js +184 -0
  175. package/dist/test/unit/types/errors.test.js.map +1 -0
  176. package/dist/test/unit/types/index.test.d.ts +2 -0
  177. package/dist/test/unit/types/index.test.d.ts.map +1 -0
  178. package/dist/test/unit/types/index.test.js +39 -0
  179. package/dist/test/unit/types/index.test.js.map +1 -0
  180. package/dist/test/unit/types/monitors.test.d.ts +2 -0
  181. package/dist/test/unit/types/monitors.test.d.ts.map +1 -0
  182. package/dist/test/unit/types/monitors.test.js +9 -0
  183. package/dist/test/unit/types/monitors.test.js.map +1 -0
  184. package/dist/test/unit/types/platform.test.d.ts +2 -0
  185. package/dist/test/unit/types/platform.test.d.ts.map +1 -0
  186. package/dist/test/unit/types/platform.test.js +9 -0
  187. package/dist/test/unit/types/platform.test.js.map +1 -0
  188. package/dist/test/unit/utils/command-executor.test.d.ts +6 -0
  189. package/dist/test/unit/utils/command-executor.test.d.ts.map +1 -0
  190. package/dist/test/unit/utils/command-executor.test.js +153 -0
  191. package/dist/test/unit/utils/command-executor.test.js.map +1 -0
  192. package/dist/test/unit/utils/platform-specific.test.d.ts +2 -0
  193. package/dist/test/unit/utils/platform-specific.test.d.ts.map +1 -0
  194. package/dist/test/unit/utils/platform-specific.test.js +32 -0
  195. package/dist/test/unit/utils/platform-specific.test.js.map +1 -0
  196. package/dist/test/utils/platform-specific.d.ts +139 -0
  197. package/dist/test/utils/platform-specific.d.ts.map +1 -0
  198. package/dist/test/utils/platform-specific.js +306 -0
  199. package/dist/test/utils/platform-specific.js.map +1 -0
  200. package/dist/test/utils/test-base.d.ts +157 -0
  201. package/dist/test/utils/test-base.d.ts.map +1 -0
  202. package/dist/test/utils/test-base.js +316 -0
  203. package/dist/test/utils/test-base.js.map +1 -0
  204. package/package.json +78 -18
  205. package/.travis.yml +0 -7
  206. package/index.js +0 -17
  207. package/lib/bucket.js +0 -14
  208. package/lib/cpu.js +0 -94
  209. package/lib/drive.js +0 -113
  210. package/lib/exec.js +0 -28
  211. package/lib/mem.js +0 -176
  212. package/lib/netstat.js +0 -182
  213. package/lib/openfiles.js +0 -25
  214. package/lib/os.js +0 -148
  215. package/lib/osCmd.js +0 -20
  216. package/lib/proc.js +0 -38
  217. package/lib/users.js +0 -18
  218. package/test/test.js +0 -55
  219. package/util/co.js +0 -237
  220. package/util/index.js +0 -12
@@ -0,0 +1,142 @@
1
+ import { BaseMonitor } from '../core/base-monitor';
2
+ import { MonitorResult, ProcessConfig, ProcessInfo, ProcessId, DataSize } from '../types';
3
+ import { PlatformAdapter } from '../types/platform';
4
+ import { CacheManager } from '../core/cache-manager';
5
+ /**
6
+ * 进程监控器
7
+ *
8
+ * 提供进程相关的监控功能,包括进程列表、进程信息、资源使用等
9
+ */
10
+ export declare class ProcessMonitor extends BaseMonitor<ProcessInfo[]> {
11
+ private processConfig;
12
+ constructor(adapter: PlatformAdapter, config?: ProcessConfig, cache?: CacheManager);
13
+ /**
14
+ * 获取进程信息(实现抽象方法)
15
+ */
16
+ info(): Promise<MonitorResult<ProcessInfo[]>>;
17
+ /**
18
+ * 获取所有进程列表
19
+ */
20
+ list(options?: {
21
+ skipLimit?: boolean;
22
+ }): Promise<MonitorResult<ProcessInfo[]>>;
23
+ /**
24
+ * 根据 PID 获取进程信息
25
+ */
26
+ byPid(pid: ProcessId): Promise<MonitorResult<ProcessInfo | null>>;
27
+ /**
28
+ * 根据进程名称搜索进程
29
+ */
30
+ byName(name: string): Promise<MonitorResult<ProcessInfo[]>>;
31
+ /**
32
+ * 获取当前进程信息
33
+ */
34
+ current(): Promise<MonitorResult<ProcessInfo | null>>;
35
+ /**
36
+ * 获取子进程列表
37
+ */
38
+ children(parentPid: ProcessId): Promise<MonitorResult<ProcessInfo[]>>;
39
+ /**
40
+ * 获取进程树
41
+ */
42
+ tree(rootPid?: ProcessId): Promise<MonitorResult<any>>;
43
+ /**
44
+ * 获取最占用 CPU 的进程
45
+ */
46
+ topByCpu(limit?: number): Promise<MonitorResult<ProcessInfo[]>>;
47
+ /**
48
+ * 获取最占用内存的进程
49
+ */
50
+ topByMemory(limit?: number): Promise<MonitorResult<ProcessInfo[]>>;
51
+ /**
52
+ * 获取进程统计信息
53
+ */
54
+ stats(): Promise<MonitorResult<{
55
+ total: number;
56
+ running: number;
57
+ sleeping: number;
58
+ waiting: number;
59
+ zombie: number;
60
+ stopped: number;
61
+ unknown: number;
62
+ totalCpuUsage: number;
63
+ totalMemoryUsage: DataSize;
64
+ }>>;
65
+ /**
66
+ * 检查进程是否存在
67
+ */
68
+ exists(pid: ProcessId): Promise<MonitorResult<boolean>>;
69
+ /**
70
+ * 杀死进程
71
+ */
72
+ kill(pid: ProcessId, signal?: string): Promise<MonitorResult<boolean>>;
73
+ /**
74
+ * 获取进程的打开文件
75
+ */
76
+ openFiles(pid: ProcessId): Promise<MonitorResult<string[]>>;
77
+ /**
78
+ * 获取进程的环境变量
79
+ */
80
+ environment(pid: ProcessId): Promise<MonitorResult<Record<string, string>>>;
81
+ /**
82
+ * 配置是否包含子进程
83
+ */
84
+ withChildren(include: boolean): this;
85
+ /**
86
+ * 配置是否包含线程信息
87
+ */
88
+ withThreads(include: boolean): this;
89
+ /**
90
+ * 配置是否包含环境变量
91
+ */
92
+ withEnvironment(include: boolean): this;
93
+ /**
94
+ * 配置是否包含打开文件
95
+ */
96
+ withOpenFiles(include: boolean): this;
97
+ /**
98
+ * 配置进程名称过滤
99
+ */
100
+ withNameFilter(filter: string): this;
101
+ /**
102
+ * 配置最大返回结果数
103
+ */
104
+ withMaxResults(max: number): this;
105
+ /**
106
+ * 配置目标进程 ID 列表
107
+ */
108
+ withPids(pids: number[]): this;
109
+ /**
110
+ * 获取默认配置
111
+ */
112
+ protected getDefaultConfig(): ProcessConfig;
113
+ /**
114
+ * 转换进程列表
115
+ */
116
+ private transformProcessList;
117
+ /**
118
+ * 转换进程信息
119
+ */
120
+ private transformProcessInfo;
121
+ /**
122
+ * 应用过滤器
123
+ */
124
+ private applyFilters;
125
+ /**
126
+ * 构建进程树
127
+ */
128
+ private buildProcessTree;
129
+ /**
130
+ * 规范化进程状态
131
+ */
132
+ private normalizeProcessState;
133
+ /**
134
+ * 解析启动时间
135
+ */
136
+ private parseStartTime;
137
+ /**
138
+ * 安全解析数字
139
+ */
140
+ private safeParseNumber;
141
+ }
142
+ //# sourceMappingURL=process-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-monitor.d.ts","sourceRoot":"","sources":["../../../src/monitors/process-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessMonitor = void 0;
4
+ const base_monitor_1 = require("../core/base-monitor");
5
+ const types_1 = require("../types");
6
+ /**
7
+ * 进程监控器
8
+ *
9
+ * 提供进程相关的监控功能,包括进程列表、进程信息、资源使用等
10
+ */
11
+ class ProcessMonitor extends base_monitor_1.BaseMonitor {
12
+ constructor(adapter, config = {}, cache) {
13
+ super(adapter, config, cache);
14
+ this.processConfig = { ...this.getDefaultConfig(), ...config };
15
+ }
16
+ /**
17
+ * 获取进程信息(实现抽象方法)
18
+ */
19
+ async info() {
20
+ return this.list();
21
+ }
22
+ /**
23
+ * 获取所有进程列表
24
+ */
25
+ async list(options = {}) {
26
+ const limitKey = options.skipLimit ? 'all' : (this.processConfig.maxResults || 'all');
27
+ const cacheKey = `process-list-${limitKey}`;
28
+ return this.executeWithCache(cacheKey, async () => {
29
+ this.validatePlatformSupport('process.list');
30
+ const rawData = await this.adapter.getProcessList();
31
+ const processes = this.transformProcessList(rawData);
32
+ // 应用过滤和限制
33
+ const filteredProcesses = this.applyFilters(processes, options);
34
+ return filteredProcesses;
35
+ }, this.processConfig.cacheTTL || 5000);
36
+ }
37
+ /**
38
+ * 根据 PID 获取进程信息
39
+ */
40
+ async byPid(pid) {
41
+ const cacheKey = `process-${pid}`;
42
+ return this.executeWithCache(cacheKey, async () => {
43
+ this.validatePlatformSupport('process.info');
44
+ const rawData = await this.adapter.getProcessInfo(pid);
45
+ if (!rawData) {
46
+ return null;
47
+ }
48
+ return this.transformProcessInfo(rawData);
49
+ }, this.processConfig.cacheTTL || 2000);
50
+ }
51
+ /**
52
+ * 根据进程名称搜索进程
53
+ */
54
+ async byName(name) {
55
+ const listResult = await this.list({ skipLimit: true });
56
+ if (!listResult.success || !listResult.data) {
57
+ return listResult;
58
+ }
59
+ const matchingProcesses = listResult.data.filter(process => process.name.toLowerCase().includes(name.toLowerCase()) ||
60
+ process.command.toLowerCase().includes(name.toLowerCase()));
61
+ return this.createSuccessResult(matchingProcesses);
62
+ }
63
+ /**
64
+ * 获取当前进程信息
65
+ */
66
+ async current() {
67
+ return this.byPid(process.pid);
68
+ }
69
+ /**
70
+ * 获取子进程列表
71
+ */
72
+ async children(parentPid) {
73
+ if (!this.processConfig.includeChildren) {
74
+ return this.createErrorResult(this.createUnsupportedError('process.children (disabled in config)'));
75
+ }
76
+ const listResult = await this.list({ skipLimit: true });
77
+ if (!listResult.success || !listResult.data) {
78
+ return listResult;
79
+ }
80
+ const childProcesses = listResult.data.filter(process => process.ppid === parentPid);
81
+ return this.createSuccessResult(childProcesses);
82
+ }
83
+ /**
84
+ * 获取进程树
85
+ */
86
+ async tree(rootPid) {
87
+ const listResult = await this.list({ skipLimit: true });
88
+ if (!listResult.success || !listResult.data) {
89
+ return listResult;
90
+ }
91
+ const processTree = this.buildProcessTree(listResult.data, rootPid);
92
+ return this.createSuccessResult(processTree);
93
+ }
94
+ /**
95
+ * 获取最占用 CPU 的进程
96
+ */
97
+ async topByCpu(limit = 10) {
98
+ const listResult = await this.list({ skipLimit: true });
99
+ if (!listResult.success || !listResult.data) {
100
+ return listResult;
101
+ }
102
+ const sortedProcesses = listResult.data
103
+ .filter(process => process.cpuUsage > 0)
104
+ .sort((a, b) => b.cpuUsage - a.cpuUsage)
105
+ .slice(0, limit);
106
+ return this.createSuccessResult(sortedProcesses);
107
+ }
108
+ /**
109
+ * 获取最占用内存的进程
110
+ */
111
+ async topByMemory(limit = 10) {
112
+ const listResult = await this.list({ skipLimit: true });
113
+ if (!listResult.success || !listResult.data) {
114
+ return listResult;
115
+ }
116
+ const sortedProcesses = listResult.data
117
+ .filter(process => process.memoryUsage.toBytes() > 0)
118
+ .sort((a, b) => b.memoryUsage.toBytes() - a.memoryUsage.toBytes())
119
+ .slice(0, limit);
120
+ return this.createSuccessResult(sortedProcesses);
121
+ }
122
+ /**
123
+ * 获取进程统计信息
124
+ */
125
+ async stats() {
126
+ const cacheKey = 'process-stats';
127
+ return this.executeWithCache(cacheKey, async () => {
128
+ const listResult = await this.list({ skipLimit: true });
129
+ if (!listResult.success || !listResult.data) {
130
+ throw new Error('Failed to get process list for statistics');
131
+ }
132
+ const processes = listResult.data;
133
+ const stats = {
134
+ total: processes.length,
135
+ running: 0,
136
+ sleeping: 0,
137
+ waiting: 0,
138
+ zombie: 0,
139
+ stopped: 0,
140
+ unknown: 0,
141
+ totalCpuUsage: 0,
142
+ totalMemoryUsage: new types_1.DataSize(0)
143
+ };
144
+ let totalMemoryBytes = 0;
145
+ for (const process of processes) {
146
+ // 按状态计数
147
+ switch (process.state) {
148
+ case 'running':
149
+ stats.running++;
150
+ break;
151
+ case 'sleeping':
152
+ stats.sleeping++;
153
+ break;
154
+ case 'waiting':
155
+ stats.waiting++;
156
+ break;
157
+ case 'zombie':
158
+ stats.zombie++;
159
+ break;
160
+ case 'stopped':
161
+ stats.stopped++;
162
+ break;
163
+ default:
164
+ stats.unknown++;
165
+ }
166
+ // 累计资源使用
167
+ stats.totalCpuUsage += process.cpuUsage;
168
+ totalMemoryBytes += process.memoryUsage.toBytes();
169
+ }
170
+ stats.totalMemoryUsage = new types_1.DataSize(totalMemoryBytes);
171
+ return stats;
172
+ }, this.processConfig.cacheTTL || 5000);
173
+ }
174
+ /**
175
+ * 检查进程是否存在
176
+ */
177
+ async exists(pid) {
178
+ try {
179
+ const processResult = await this.byPid(pid);
180
+ return this.createSuccessResult(processResult.success && processResult.data !== null);
181
+ }
182
+ catch (error) {
183
+ return this.createSuccessResult(false);
184
+ }
185
+ }
186
+ /**
187
+ * 杀死进程
188
+ */
189
+ async kill(pid, signal = 'SIGTERM') {
190
+ try {
191
+ this.validatePlatformSupport('process.kill');
192
+ const result = await this.adapter.killProcess(pid, signal);
193
+ return this.createSuccessResult(result);
194
+ }
195
+ catch (error) {
196
+ return this.handleError(error);
197
+ }
198
+ }
199
+ /**
200
+ * 获取进程的打开文件
201
+ */
202
+ async openFiles(pid) {
203
+ if (!this.processConfig.includeOpenFiles) {
204
+ return this.createErrorResult(this.createUnsupportedError('process.openFiles (disabled in config)'));
205
+ }
206
+ const cacheKey = `process-openfiles-${pid}`;
207
+ return this.executeWithCache(cacheKey, async () => {
208
+ this.validatePlatformSupport('process.openFiles');
209
+ const rawData = await this.adapter.getProcessOpenFiles(pid);
210
+ return rawData || [];
211
+ }, this.processConfig.cacheTTL || 10000);
212
+ }
213
+ /**
214
+ * 获取进程的环境变量
215
+ */
216
+ async environment(pid) {
217
+ if (!this.processConfig.includeEnvironment) {
218
+ return this.createErrorResult(this.createUnsupportedError('process.environment (disabled in config)'));
219
+ }
220
+ const cacheKey = `process-env-${pid}`;
221
+ return this.executeWithCache(cacheKey, async () => {
222
+ this.validatePlatformSupport('process.environment');
223
+ const rawData = await this.adapter.getProcessEnvironment(pid);
224
+ return rawData || {};
225
+ }, this.processConfig.cacheTTL || 30000);
226
+ }
227
+ /**
228
+ * 配置是否包含子进程
229
+ */
230
+ withChildren(include) {
231
+ this.processConfig.includeChildren = include;
232
+ return this;
233
+ }
234
+ /**
235
+ * 配置是否包含线程信息
236
+ */
237
+ withThreads(include) {
238
+ this.processConfig.includeThreads = include;
239
+ return this;
240
+ }
241
+ /**
242
+ * 配置是否包含环境变量
243
+ */
244
+ withEnvironment(include) {
245
+ this.processConfig.includeEnvironment = include;
246
+ return this;
247
+ }
248
+ /**
249
+ * 配置是否包含打开文件
250
+ */
251
+ withOpenFiles(include) {
252
+ this.processConfig.includeOpenFiles = include;
253
+ return this;
254
+ }
255
+ /**
256
+ * 配置进程名称过滤
257
+ */
258
+ withNameFilter(filter) {
259
+ this.processConfig.nameFilter = filter;
260
+ return this;
261
+ }
262
+ /**
263
+ * 配置最大返回结果数
264
+ */
265
+ withMaxResults(max) {
266
+ this.processConfig.maxResults = max;
267
+ return this;
268
+ }
269
+ /**
270
+ * 配置目标进程 ID 列表
271
+ */
272
+ withPids(pids) {
273
+ this.processConfig.pids = pids;
274
+ return this;
275
+ }
276
+ /**
277
+ * 获取默认配置
278
+ */
279
+ getDefaultConfig() {
280
+ return {
281
+ interval: 5000,
282
+ timeout: 15000,
283
+ cacheEnabled: true,
284
+ cacheTTL: 3000,
285
+ samples: 1,
286
+ includeDetails: true,
287
+ includeChildren: false,
288
+ includeThreads: false,
289
+ includeEnvironment: false,
290
+ includeOpenFiles: false,
291
+ maxResults: 100 // 默认限制返回进程数以提高性能
292
+ };
293
+ }
294
+ // 私有转换方法
295
+ /**
296
+ * 转换进程列表
297
+ */
298
+ transformProcessList(rawData) {
299
+ if (!Array.isArray(rawData)) {
300
+ return [];
301
+ }
302
+ return rawData.map(process => this.transformProcessInfo(process));
303
+ }
304
+ /**
305
+ * 转换进程信息
306
+ */
307
+ transformProcessInfo(rawProcess) {
308
+ const startTime = this.parseStartTime(rawProcess.startTime || rawProcess.start_time);
309
+ const currentTime = Date.now();
310
+ const runtime = currentTime - startTime;
311
+ return {
312
+ pid: this.safeParseNumber(rawProcess.pid),
313
+ ppid: this.safeParseNumber(rawProcess.ppid),
314
+ name: rawProcess.name || rawProcess.comm || 'unknown',
315
+ command: rawProcess.command || rawProcess.cmd || rawProcess.args || '',
316
+ state: this.normalizeProcessState(rawProcess.state || rawProcess.status),
317
+ cpuUsage: this.safeParseNumber(rawProcess.cpuUsage || rawProcess.cpu),
318
+ memoryUsage: new types_1.DataSize(this.safeParseNumber(rawProcess.memoryUsage || rawProcess.memory || rawProcess.rss)),
319
+ memoryPercentage: this.safeParseNumber(rawProcess.memoryPercentage || rawProcess.mem),
320
+ startTime,
321
+ runtime,
322
+ priority: rawProcess.priority || rawProcess.pri,
323
+ nice: rawProcess.nice,
324
+ threads: rawProcess.threads || rawProcess.nlwp,
325
+ uid: rawProcess.uid,
326
+ gid: rawProcess.gid,
327
+ username: rawProcess.username || rawProcess.user
328
+ };
329
+ }
330
+ /**
331
+ * 应用过滤器
332
+ */
333
+ applyFilters(processes, options = {}) {
334
+ let filtered = [...processes];
335
+ // PID 过滤
336
+ if (this.processConfig.pids && this.processConfig.pids.length > 0) {
337
+ filtered = filtered.filter(process => this.processConfig.pids.includes(process.pid));
338
+ }
339
+ // 名称过滤
340
+ if (this.processConfig.nameFilter) {
341
+ const filter = this.processConfig.nameFilter.toLowerCase();
342
+ filtered = filtered.filter(process => process.name.toLowerCase().includes(filter) ||
343
+ process.command.toLowerCase().includes(filter));
344
+ }
345
+ // 限制结果数量
346
+ if (!options.skipLimit && this.processConfig.maxResults && this.processConfig.maxResults > 0) {
347
+ filtered = filtered.slice(0, this.processConfig.maxResults);
348
+ }
349
+ return filtered;
350
+ }
351
+ /**
352
+ * 构建进程树
353
+ */
354
+ buildProcessTree(processes, rootPid) {
355
+ const processMap = new Map();
356
+ const childrenMap = new Map();
357
+ // 建立进程映射
358
+ for (const process of processes) {
359
+ processMap.set(process.pid, process);
360
+ if (!childrenMap.has(process.ppid)) {
361
+ childrenMap.set(process.ppid, []);
362
+ }
363
+ childrenMap.get(process.ppid).push(process);
364
+ }
365
+ // 递归构建树
366
+ const buildNode = (pid) => {
367
+ const process = processMap.get(pid);
368
+ if (!process)
369
+ return null;
370
+ const children = childrenMap.get(pid) || [];
371
+ return {
372
+ ...process,
373
+ children: children.map(child => buildNode(child.pid)).filter(child => child !== null)
374
+ };
375
+ };
376
+ if (rootPid !== undefined) {
377
+ return buildNode(rootPid);
378
+ }
379
+ // 返回所有根进程(ppid 不在进程列表中的进程)
380
+ const rootProcesses = [];
381
+ for (const process of processes) {
382
+ if (!processMap.has(process.ppid)) {
383
+ rootProcesses.push(buildNode(process.pid));
384
+ }
385
+ }
386
+ return rootProcesses;
387
+ }
388
+ /**
389
+ * 规范化进程状态
390
+ */
391
+ normalizeProcessState(state) {
392
+ if (!state || typeof state !== 'string') {
393
+ return 'unknown';
394
+ }
395
+ const normalizedState = state.toLowerCase().trim();
396
+ // Linux 状态码
397
+ if (normalizedState === 'r' || normalizedState.includes('running')) {
398
+ return 'running';
399
+ }
400
+ if (normalizedState === 's' || normalizedState.includes('sleeping') || normalizedState.includes('sleep')) {
401
+ return 'sleeping';
402
+ }
403
+ if (normalizedState === 'd' || normalizedState.includes('waiting') || normalizedState.includes('wait')) {
404
+ return 'waiting';
405
+ }
406
+ if (normalizedState === 'z' || normalizedState.includes('zombie')) {
407
+ return 'zombie';
408
+ }
409
+ if (normalizedState === 't' || normalizedState.includes('stopped') || normalizedState.includes('stop')) {
410
+ return 'stopped';
411
+ }
412
+ // macOS/Windows 状态
413
+ if (normalizedState.includes('active') || normalizedState.includes('normal')) {
414
+ return 'running';
415
+ }
416
+ if (normalizedState.includes('idle')) {
417
+ return 'sleeping';
418
+ }
419
+ return 'unknown';
420
+ }
421
+ /**
422
+ * 解析启动时间
423
+ */
424
+ parseStartTime(startTime) {
425
+ if (typeof startTime === 'number') {
426
+ // 如果是时间戳
427
+ if (startTime > 1000000000000) {
428
+ // 毫秒时间戳
429
+ return startTime;
430
+ }
431
+ else {
432
+ // 秒时间戳
433
+ return startTime * 1000;
434
+ }
435
+ }
436
+ if (typeof startTime === 'string') {
437
+ const parsed = Date.parse(startTime);
438
+ if (!isNaN(parsed)) {
439
+ return parsed;
440
+ }
441
+ }
442
+ // 默认返回当前时间
443
+ return Date.now();
444
+ }
445
+ /**
446
+ * 安全解析数字
447
+ */
448
+ safeParseNumber(value) {
449
+ if (typeof value === 'number') {
450
+ return isNaN(value) ? 0 : value;
451
+ }
452
+ if (typeof value === 'string') {
453
+ const parsed = parseFloat(value);
454
+ return isNaN(parsed) ? 0 : parsed;
455
+ }
456
+ return 0;
457
+ }
458
+ }
459
+ exports.ProcessMonitor = ProcessMonitor;
460
+ //# sourceMappingURL=process-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-monitor.js","sourceRoot":"","sources":["../../../src/monitors/process-monitor.ts"],"names":[],"mappings":"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"}