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,316 @@
1
+ "use strict";
2
+ /**
3
+ * 测试基础工具类
4
+ * 提供跨平台的测试工具函数和平台检测功能
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.PerformanceMonitor = exports.TestAssertions = exports.skipOnPlatform = exports.platformTest = exports.longTest = exports.asyncTest = exports.TestConfig = exports.TestValidators = exports.PlatformUtils = void 0;
31
+ const os = __importStar(require("os"));
32
+ const chai_1 = require("chai");
33
+ /**
34
+ * 平台检测工具类
35
+ */
36
+ class PlatformUtils {
37
+ /**
38
+ * 检查是否为Linux系统
39
+ */
40
+ static isLinux() {
41
+ return os.platform() === 'linux';
42
+ }
43
+ /**
44
+ * 检查是否为macOS系统
45
+ */
46
+ static isMacOS() {
47
+ return os.platform() === 'darwin';
48
+ }
49
+ /**
50
+ * 检查是否为Windows系统
51
+ */
52
+ static isWindows() {
53
+ return os.platform() === 'win32';
54
+ }
55
+ /**
56
+ * 获取当前平台
57
+ */
58
+ static getCurrentPlatform() {
59
+ return os.platform();
60
+ }
61
+ /**
62
+ * 获取平台友好名称
63
+ */
64
+ static getPlatformName() {
65
+ const platform = os.platform();
66
+ switch (platform) {
67
+ case 'linux': return 'Linux';
68
+ case 'darwin': return 'macOS';
69
+ case 'win32': return 'Windows';
70
+ default: return platform;
71
+ }
72
+ }
73
+ }
74
+ exports.PlatformUtils = PlatformUtils;
75
+ /**
76
+ * 测试验证工具类
77
+ */
78
+ class TestValidators {
79
+ /**
80
+ * 检查是否为有效的数字
81
+ */
82
+ static isValidNumber(num) {
83
+ return typeof num === 'number' && !isNaN(num) && isFinite(num);
84
+ }
85
+ /**
86
+ * 检查是否为有效的百分比 (0-100)
87
+ */
88
+ static isValidPercentage(num) {
89
+ return this.isValidNumber(num) && num >= 0 && num <= 100;
90
+ }
91
+ /**
92
+ * 检查是否为正数
93
+ */
94
+ static isPositiveNumber(num) {
95
+ return this.isValidNumber(num) && num >= 0;
96
+ }
97
+ /**
98
+ * 检查是否为非空字符串
99
+ */
100
+ static isNonEmptyString(str) {
101
+ return typeof str === 'string' && str.length > 0;
102
+ }
103
+ /**
104
+ * 检查是否为有效的数组
105
+ */
106
+ static isValidArray(arr) {
107
+ return Array.isArray(arr);
108
+ }
109
+ /**
110
+ * 检查是否为有效的对象
111
+ */
112
+ static isValidObject(obj) {
113
+ return typeof obj === 'object' && obj !== null && !Array.isArray(obj);
114
+ }
115
+ }
116
+ exports.TestValidators = TestValidators;
117
+ /**
118
+ * 测试配置类
119
+ */
120
+ class TestConfig {
121
+ }
122
+ exports.TestConfig = TestConfig;
123
+ /**
124
+ * 默认超时时间
125
+ */
126
+ TestConfig.DEFAULT_TIMEOUT = 10000;
127
+ /**
128
+ * 长时间运行测试的超时时间
129
+ */
130
+ TestConfig.LONG_TIMEOUT = 30000;
131
+ /**
132
+ * 性能测试的最大执行时间
133
+ */
134
+ TestConfig.PERF_MAX_DURATION = 5000;
135
+ /**
136
+ * 内存测试的最大内存增长(MB)
137
+ */
138
+ TestConfig.MAX_MEMORY_INCREASE_MB = 10;
139
+ /**
140
+ * 异步测试装饰器
141
+ */
142
+ function asyncTest(testFn) {
143
+ return async function () {
144
+ this.timeout(TestConfig.DEFAULT_TIMEOUT);
145
+ await testFn.call(this);
146
+ };
147
+ }
148
+ exports.asyncTest = asyncTest;
149
+ /**
150
+ * 长时间测试装饰器
151
+ */
152
+ function longTest(testFn) {
153
+ return async function () {
154
+ this.timeout(TestConfig.LONG_TIMEOUT);
155
+ await testFn.call(this);
156
+ };
157
+ }
158
+ exports.longTest = longTest;
159
+ /**
160
+ * 平台条件测试装饰器
161
+ */
162
+ function platformTest(platforms, testFn) {
163
+ return function () {
164
+ const currentPlatform = os.platform();
165
+ if (!platforms.includes(currentPlatform)) {
166
+ this.skip();
167
+ return;
168
+ }
169
+ return testFn.call(this);
170
+ };
171
+ }
172
+ exports.platformTest = platformTest;
173
+ /**
174
+ * 跳过特定平台的测试装饰器
175
+ */
176
+ function skipOnPlatform(platforms, testFn) {
177
+ return function () {
178
+ const currentPlatform = os.platform();
179
+ if (platforms.includes(currentPlatform)) {
180
+ this.skip();
181
+ return;
182
+ }
183
+ return testFn.call(this);
184
+ };
185
+ }
186
+ exports.skipOnPlatform = skipOnPlatform;
187
+ /**
188
+ * 测试数据验证助手
189
+ */
190
+ class TestAssertions {
191
+ /**
192
+ * 断言系统信息对象的有效性
193
+ */
194
+ static assertSystemInfo(info, requiredFields) {
195
+ (0, chai_1.expect)(info).to.be.an('object');
196
+ for (const field of requiredFields) {
197
+ // 检查属性是否存在
198
+ (0, chai_1.expect)(info).to.have.property(field);
199
+ // 检查字段值是否为有效数字字符串或数字
200
+ const value = info[field];
201
+ if (typeof value === 'string') {
202
+ (0, chai_1.expect)(TestValidators.isValidNumber(parseFloat(value))).to.be.true;
203
+ (0, chai_1.expect)(parseFloat(value)).to.be.at.least(0, `${field} should be non-negative`);
204
+ }
205
+ else if (typeof value === 'number') {
206
+ (0, chai_1.expect)(TestValidators.isValidNumber(value)).to.be.true;
207
+ (0, chai_1.expect)(value).to.be.at.least(0, `${field} should be non-negative`);
208
+ }
209
+ else {
210
+ chai_1.expect.fail(`${field} should be a number or numeric string, got ${typeof value}: ${value}`);
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * 断言百分比字段的有效性
216
+ */
217
+ static assertPercentageFields(info, percentageFields) {
218
+ for (const field of percentageFields) {
219
+ const value = parseFloat(info[field]);
220
+ (0, chai_1.expect)(TestValidators.isValidPercentage(value)).to.be.true;
221
+ }
222
+ }
223
+ /**
224
+ * 断言内存信息的一致性
225
+ */
226
+ static assertMemoryConsistency(info) {
227
+ const used = parseFloat(info.usedMemMb || info.usedGb);
228
+ const free = parseFloat(info.freeMemMb || info.freeGb);
229
+ const total = parseFloat(info.totalMemMb || info.totalGb);
230
+ const usedPercentage = parseFloat(info.usedMemPercentage || info.usedPercentage);
231
+ const freePercentage = parseFloat(info.freeMemPercentage || info.freePercentage);
232
+ // 验证总和关系 - 增加容差以处理浮点数精度问题
233
+ (0, chai_1.expect)(Math.abs((used + free) - total)).to.be.lessThan(2, 'Used + Free should approximately equal Total');
234
+ (0, chai_1.expect)(Math.abs((usedPercentage + freePercentage) - 100)).to.be.lessThan(2, 'Percentages should sum to approximately 100');
235
+ }
236
+ /**
237
+ * 断言网络统计信息的有效性
238
+ */
239
+ static assertNetworkStats(stats) {
240
+ (0, chai_1.expect)(stats).to.be.an('array');
241
+ for (const stat of stats) {
242
+ (0, chai_1.expect)(stat).to.have.property('interface');
243
+ (0, chai_1.expect)(stat).to.have.property('inputBytes');
244
+ (0, chai_1.expect)(stat).to.have.property('outputBytes');
245
+ (0, chai_1.expect)(TestValidators.isNonEmptyString(stat.interface)).to.be.true;
246
+ (0, chai_1.expect)(TestValidators.isValidNumber(parseInt(stat.inputBytes))).to.be.true;
247
+ (0, chai_1.expect)(TestValidators.isValidNumber(parseInt(stat.outputBytes))).to.be.true;
248
+ (0, chai_1.expect)(parseInt(stat.inputBytes)).to.be.at.least(0);
249
+ (0, chai_1.expect)(parseInt(stat.outputBytes)).to.be.at.least(0);
250
+ }
251
+ }
252
+ }
253
+ exports.TestAssertions = TestAssertions;
254
+ /**
255
+ * 性能监控工具
256
+ */
257
+ class PerformanceMonitor {
258
+ constructor() {
259
+ this.timings = {};
260
+ this.startTime = Date.now();
261
+ this.startMemory = process.memoryUsage().heapUsed;
262
+ }
263
+ /**
264
+ * 获取执行时间(毫秒)
265
+ */
266
+ getExecutionTime() {
267
+ return Date.now() - this.startTime;
268
+ }
269
+ /**
270
+ * 获取内存使用增长(字节)
271
+ */
272
+ getMemoryIncrease() {
273
+ return process.memoryUsage().heapUsed - this.startMemory;
274
+ }
275
+ /**
276
+ * 验证性能是否在可接受范围内
277
+ */
278
+ assertPerformance(maxTimeMs = TestConfig.PERF_MAX_DURATION) {
279
+ const executionTime = this.getExecutionTime();
280
+ (0, chai_1.expect)(executionTime).to.be.lessThan(maxTimeMs, `Execution time ${executionTime}ms exceeded maximum ${maxTimeMs}ms`);
281
+ }
282
+ /**
283
+ * 验证内存使用是否在可接受范围内
284
+ */
285
+ assertMemoryUsage(maxIncreaseMB = TestConfig.MAX_MEMORY_INCREASE_MB) {
286
+ const memoryIncrease = this.getMemoryIncrease();
287
+ const memoryIncreaseMB = memoryIncrease / (1024 * 1024);
288
+ (0, chai_1.expect)(memoryIncreaseMB).to.be.lessThan(maxIncreaseMB, `Memory increase ${memoryIncreaseMB.toFixed(2)}MB exceeded maximum ${maxIncreaseMB}MB`);
289
+ }
290
+ /**
291
+ * 计时方法 - 执行函数并记录执行时间
292
+ */
293
+ async time(label, fn) {
294
+ const start = Date.now();
295
+ const result = await fn();
296
+ const end = Date.now();
297
+ this.timings[label] = end - start;
298
+ return result;
299
+ }
300
+ /**
301
+ * 获取所有计时报告
302
+ */
303
+ getReport() {
304
+ return { ...this.timings };
305
+ }
306
+ /**
307
+ * 重置所有计时记录
308
+ */
309
+ reset() {
310
+ this.timings = {};
311
+ this.startTime = Date.now();
312
+ this.startMemory = process.memoryUsage().heapUsed;
313
+ }
314
+ }
315
+ exports.PerformanceMonitor = PerformanceMonitor;
316
+ //# sourceMappingURL=test-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-base.js","sourceRoot":"","sources":["../../../test/utils/test-base.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,50 @@
1
1
  {
2
2
  "name": "node-os-utils",
3
- "version": "1.3.7",
4
- "description": "An operating system utility library.",
5
- "main": "index.js",
3
+ "version": "2.0.1-beta.2",
4
+ "description": "Advanced cross-platform operating system monitoring utilities with TypeScript support",
5
+ "main": "dist/src/index.js",
6
+ "types": "dist/src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "require": "./dist/src/index.js",
10
+ "import": "./dist/src/index.js",
11
+ "types": "./dist/src/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist/**/*",
16
+ "README.md",
17
+ "LICENSE",
18
+ "CHANGELOG.md"
19
+ ],
20
+ "engines": {
21
+ "node": ">=18.0.0"
22
+ },
6
23
  "scripts": {
7
- "test": "node_modules/.bin/mocha test/test.js"
24
+ "clean": "rimraf dist",
25
+ "build": "npm run clean && tsc",
26
+ "build:watch": "tsc --watch",
27
+ "dev": "tsc --watch",
28
+ "test": "npm run build && mocha 'dist/**/*.test.js'",
29
+ "test:unit": "mocha 'dist/test/unit/**/*.test.js'",
30
+ "test:integration": "mocha 'dist/test/integration/**/*.test.js'",
31
+ "test:platform": "npm run build && mocha 'dist/test/platform/**/*.test.js'",
32
+ "test:linux": "npm run build && mocha 'dist/test/platform/linux.test.js'",
33
+ "test:macos": "npm run build && mocha 'dist/test/platform/macos.test.js'",
34
+ "test:windows": "npm run build && mocha 'dist/test/platform/windows.test.js'",
35
+ "test:current-platform": "npm run build && node -e \"const os=require('os'); const platform=os.platform(); const map={linux:'test:linux',darwin:'test:macos',win32:'test:windows'}; const script=map[platform] || 'test'; console.log('Running tests for platform:', platform, '->', script); require('child_process').execSync('npm run ' + script, {stdio:'inherit'});\"",
36
+ "test:all-platforms": "npm run test:linux && npm run test:macos && npm run test:windows",
37
+ "test:coverage": "nyc npm test",
38
+ "test:coverage-platform": "nyc npm run test:platform",
39
+ "test:node18": "node --version && npm test",
40
+ "test:node20": "node --version && npm test",
41
+ "test:node22": "node --version && npm test",
42
+ "lint": "eslint src --ext .ts --fix",
43
+ "lint:check": "eslint src --ext .ts",
44
+ "docs": "typedoc src --out docs",
45
+ "publish:beta": "npm publish --tag beta",
46
+ "version:beta": "npm version prerelease --preid=beta",
47
+ "prepublishOnly": "npm run clean && npm run build && npm test"
8
48
  },
9
49
  "repository": {
10
50
  "type": "git",
@@ -14,26 +54,46 @@
14
54
  "name": "SunilWang",
15
55
  "email": "ahwangshu@qq.com"
16
56
  },
17
- "keywords": [
18
- "os",
19
- "operating system",
20
- "server",
21
- "netstat",
22
- "memory",
23
- "cpu",
24
- "monitor",
25
- "stats",
26
- "processes",
27
- "openfiles",
28
- "harddrive"
29
- ],
30
57
  "license": "MIT",
31
58
  "bugs": {
32
59
  "url": "https://github.com/SunilWang/node-os-utils/issues"
33
60
  },
34
61
  "homepage": "https://github.com/SunilWang/node-os-utils#readme",
62
+ "keywords": [
63
+ "os",
64
+ "system-monitor",
65
+ "monitoring",
66
+ "cpu",
67
+ "memory",
68
+ "disk",
69
+ "network",
70
+ "process-monitor",
71
+ "server-monitoring",
72
+ "typescript",
73
+ "cross-platform",
74
+ "linux",
75
+ "macos",
76
+ "windows",
77
+ "performance",
78
+ "metrics",
79
+ "realtime",
80
+ "observability",
81
+ "netstat",
82
+ "processes"
83
+ ],
35
84
  "devDependencies": {
36
- "mocha": "^6.2.3"
85
+ "typescript": "~5.4.0",
86
+ "@types/node": "~18.0.0",
87
+ "@types/mocha": "~10.0.0",
88
+ "@types/chai": "~4.3.0",
89
+ "mocha": "~10.0.0",
90
+ "chai": "~4.3.0",
91
+ "nyc": "~15.1.0",
92
+ "eslint": "~8.0.0",
93
+ "@typescript-eslint/eslint-plugin": "~6.0.0",
94
+ "@typescript-eslint/parser": "~6.0.0",
95
+ "typedoc": "~0.25.0",
96
+ "rimraf": "~5.0.0"
37
97
  },
38
98
  "dependencies": {}
39
99
  }
package/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: node_js
2
- node_js:
3
- - "8.15.1"
4
- - "12.18.0"
5
- - "14.16.0"
6
- script:
7
- - "npm run test"
package/index.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * author : Sunil Wang
3
- * createTime : 2017/7/9 18:29
4
- * description :
5
- */
6
-
7
- require('./lib/cpu')
8
- require('./lib/drive')
9
- require('./lib/mem')
10
- require('./lib/netstat')
11
- require('./lib/openfiles')
12
- require('./lib/osCmd')
13
- require('./lib/os')
14
- require('./lib/proc')
15
- require('./lib/users')
16
-
17
- module.exports = require('./lib/bucket')
package/lib/bucket.js DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * author : Sunil Wang
3
- * createTime : 2017/7/9 19:24
4
- * description :
5
- */
6
- module.exports = {
7
- options: {
8
- NOT_SUPPORTED_VALUE: 'not supported',
9
- INTERVAL: 1000
10
- },
11
- isNotSupported(res){
12
- return res === this.options.NOT_SUPPORTED_VALUE
13
- }
14
- }
package/lib/cpu.js DELETED
@@ -1,94 +0,0 @@
1
- /**
2
- * author : Sunil Wang
3
- * createTime : 2017/7/9 19:39
4
- * description :
5
- */
6
- var bucket = require('./bucket')
7
- var os = require('os')
8
-
9
- bucket.cpu = {
10
- average: function () {
11
- var totalIdle = 0
12
- var totalTick = 0
13
- var cpus = os.cpus()
14
-
15
- for (var i = 0, len = cpus.length; i < len; i++) {
16
- var cpu = cpus[i]
17
- for (var type in cpu.times) {
18
- totalTick += cpu.times[type]
19
- }
20
- totalIdle += cpu.times.idle
21
- }
22
-
23
- return {
24
- totalIdle: totalIdle,
25
- totalTick: totalTick,
26
- avgIdle: (totalIdle / cpus.length),
27
- avgTotal: (totalTick / cpus.length)
28
- }
29
- },
30
- usage: function (interval) {
31
- var self = this
32
-
33
- if (!interval) {
34
- interval = bucket.options.INTERVAL
35
- }
36
-
37
- return new Promise(function (resolve) {
38
- if (typeof interval !== 'number') {
39
- throw new TypeError('interval must be a number!')
40
- }
41
-
42
- var startMeasure = self.average()
43
-
44
- setTimeout(function () {
45
- var endMeasure = self.average()
46
- var idleDifference = endMeasure.avgIdle - startMeasure.avgIdle
47
- var totalDifference = endMeasure.avgTotal - startMeasure.avgTotal
48
- var cpuPercentage = (10000 - Math.round(10000 * idleDifference / totalDifference)) / 100
49
-
50
- return resolve(cpuPercentage)
51
- }, interval)
52
- })
53
- },
54
- free: function (interval) {
55
- var self = this
56
-
57
- if (!interval) {
58
- interval = bucket.options.INTERVAL
59
- }
60
-
61
- return new Promise(function (resolve) {
62
- if (typeof interval !== 'number') {
63
- throw new TypeError('interval must be a number!')
64
- }
65
-
66
- self.usage(interval)
67
- .then(function (cpuPercentage) {
68
- return resolve(100 - cpuPercentage)
69
- })
70
- })
71
- },
72
- count: function () {
73
- return os.cpus().length
74
- },
75
- model: function () {
76
- return os.cpus()[0].model
77
- },
78
- loadavg: function () {
79
- return os.loadavg()
80
- },
81
- loadavgTime: function (time) {
82
- time = parseInt(time, 10)
83
-
84
- var loads = os.loadavg()
85
-
86
- switch (time) {
87
- case 5:
88
- return loads[1]
89
- case 15:
90
- return loads[2]
91
- default: return loads[0]
92
- }
93
- }
94
- }
package/lib/drive.js DELETED
@@ -1,113 +0,0 @@
1
- /**
2
- * author : Sunil Wang
3
- * createTime : 2017/7/9 20:17
4
- * description :
5
- */
6
- var bucket = require('./bucket')
7
- var exec = require('./exec')
8
- var DISK_PATTERN = /^(\S+)\n?\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+?)\n/mg
9
-
10
- function createDiskInfo (headlineArgs, args) {
11
- var info = {}
12
-
13
- headlineArgs.forEach(function (h, i) {
14
- info[h] = args[i]
15
- })
16
-
17
- return info
18
- }
19
-
20
- function parseDfStdout (stdout) {
21
- var dfInfo = []
22
- var headline
23
-
24
- stdout.replace(DISK_PATTERN, function () {
25
- var args = Array.prototype.slice.call(arguments, 1, 7)
26
-
27
- if (arguments[7] === 0) {
28
- headline = args
29
- return
30
- }
31
- dfInfo.push(createDiskInfo(headline, args))
32
- })
33
-
34
- return dfInfo
35
- }
36
-
37
- bucket.drive = {
38
- info: function (diskName) {
39
- if (!diskName) {
40
- diskName = '/'
41
- }
42
-
43
- return exec('df -kP').then(function (out) {
44
- var diskInfo = null
45
- var main = null
46
- var lines = parseDfStdout(out)
47
-
48
- for (var i = 0; i < lines.length; i++) {
49
- if (lines[i]['Mounted on'] === diskName) {
50
- diskInfo = lines[i]
51
- continue
52
- }
53
-
54
- if (lines[i]['Mounted on'] === '/') {
55
- main = lines[i]
56
- continue
57
- }
58
- }
59
-
60
- if (diskInfo === null) {
61
- if (main === null) {
62
- throw new Error('disk name invalid and / not found')
63
- }
64
-
65
- console.info('disk name invalid, using / as default')
66
- diskInfo = main
67
- }
68
-
69
- var used = Math.ceil(diskInfo.Used * 1024 / Math.pow(1024, 2))
70
- var free = Math.ceil((diskInfo.Available || diskInfo.Avail) * 1024 / Math.pow(1024, 2))
71
- var total = used + free;
72
-
73
- var totalGb = (total / 1024).toFixed(1)
74
- var usedGb = (used / 1024).toFixed(1)
75
- var freeGb = (free / 1024).toFixed(1)
76
-
77
- var usedPercentage = (100 * used / total).toFixed(1)
78
- var freePercentage = (100 * free / total).toFixed(1)
79
-
80
- return Promise.resolve({
81
- totalGb: totalGb,
82
- usedGb: usedGb,
83
- freeGb: freeGb,
84
- usedPercentage: usedPercentage,
85
- freePercentage: freePercentage
86
- })
87
- })
88
- },
89
- free: function (diskName) {
90
- var self = this
91
-
92
- return self.info(diskName)
93
- .then(function (res) {
94
- return Promise.resolve({
95
- totalGb: res.totalGb,
96
- freeGb: res.freeGb,
97
- freePercentage: res.freePercentage
98
- })
99
- })
100
- },
101
- used: function (diskName) {
102
- var self = this
103
-
104
- return self.info(diskName)
105
- .then(function (res) {
106
- return Promise.resolve({
107
- totalGb: res.totalGb,
108
- usedGb: res.usedGb,
109
- usedPercentage: res.usedPercentage
110
- })
111
- })
112
- }
113
- }