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,586 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NetworkMonitor = void 0;
4
+ const base_monitor_1 = require("../core/base-monitor");
5
+ const types_1 = require("../types");
6
+ /**
7
+ * 网络监控器
8
+ *
9
+ * 提供网络相关的监控功能,包括接口信息、流量统计、连接状态等
10
+ */
11
+ class NetworkMonitor extends base_monitor_1.BaseMonitor {
12
+ // private previousStats: Map<string, NetworkStats> = new Map();
13
+ // private lastStatsTime: number = 0;
14
+ constructor(adapter, config = {}, cache) {
15
+ super(adapter, config, cache);
16
+ this.networkConfig = { ...this.getDefaultConfig(), ...config };
17
+ }
18
+ /**
19
+ * 获取网络接口信息(实现抽象方法)
20
+ */
21
+ async info() {
22
+ return this.interfaces();
23
+ }
24
+ /**
25
+ * 获取网络接口信息
26
+ */
27
+ async interfaces() {
28
+ const cacheKey = 'network-interfaces';
29
+ return this.executeWithCache(cacheKey, async () => {
30
+ this.validatePlatformSupport('network.interfaces');
31
+ const rawData = await this.adapter.getNetworkInterfaces();
32
+ return this.transformNetworkInterfaces(rawData);
33
+ }, this.networkConfig.cacheTTL || 10000);
34
+ }
35
+ /**
36
+ * 获取指定接口信息
37
+ */
38
+ async interfaceByName(name) {
39
+ const interfacesResult = await this.interfaces();
40
+ if (!interfacesResult.success || !interfacesResult.data) {
41
+ return interfacesResult;
42
+ }
43
+ const networkInterface = interfacesResult.data.find(iface => iface.name === name);
44
+ return this.createSuccessResult(networkInterface || null);
45
+ }
46
+ /**
47
+ * 获取网络统计信息(异步版本)
48
+ */
49
+ async statsAsync(options = {}) {
50
+ if (!this.networkConfig.includeInterfaceStats) {
51
+ return this.createErrorResult(this.createUnsupportedError('network.stats (disabled in config)'));
52
+ }
53
+ const cacheKey = 'network-stats';
54
+ const fetchStats = async () => {
55
+ this.validatePlatformSupport('network.stats');
56
+ const rawData = await this.adapter.getNetworkStats();
57
+ return this.transformNetworkStats(rawData);
58
+ };
59
+ if (options.skipCache) {
60
+ try {
61
+ const data = await fetchStats();
62
+ return this.createSuccessResult(data, false);
63
+ }
64
+ catch (error) {
65
+ return this.handleError(error);
66
+ }
67
+ }
68
+ return this.executeWithCache(cacheKey, fetchStats, this.networkConfig.cacheTTL || 2000 // 统计信息缓存较短
69
+ );
70
+ }
71
+ /**
72
+ * 获取指定接口的统计信息
73
+ */
74
+ async statsByInterface(interfaceName) {
75
+ const statsResult = await this.statsAsync();
76
+ if (!statsResult.success || !statsResult.data) {
77
+ return statsResult;
78
+ }
79
+ const stats = statsResult.data.find(stat => stat.interface === interfaceName);
80
+ return this.createSuccessResult(stats || null);
81
+ }
82
+ /**
83
+ * 获取带宽使用情况(需要两次测量)
84
+ */
85
+ async bandwidth() {
86
+ if (!this.networkConfig.includeBandwidth) {
87
+ return this.createErrorResult(this.createUnsupportedError('network.bandwidth (disabled in config)'));
88
+ }
89
+ const interval = this.networkConfig.bandwidthInterval || 1000;
90
+ // 第一次测量
91
+ const firstStatsResult = await this.statsAsync({ skipCache: true });
92
+ if (!firstStatsResult.success || !firstStatsResult.data) {
93
+ throw new Error('Failed to get network stats for bandwidth calculation');
94
+ }
95
+ // 等待指定间隔
96
+ await new Promise(resolve => setTimeout(resolve, interval));
97
+ // 第二次测量
98
+ const secondStatsResult = await this.statsAsync({ skipCache: true });
99
+ if (!secondStatsResult.success || !secondStatsResult.data) {
100
+ throw new Error('Failed to get second network stats for bandwidth calculation');
101
+ }
102
+ // 计算带宽
103
+ const bandwidth = this.calculateBandwidth(firstStatsResult.data, secondStatsResult.data, interval);
104
+ return this.createSuccessResult({
105
+ interval,
106
+ interfaces: bandwidth
107
+ });
108
+ }
109
+ /**
110
+ * 获取活跃的网络连接
111
+ */
112
+ async connections() {
113
+ if (!this.networkConfig.includeConnections) {
114
+ return this.createErrorResult(this.createUnsupportedError('network.connections (disabled in config)'));
115
+ }
116
+ const cacheKey = 'network-connections';
117
+ return this.executeWithCache(cacheKey, async () => {
118
+ this.validatePlatformSupport('network.connections');
119
+ const rawData = await this.adapter.getNetworkConnections();
120
+ return this.transformNetworkConnections(rawData);
121
+ }, this.networkConfig.cacheTTL || 5000);
122
+ }
123
+ /**
124
+ * 获取默认网关信息
125
+ */
126
+ async gateway() {
127
+ const cacheKey = 'network-gateway';
128
+ return this.executeWithCache(cacheKey, async () => {
129
+ this.validatePlatformSupport('network.gateway');
130
+ const rawData = await this.adapter.getDefaultGateway();
131
+ return this.transformGatewayInfo(rawData);
132
+ }, this.networkConfig.cacheTTL || 30000);
133
+ }
134
+ /**
135
+ * 获取公网 IP 地址
136
+ */
137
+ async publicIP() {
138
+ const cacheKey = 'network-public-ip';
139
+ return this.executeWithCache(cacheKey, async () => {
140
+ // 这个功能可能需要外部服务,暂时返回空结果
141
+ return {
142
+ ipv4: undefined,
143
+ ipv6: undefined
144
+ };
145
+ }, this.networkConfig.cacheTTL || 300000 // 公网 IP 缓存 5 分钟
146
+ );
147
+ }
148
+ /**
149
+ * 网络健康检查
150
+ */
151
+ async healthCheck() {
152
+ const cacheKey = 'network-health';
153
+ return this.executeWithCache(cacheKey, async () => {
154
+ const issues = [];
155
+ const checks = {
156
+ interfaceStatus: true,
157
+ connectivity: true,
158
+ performance: true
159
+ };
160
+ // 检查网络接口状态
161
+ try {
162
+ const interfacesResult = await this.interfaces();
163
+ if (interfacesResult.success && interfacesResult.data) {
164
+ const activeInterfaces = interfacesResult.data.filter(iface => iface.state === 'up' && !iface.internal);
165
+ if (activeInterfaces.length === 0) {
166
+ issues.push('No active network interfaces found');
167
+ checks.interfaceStatus = false;
168
+ }
169
+ // 检查是否有错误率高的接口
170
+ if (this.networkConfig.includeInterfaceStats) {
171
+ const statsResult = await this.statsAsync();
172
+ if (statsResult.success && statsResult.data) {
173
+ for (const stats of statsResult.data) {
174
+ const totalPackets = stats.rxPackets + stats.txPackets;
175
+ const totalErrors = stats.rxErrors + stats.txErrors;
176
+ const errorRate = totalPackets > 0 ? (totalErrors / totalPackets) * 100 : 0;
177
+ if (errorRate > 5) {
178
+ issues.push(`High error rate on interface ${stats.interface}: ${errorRate.toFixed(2)}%`);
179
+ checks.performance = false;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ catch (error) {
187
+ issues.push('Failed to check network interface status');
188
+ checks.interfaceStatus = false;
189
+ }
190
+ // 检查默认网关连通性
191
+ try {
192
+ const gatewayResult = await this.gateway();
193
+ if (!gatewayResult.success || !gatewayResult.data) {
194
+ issues.push('No default gateway configured');
195
+ checks.connectivity = false;
196
+ }
197
+ }
198
+ catch (error) {
199
+ issues.push('Failed to get gateway information');
200
+ checks.connectivity = false;
201
+ }
202
+ // 确定整体健康状态
203
+ let status = 'healthy';
204
+ if (!checks.interfaceStatus || !checks.connectivity) {
205
+ status = 'critical';
206
+ }
207
+ else if (!checks.performance || issues.length > 0) {
208
+ status = 'warning';
209
+ }
210
+ return {
211
+ status,
212
+ issues,
213
+ checks
214
+ };
215
+ }, this.networkConfig.cacheTTL || 30000);
216
+ }
217
+ /**
218
+ * 获取网络总览信息
219
+ */
220
+ async overview() {
221
+ const cacheKey = 'network-overview';
222
+ return this.executeWithCache(cacheKey, async () => {
223
+ const [interfacesResult, statsResult] = await Promise.all([
224
+ this.interfaces(),
225
+ this.statsAsync().catch(() => ({ success: false, data: null }))
226
+ ]);
227
+ if (!interfacesResult.success || !interfacesResult.data) {
228
+ throw new Error('Failed to get network interfaces');
229
+ }
230
+ const interfaces = interfacesResult.data;
231
+ const activeInterfaces = interfaces.filter(iface => iface.state === 'up' && !iface.internal).length;
232
+ let totalRxBytes = 0;
233
+ let totalTxBytes = 0;
234
+ let totalPackets = 0;
235
+ let totalErrors = 0;
236
+ if (statsResult.success && statsResult.data) {
237
+ for (const stats of statsResult.data) {
238
+ totalRxBytes += stats.rxBytes.toBytes();
239
+ totalTxBytes += stats.txBytes.toBytes();
240
+ totalPackets += stats.rxPackets + stats.txPackets;
241
+ totalErrors += stats.rxErrors + stats.txErrors;
242
+ }
243
+ }
244
+ return {
245
+ interfaces: interfaces.length,
246
+ activeInterfaces,
247
+ totalRxBytes: new types_1.DataSize(totalRxBytes),
248
+ totalTxBytes: new types_1.DataSize(totalTxBytes),
249
+ totalPackets,
250
+ totalErrors
251
+ };
252
+ }, this.networkConfig.cacheTTL || 10000);
253
+ }
254
+ /**
255
+ * 配置是否包含接口统计
256
+ */
257
+ withInterfaceStats(include) {
258
+ this.networkConfig.includeInterfaceStats = include;
259
+ return this;
260
+ }
261
+ /**
262
+ * 配置是否包含连接信息
263
+ */
264
+ withConnections(include) {
265
+ this.networkConfig.includeConnections = include;
266
+ return this;
267
+ }
268
+ /**
269
+ * 配置是否包含带宽监控
270
+ */
271
+ withBandwidth(include) {
272
+ this.networkConfig.includeBandwidth = include;
273
+ return this;
274
+ }
275
+ /**
276
+ * 配置目标网络接口
277
+ */
278
+ withInterfaces(interfaces) {
279
+ this.networkConfig.interfaces = interfaces;
280
+ return this;
281
+ }
282
+ /**
283
+ * 配置带宽监控间隔
284
+ */
285
+ withBandwidthInterval(interval) {
286
+ this.networkConfig.bandwidthInterval = interval;
287
+ return this;
288
+ }
289
+ /**
290
+ * 获取默认配置
291
+ */
292
+ getDefaultConfig() {
293
+ return {
294
+ interval: 2000,
295
+ timeout: 10000,
296
+ cacheEnabled: true,
297
+ cacheTTL: 5000,
298
+ samples: 1,
299
+ includeDetails: true,
300
+ includeInterfaceStats: true,
301
+ includeConnections: false, // 连接信息可能较多,默认不包含
302
+ includeBandwidth: false, // 带宽监控需要额外计算,默认不包含
303
+ bandwidthInterval: 1000,
304
+ unit: 'auto'
305
+ };
306
+ }
307
+ // 私有转换方法
308
+ /**
309
+ * 转换网络接口信息
310
+ */
311
+ /**
312
+ * 将平台适配器返回的原始接口数据统一转换为 NetworkInterface 结构
313
+ * 支持 Node.js os.networkInterfaces() 返回的对象以及适配器自定义的数组格式
314
+ */
315
+ transformNetworkInterfaces(rawData) {
316
+ if (!rawData) {
317
+ return [];
318
+ }
319
+ /**
320
+ * 收集单个网卡的信息并写入结果数组
321
+ */
322
+ const addInterface = (name, addresses, raw) => {
323
+ if (!Array.isArray(addresses) || addresses.length === 0) {
324
+ return;
325
+ }
326
+ const transformedAddresses = addresses.map((addr) => ({
327
+ address: addr.address || '',
328
+ netmask: addr.netmask || '',
329
+ family: addr.family === 'IPv6' || addr.family === 6 ? 'IPv6' : 'IPv4',
330
+ internal: addr.internal || false,
331
+ scopeid: addr.scopeid
332
+ }));
333
+ const firstAddr = addresses[0];
334
+ const rawState = raw?.state ?? raw?.operstate ?? raw?.status;
335
+ const networkInterface = {
336
+ name,
337
+ addresses: transformedAddresses,
338
+ mac: firstAddr?.mac || '',
339
+ state: this.normalizeInterfaceState(rawState, firstAddr),
340
+ type: this.inferInterfaceType(name),
341
+ mtu: firstAddr?.mtu || 1500,
342
+ internal: Boolean(raw?.internal ?? firstAddr?.internal ?? false),
343
+ speed: firstAddr?.speed,
344
+ duplex: firstAddr?.duplex
345
+ };
346
+ if (this.shouldIncludeInterface(networkInterface)) {
347
+ interfaces.push(networkInterface);
348
+ }
349
+ };
350
+ const interfaces = [];
351
+ if (Array.isArray(rawData)) {
352
+ for (const item of rawData) {
353
+ if (!item || typeof item !== 'object')
354
+ continue;
355
+ const name = item.name || item.interface;
356
+ if (!name)
357
+ continue;
358
+ const addresses = Array.isArray(item.addresses)
359
+ ? item.addresses
360
+ : [{
361
+ address: item.address,
362
+ netmask: item.netmask,
363
+ family: item.family,
364
+ internal: item.internal,
365
+ mac: item.mac,
366
+ mtu: item.mtu,
367
+ scopeid: item.scopeid
368
+ }];
369
+ addInterface(name, addresses, item);
370
+ }
371
+ return interfaces;
372
+ }
373
+ if (typeof rawData === 'object') {
374
+ for (const [name, addresses] of Object.entries(rawData)) {
375
+ addInterface(name, addresses, rawData[name]);
376
+ }
377
+ }
378
+ return interfaces;
379
+ }
380
+ /**
381
+ * 转换网络统计信息
382
+ */
383
+ transformNetworkStats(rawData) {
384
+ if (!Array.isArray(rawData)) {
385
+ return [];
386
+ }
387
+ return rawData
388
+ .filter(stats => this.shouldIncludeInterface({ name: stats.interface }))
389
+ .map(stats => ({
390
+ interface: stats.interface || stats.name || 'unknown',
391
+ rxBytes: new types_1.DataSize(this.safeParseNumber(stats.rxBytes || stats.rx_bytes)),
392
+ txBytes: new types_1.DataSize(this.safeParseNumber(stats.txBytes || stats.tx_bytes)),
393
+ rxPackets: this.safeParseNumber(stats.rxPackets || stats.rx_packets),
394
+ txPackets: this.safeParseNumber(stats.txPackets || stats.tx_packets),
395
+ rxErrors: this.safeParseNumber(stats.rxErrors || stats.rx_errors),
396
+ txErrors: this.safeParseNumber(stats.txErrors || stats.tx_errors),
397
+ rxDropped: this.safeParseNumber(stats.rxDropped || stats.rx_dropped),
398
+ txDropped: this.safeParseNumber(stats.txDropped || stats.tx_dropped),
399
+ rxSpeed: stats.rxSpeed,
400
+ txSpeed: stats.txSpeed
401
+ }));
402
+ }
403
+ /**
404
+ * 转换网络连接信息
405
+ */
406
+ transformNetworkConnections(rawData) {
407
+ if (!Array.isArray(rawData)) {
408
+ return [];
409
+ }
410
+ return rawData.map(conn => ({
411
+ protocol: conn.protocol || 'unknown',
412
+ localAddress: conn.localAddress || conn.local_address,
413
+ localPort: conn.localPort || conn.local_port,
414
+ remoteAddress: conn.remoteAddress || conn.remote_address,
415
+ remotePort: conn.remotePort || conn.remote_port,
416
+ state: conn.state || 'unknown',
417
+ pid: conn.pid
418
+ }));
419
+ }
420
+ /**
421
+ * 转换网关信息
422
+ */
423
+ transformGatewayInfo(rawData) {
424
+ // 网关信息在 Linux 点对点链路中可能只有接口(例如 `default dev ppp0`),此时仍视为有效路由
425
+ if (!rawData || (rawData.gateway == null && rawData.interface == null && rawData.iface == null && rawData.device == null)) {
426
+ return null;
427
+ }
428
+ return {
429
+ // 优先使用显式网关地址,若缺失则回退到 `address` 字段,保持与适配器输出一致
430
+ gateway: rawData.gateway ?? rawData.address ?? null,
431
+ // 兼容不同平台字段命名(interface/iface/device),确保能准确识别默认出口
432
+ interface: rawData.interface || rawData.iface || rawData.device || 'unknown'
433
+ };
434
+ }
435
+ /**
436
+ * 计算带宽
437
+ */
438
+ calculateBandwidth(firstStats, secondStats, intervalMs) {
439
+ const results = [];
440
+ for (const firstStat of firstStats) {
441
+ const secondStat = secondStats.find(s => s.interface === firstStat.interface);
442
+ if (!secondStat)
443
+ continue;
444
+ const intervalSec = intervalMs / 1000;
445
+ const rxDiff = secondStat.rxBytes.toBytes() - firstStat.rxBytes.toBytes();
446
+ const txDiff = secondStat.txBytes.toBytes() - firstStat.txBytes.toBytes();
447
+ const rxSpeed = Math.max(0, rxDiff / intervalSec); // 字节/秒
448
+ const txSpeed = Math.max(0, txDiff / intervalSec); // 字节/秒
449
+ results.push({
450
+ interface: firstStat.interface,
451
+ rxSpeed,
452
+ txSpeed,
453
+ rxSpeedFormatted: new types_1.DataSize(rxSpeed).toString(this.networkConfig.unit || 'auto') + '/s',
454
+ txSpeedFormatted: new types_1.DataSize(txSpeed).toString(this.networkConfig.unit || 'auto') + '/s'
455
+ });
456
+ }
457
+ return results;
458
+ }
459
+ /**
460
+ * 推断接口状态
461
+ */
462
+ inferInterfaceState(addr) {
463
+ // 如果有地址且不是内部接口,通常表示接口是活跃的
464
+ if (addr && addr.address && !addr.internal) {
465
+ return 'up';
466
+ }
467
+ // 内部接口(如回环)通常也是活跃的
468
+ if (addr && addr.internal && addr.address) {
469
+ return 'up';
470
+ }
471
+ return 'unknown';
472
+ }
473
+ /**
474
+ * 推断接口类型
475
+ */
476
+ inferInterfaceType(name) {
477
+ const lowerName = name.toLowerCase();
478
+ if (lowerName.includes('lo') || lowerName.includes('loopback')) {
479
+ return 'loopback';
480
+ }
481
+ if (lowerName.includes('wifi') || lowerName.includes('wlan') || lowerName.includes('wireless')) {
482
+ return 'wifi';
483
+ }
484
+ if (lowerName.includes('eth') || lowerName.includes('en')) {
485
+ return 'ethernet';
486
+ }
487
+ if (lowerName.includes('virt') || lowerName.includes('docker') || lowerName.includes('br-')) {
488
+ return 'virtual';
489
+ }
490
+ return 'other';
491
+ }
492
+ /**
493
+ * 判断是否应该包含该接口
494
+ */
495
+ shouldIncludeInterface(networkInterface) {
496
+ // 如果配置了特定接口列表,只包含这些接口
497
+ if (this.networkConfig.interfaces && this.networkConfig.interfaces.length > 0) {
498
+ return this.networkConfig.interfaces.includes(networkInterface.name);
499
+ }
500
+ return true;
501
+ }
502
+ normalizeInterfaceState(rawState, addr) {
503
+ // 直接复用适配器给出的状态,若不存在则回退到地址推断以保留兼容性
504
+ if (typeof rawState === 'string') {
505
+ const normalized = rawState.toLowerCase();
506
+ if (/(up|running|active|online)/.test(normalized)) {
507
+ return 'up';
508
+ }
509
+ if (/(down|inactive|disabled|offline)/.test(normalized)) {
510
+ return 'down';
511
+ }
512
+ }
513
+ return this.inferInterfaceState(addr);
514
+ }
515
+ /**
516
+ * 安全解析数字
517
+ */
518
+ safeParseNumber(value) {
519
+ if (typeof value === 'number') {
520
+ return isNaN(value) ? 0 : value;
521
+ }
522
+ if (typeof value === 'string') {
523
+ const parsed = parseFloat(value);
524
+ return isNaN(parsed) ? 0 : parsed;
525
+ }
526
+ return 0;
527
+ }
528
+ // ==================== 向后兼容的同步方法 ====================
529
+ /**
530
+ * 获取网络流量统计(同步版本,向后兼容)
531
+ * @param interval 监控间隔(毫秒)
532
+ * @returns 网络流量统计对象或 'not supported'
533
+ */
534
+ inOut(interval = 1000) {
535
+ try {
536
+ // 对于同步版本,无法进行实际的网络监控
537
+ // 返回基本结构,实际值需要通过异步方法获取
538
+ return {
539
+ total: {
540
+ inputMb: 0,
541
+ outputMb: 0
542
+ },
543
+ inputMb: 0,
544
+ outputMb: 0
545
+ };
546
+ }
547
+ catch (error) {
548
+ return 'not supported';
549
+ }
550
+ }
551
+ /**
552
+ * 获取网络统计信息(同步版本,向后兼容)
553
+ * @returns 网络统计信息数组或 'not supported'
554
+ */
555
+ stats() {
556
+ try {
557
+ // 对于同步版本,返回基本的网络接口信息
558
+ const os = require('os');
559
+ const interfaces = os.networkInterfaces();
560
+ const result = [];
561
+ for (const [name, addresses] of Object.entries(interfaces)) {
562
+ if (Array.isArray(addresses) && addresses.length > 0) {
563
+ const addr = addresses[0];
564
+ result.push({
565
+ iface: name,
566
+ operstate: addr.internal ? 'down' : 'up',
567
+ rx_bytes: 0,
568
+ rx_dropped: 0,
569
+ rx_errors: 0,
570
+ tx_bytes: 0,
571
+ tx_dropped: 0,
572
+ tx_errors: 0,
573
+ internal: addr.internal,
574
+ address: addr.address
575
+ });
576
+ }
577
+ }
578
+ return result;
579
+ }
580
+ catch (error) {
581
+ return 'not supported';
582
+ }
583
+ }
584
+ }
585
+ exports.NetworkMonitor = NetworkMonitor;
586
+ //# sourceMappingURL=network-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-monitor.js","sourceRoot":"","sources":["../../../src/monitors/network-monitor.ts"],"names":[],"mappings":"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"}