polyv-live-cli 1.1.4 → 1.1.7

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 (329) hide show
  1. package/dist/commands/account.commands.d.ts +3 -0
  2. package/dist/commands/account.commands.d.ts.map +1 -0
  3. package/dist/commands/account.commands.js +386 -0
  4. package/dist/commands/account.commands.js.map +1 -0
  5. package/dist/commands/channel.commands.d.ts.map +1 -1
  6. package/dist/commands/channel.commands.js +84 -60
  7. package/dist/commands/channel.commands.js.map +1 -1
  8. package/dist/commands/index.d.ts +3 -0
  9. package/dist/commands/index.d.ts.map +1 -1
  10. package/dist/commands/index.js +7 -1
  11. package/dist/commands/index.js.map +1 -1
  12. package/dist/commands/monitor.commands.d.ts +12 -0
  13. package/dist/commands/monitor.commands.d.ts.map +1 -0
  14. package/dist/commands/monitor.commands.js +75 -0
  15. package/dist/commands/monitor.commands.js.map +1 -0
  16. package/dist/commands/stream.commands.d.ts.map +1 -1
  17. package/dist/commands/stream.commands.js +141 -63
  18. package/dist/commands/stream.commands.js.map +1 -1
  19. package/dist/commands/use.commands.d.ts +9 -0
  20. package/dist/commands/use.commands.d.ts.map +1 -0
  21. package/dist/commands/use.commands.js +66 -0
  22. package/dist/commands/use.commands.js.map +1 -0
  23. package/dist/components/alert.panel.d.ts +98 -0
  24. package/dist/components/alert.panel.d.ts.map +1 -0
  25. package/dist/components/alert.panel.js +1001 -0
  26. package/dist/components/alert.panel.js.map +1 -0
  27. package/dist/components/base.component.d.ts +61 -0
  28. package/dist/components/base.component.d.ts.map +1 -0
  29. package/dist/components/base.component.js +346 -0
  30. package/dist/components/base.component.js.map +1 -0
  31. package/dist/components/batch-operations.dialog.d.ts +58 -0
  32. package/dist/components/batch-operations.dialog.d.ts.map +1 -0
  33. package/dist/components/batch-operations.dialog.js +340 -0
  34. package/dist/components/batch-operations.dialog.js.map +1 -0
  35. package/dist/components/channel-details.popup.d.ts +55 -0
  36. package/dist/components/channel-details.popup.d.ts.map +1 -0
  37. package/dist/components/channel-details.popup.js +416 -0
  38. package/dist/components/channel-details.popup.js.map +1 -0
  39. package/dist/components/channel-status.panel.d.ts +129 -0
  40. package/dist/components/channel-status.panel.d.ts.map +1 -0
  41. package/dist/components/channel-status.panel.js +858 -0
  42. package/dist/components/channel-status.panel.js.map +1 -0
  43. package/dist/components/component-registry.d.ts +36 -0
  44. package/dist/components/component-registry.d.ts.map +1 -0
  45. package/dist/components/component-registry.js +119 -0
  46. package/dist/components/component-registry.js.map +1 -0
  47. package/dist/components/context-menu-factory.d.ts +13 -0
  48. package/dist/components/context-menu-factory.d.ts.map +1 -0
  49. package/dist/components/context-menu-factory.js +341 -0
  50. package/dist/components/context-menu-factory.js.map +1 -0
  51. package/dist/components/context-menu.d.ts +54 -0
  52. package/dist/components/context-menu.d.ts.map +1 -0
  53. package/dist/components/context-menu.js +235 -0
  54. package/dist/components/context-menu.js.map +1 -0
  55. package/dist/components/grid-manager.d.ts +52 -0
  56. package/dist/components/grid-manager.d.ts.map +1 -0
  57. package/dist/components/grid-manager.js +404 -0
  58. package/dist/components/grid-manager.js.map +1 -0
  59. package/dist/components/help-panel.d.ts +34 -0
  60. package/dist/components/help-panel.d.ts.map +1 -0
  61. package/dist/components/help-panel.js +249 -0
  62. package/dist/components/help-panel.js.map +1 -0
  63. package/dist/components/index.d.ts +21 -0
  64. package/dist/components/index.d.ts.map +1 -0
  65. package/dist/components/index.js +43 -0
  66. package/dist/components/index.js.map +1 -0
  67. package/dist/components/interaction-manager.d.ts +47 -0
  68. package/dist/components/interaction-manager.d.ts.map +1 -0
  69. package/dist/components/interaction-manager.js +597 -0
  70. package/dist/components/interaction-manager.js.map +1 -0
  71. package/dist/components/layout-manager.d.ts +76 -0
  72. package/dist/components/layout-manager.d.ts.map +1 -0
  73. package/dist/components/layout-manager.js +538 -0
  74. package/dist/components/layout-manager.js.map +1 -0
  75. package/dist/components/monitoring-dashboard.d.ts +85 -0
  76. package/dist/components/monitoring-dashboard.d.ts.map +1 -0
  77. package/dist/components/monitoring-dashboard.js +908 -0
  78. package/dist/components/monitoring-dashboard.js.map +1 -0
  79. package/dist/components/search-panel.d.ts +80 -0
  80. package/dist/components/search-panel.d.ts.map +1 -0
  81. package/dist/components/search-panel.js +585 -0
  82. package/dist/components/search-panel.js.map +1 -0
  83. package/dist/components/status-bar.d.ts +77 -0
  84. package/dist/components/status-bar.d.ts.map +1 -0
  85. package/dist/components/status-bar.js +482 -0
  86. package/dist/components/status-bar.js.map +1 -0
  87. package/dist/components/status.component.d.ts +16 -0
  88. package/dist/components/status.component.d.ts.map +1 -0
  89. package/dist/components/status.component.js +79 -0
  90. package/dist/components/status.component.js.map +1 -0
  91. package/dist/components/stream-metrics.panel.d.ts +86 -0
  92. package/dist/components/stream-metrics.panel.d.ts.map +1 -0
  93. package/dist/components/stream-metrics.panel.js +395 -0
  94. package/dist/components/stream-metrics.panel.js.map +1 -0
  95. package/dist/components/system-resource.panel.d.ts +78 -0
  96. package/dist/components/system-resource.panel.d.ts.map +1 -0
  97. package/dist/components/system-resource.panel.js +642 -0
  98. package/dist/components/system-resource.panel.js.map +1 -0
  99. package/dist/components/tooltip.d.ts +35 -0
  100. package/dist/components/tooltip.d.ts.map +1 -0
  101. package/dist/components/tooltip.js +156 -0
  102. package/dist/components/tooltip.js.map +1 -0
  103. package/dist/config/account-config.d.ts +27 -0
  104. package/dist/config/account-config.d.ts.map +1 -0
  105. package/dist/config/account-config.js +358 -0
  106. package/dist/config/account-config.js.map +1 -0
  107. package/dist/config/account-crypto.d.ts +17 -0
  108. package/dist/config/account-crypto.d.ts.map +1 -0
  109. package/dist/config/account-crypto.js +129 -0
  110. package/dist/config/account-crypto.js.map +1 -0
  111. package/dist/config/account-encryption.d.ts +35 -0
  112. package/dist/config/account-encryption.d.ts.map +1 -0
  113. package/dist/config/account-encryption.js +207 -0
  114. package/dist/config/account-encryption.js.map +1 -0
  115. package/dist/config/auth-adapter.d.ts +23 -0
  116. package/dist/config/auth-adapter.d.ts.map +1 -0
  117. package/dist/config/auth-adapter.js +49 -0
  118. package/dist/config/auth-adapter.js.map +1 -0
  119. package/dist/config/auth-provider.d.ts +27 -0
  120. package/dist/config/auth-provider.d.ts.map +1 -0
  121. package/dist/config/auth-provider.js +54 -0
  122. package/dist/config/auth-provider.js.map +1 -0
  123. package/dist/config/auth-source-manager.d.ts +61 -0
  124. package/dist/config/auth-source-manager.d.ts.map +1 -0
  125. package/dist/config/auth-source-manager.js +402 -0
  126. package/dist/config/auth-source-manager.js.map +1 -0
  127. package/dist/config/config-io.d.ts +63 -0
  128. package/dist/config/config-io.d.ts.map +1 -0
  129. package/dist/config/config-io.js +352 -0
  130. package/dist/config/config-io.js.map +1 -0
  131. package/dist/config/config-manager.d.ts +51 -0
  132. package/dist/config/config-manager.d.ts.map +1 -0
  133. package/dist/config/config-manager.js +404 -0
  134. package/dist/config/config-manager.js.map +1 -0
  135. package/dist/config/config-recovery-manager.d.ts +67 -0
  136. package/dist/config/config-recovery-manager.d.ts.map +1 -0
  137. package/dist/config/config-recovery-manager.js +593 -0
  138. package/dist/config/config-recovery-manager.js.map +1 -0
  139. package/dist/config/config-validator.d.ts +27 -0
  140. package/dist/config/config-validator.d.ts.map +1 -0
  141. package/dist/config/config-validator.js +421 -0
  142. package/dist/config/config-validator.js.map +1 -0
  143. package/dist/config/config-version-manager.d.ts +44 -0
  144. package/dist/config/config-version-manager.d.ts.map +1 -0
  145. package/dist/config/config-version-manager.js +319 -0
  146. package/dist/config/config-version-manager.js.map +1 -0
  147. package/dist/config/custom-theme-builder.d.ts +88 -0
  148. package/dist/config/custom-theme-builder.d.ts.map +1 -0
  149. package/dist/config/custom-theme-builder.js +458 -0
  150. package/dist/config/custom-theme-builder.js.map +1 -0
  151. package/dist/config/file-permission-manager.d.ts +41 -0
  152. package/dist/config/file-permission-manager.d.ts.map +1 -0
  153. package/dist/config/file-permission-manager.js +290 -0
  154. package/dist/config/file-permission-manager.js.map +1 -0
  155. package/dist/config/layout-manager.d.ts +60 -0
  156. package/dist/config/layout-manager.d.ts.map +1 -0
  157. package/dist/config/layout-manager.js +596 -0
  158. package/dist/config/layout-manager.js.map +1 -0
  159. package/dist/config/monitoring.d.ts +27 -0
  160. package/dist/config/monitoring.d.ts.map +1 -0
  161. package/dist/config/monitoring.js +276 -0
  162. package/dist/config/monitoring.js.map +1 -0
  163. package/dist/config/secure-account-manager.d.ts +54 -0
  164. package/dist/config/secure-account-manager.d.ts.map +1 -0
  165. package/dist/config/secure-account-manager.js +438 -0
  166. package/dist/config/secure-account-manager.js.map +1 -0
  167. package/dist/config/session-state.d.ts +37 -0
  168. package/dist/config/session-state.d.ts.map +1 -0
  169. package/dist/config/session-state.js +207 -0
  170. package/dist/config/session-state.js.map +1 -0
  171. package/dist/config/session-storage.d.ts +21 -0
  172. package/dist/config/session-storage.d.ts.map +1 -0
  173. package/dist/config/session-storage.js +235 -0
  174. package/dist/config/session-storage.js.map +1 -0
  175. package/dist/config/theme-manager.d.ts +53 -0
  176. package/dist/config/theme-manager.d.ts.map +1 -0
  177. package/dist/config/theme-manager.js +491 -0
  178. package/dist/config/theme-manager.js.map +1 -0
  179. package/dist/handlers/monitor.handler.d.ts +28 -0
  180. package/dist/handlers/monitor.handler.d.ts.map +1 -0
  181. package/dist/handlers/monitor.handler.js +457 -0
  182. package/dist/handlers/monitor.handler.js.map +1 -0
  183. package/dist/handlers/stream.handler.d.ts.map +1 -1
  184. package/dist/handlers/stream.handler.js +6 -0
  185. package/dist/handlers/stream.handler.js.map +1 -1
  186. package/dist/handlers/use.handler.d.ts +13 -0
  187. package/dist/handlers/use.handler.d.ts.map +1 -0
  188. package/dist/handlers/use.handler.js +118 -0
  189. package/dist/handlers/use.handler.js.map +1 -0
  190. package/dist/index.d.ts +2 -1
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.js +24 -12
  193. package/dist/index.js.map +1 -1
  194. package/dist/performance/adaptive-polling.d.ts +69 -0
  195. package/dist/performance/adaptive-polling.d.ts.map +1 -0
  196. package/dist/performance/adaptive-polling.js +313 -0
  197. package/dist/performance/adaptive-polling.js.map +1 -0
  198. package/dist/performance/api-analytics.d.ts +137 -0
  199. package/dist/performance/api-analytics.d.ts.map +1 -0
  200. package/dist/performance/api-analytics.js +351 -0
  201. package/dist/performance/api-analytics.js.map +1 -0
  202. package/dist/performance/api-optimizer.d.ts +66 -0
  203. package/dist/performance/api-optimizer.d.ts.map +1 -0
  204. package/dist/performance/api-optimizer.js +368 -0
  205. package/dist/performance/api-optimizer.js.map +1 -0
  206. package/dist/performance/batch-request-manager.d.ts +90 -0
  207. package/dist/performance/batch-request-manager.d.ts.map +1 -0
  208. package/dist/performance/batch-request-manager.js +355 -0
  209. package/dist/performance/batch-request-manager.js.map +1 -0
  210. package/dist/performance/change-detector.d.ts +75 -0
  211. package/dist/performance/change-detector.d.ts.map +1 -0
  212. package/dist/performance/change-detector.js +421 -0
  213. package/dist/performance/change-detector.js.map +1 -0
  214. package/dist/performance/connection-pool-manager.d.ts +99 -0
  215. package/dist/performance/connection-pool-manager.d.ts.map +1 -0
  216. package/dist/performance/connection-pool-manager.js +474 -0
  217. package/dist/performance/connection-pool-manager.js.map +1 -0
  218. package/dist/performance/error-recovery-manager.d.ts +134 -0
  219. package/dist/performance/error-recovery-manager.d.ts.map +1 -0
  220. package/dist/performance/error-recovery-manager.js +673 -0
  221. package/dist/performance/error-recovery-manager.js.map +1 -0
  222. package/dist/performance/fallback-manager.d.ts +123 -0
  223. package/dist/performance/fallback-manager.d.ts.map +1 -0
  224. package/dist/performance/fallback-manager.js +524 -0
  225. package/dist/performance/fallback-manager.js.map +1 -0
  226. package/dist/performance/index.d.ts +25 -0
  227. package/dist/performance/index.d.ts.map +1 -0
  228. package/dist/performance/index.js +28 -0
  229. package/dist/performance/index.js.map +1 -0
  230. package/dist/performance/memory-manager.d.ts +97 -0
  231. package/dist/performance/memory-manager.d.ts.map +1 -0
  232. package/dist/performance/memory-manager.js +417 -0
  233. package/dist/performance/memory-manager.js.map +1 -0
  234. package/dist/performance/performance-monitor.d.ts +149 -0
  235. package/dist/performance/performance-monitor.d.ts.map +1 -0
  236. package/dist/performance/performance-monitor.js +513 -0
  237. package/dist/performance/performance-monitor.js.map +1 -0
  238. package/dist/performance/performance-optimizer.d.ts +110 -0
  239. package/dist/performance/performance-optimizer.d.ts.map +1 -0
  240. package/dist/performance/performance-optimizer.js +476 -0
  241. package/dist/performance/performance-optimizer.js.map +1 -0
  242. package/dist/performance/render-optimizer.d.ts +95 -0
  243. package/dist/performance/render-optimizer.d.ts.map +1 -0
  244. package/dist/performance/render-optimizer.js +408 -0
  245. package/dist/performance/render-optimizer.js.map +1 -0
  246. package/dist/services/index.d.ts +4 -1
  247. package/dist/services/index.d.ts.map +1 -1
  248. package/dist/services/index.js +3 -1
  249. package/dist/services/index.js.map +1 -1
  250. package/dist/services/system-resource.service.d.ts +168 -0
  251. package/dist/services/system-resource.service.d.ts.map +1 -0
  252. package/dist/services/system-resource.service.js +544 -0
  253. package/dist/services/system-resource.service.js.map +1 -0
  254. package/dist/types/account.types.d.ts +79 -0
  255. package/dist/types/account.types.d.ts.map +1 -0
  256. package/dist/types/account.types.js +23 -0
  257. package/dist/types/account.types.js.map +1 -0
  258. package/dist/types/alert.d.ts +147 -0
  259. package/dist/types/alert.d.ts.map +1 -0
  260. package/dist/types/alert.js +3 -0
  261. package/dist/types/alert.js.map +1 -0
  262. package/dist/types/auth-source.types.d.ts +62 -0
  263. package/dist/types/auth-source.types.d.ts.map +1 -0
  264. package/dist/types/auth-source.types.js +25 -0
  265. package/dist/types/auth-source.types.js.map +1 -0
  266. package/dist/types/index.d.ts +3 -0
  267. package/dist/types/index.d.ts.map +1 -1
  268. package/dist/types/index.js +2 -0
  269. package/dist/types/index.js.map +1 -1
  270. package/dist/types/interaction.d.ts +147 -0
  271. package/dist/types/interaction.d.ts.map +1 -0
  272. package/dist/types/interaction.js +3 -0
  273. package/dist/types/interaction.js.map +1 -0
  274. package/dist/types/monitoring.d.ts +233 -0
  275. package/dist/types/monitoring.d.ts.map +1 -0
  276. package/dist/types/monitoring.js +35 -0
  277. package/dist/types/monitoring.js.map +1 -0
  278. package/dist/types/session.types.d.ts +43 -0
  279. package/dist/types/session.types.d.ts.map +1 -0
  280. package/dist/types/session.types.js +27 -0
  281. package/dist/types/session.types.js.map +1 -0
  282. package/dist/utils/alert-history-manager.d.ts +72 -0
  283. package/dist/utils/alert-history-manager.d.ts.map +1 -0
  284. package/dist/utils/alert-history-manager.js +492 -0
  285. package/dist/utils/alert-history-manager.js.map +1 -0
  286. package/dist/utils/alert-manager.d.ts +75 -0
  287. package/dist/utils/alert-manager.d.ts.map +1 -0
  288. package/dist/utils/alert-manager.js +348 -0
  289. package/dist/utils/alert-manager.js.map +1 -0
  290. package/dist/utils/alert-rule-manager.d.ts +51 -0
  291. package/dist/utils/alert-rule-manager.d.ts.map +1 -0
  292. package/dist/utils/alert-rule-manager.js +515 -0
  293. package/dist/utils/alert-rule-manager.js.map +1 -0
  294. package/dist/utils/auth-diagnostics.d.ts +47 -0
  295. package/dist/utils/auth-diagnostics.d.ts.map +1 -0
  296. package/dist/utils/auth-diagnostics.js +245 -0
  297. package/dist/utils/auth-diagnostics.js.map +1 -0
  298. package/dist/utils/data-manager.d.ts +53 -0
  299. package/dist/utils/data-manager.d.ts.map +1 -0
  300. package/dist/utils/data-manager.js +228 -0
  301. package/dist/utils/data-manager.js.map +1 -0
  302. package/dist/utils/formatter.d.ts +5 -0
  303. package/dist/utils/formatter.d.ts.map +1 -1
  304. package/dist/utils/formatter.js +19 -0
  305. package/dist/utils/formatter.js.map +1 -1
  306. package/dist/utils/index.d.ts +6 -0
  307. package/dist/utils/index.d.ts.map +1 -1
  308. package/dist/utils/index.js +6 -0
  309. package/dist/utils/index.js.map +1 -1
  310. package/dist/utils/keyboard-handler.d.ts +32 -0
  311. package/dist/utils/keyboard-handler.d.ts.map +1 -0
  312. package/dist/utils/keyboard-handler.js +193 -0
  313. package/dist/utils/keyboard-handler.js.map +1 -0
  314. package/dist/utils/mouse-handler.d.ts +61 -0
  315. package/dist/utils/mouse-handler.d.ts.map +1 -0
  316. package/dist/utils/mouse-handler.js +192 -0
  317. package/dist/utils/mouse-handler.js.map +1 -0
  318. package/dist/utils/stream-verification.d.ts.map +1 -1
  319. package/dist/utils/stream-verification.js +2 -13
  320. package/dist/utils/stream-verification.js.map +1 -1
  321. package/dist/utils/terminal.d.ts +24 -0
  322. package/dist/utils/terminal.d.ts.map +1 -0
  323. package/dist/utils/terminal.js +148 -0
  324. package/dist/utils/terminal.js.map +1 -0
  325. package/dist/utils/time-series.processor.d.ts +65 -0
  326. package/dist/utils/time-series.processor.d.ts.map +1 -0
  327. package/dist/utils/time-series.processor.js +263 -0
  328. package/dist/utils/time-series.processor.js.map +1 -0
  329. package/package.json +40 -4
@@ -0,0 +1,149 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface PerformanceMonitorConfig {
3
+ enableAutoMonitoring: boolean;
4
+ monitoringInterval: number;
5
+ maxRecords: number;
6
+ cpuThreshold: number;
7
+ memoryThreshold: number;
8
+ responseTimeThreshold: number;
9
+ enableAlerts: boolean;
10
+ enableReporting: boolean;
11
+ reportInterval: number;
12
+ enableProfiling: boolean;
13
+ profilingSampleRate: number;
14
+ }
15
+ export interface PerformanceMetrics {
16
+ timestamp: number;
17
+ cpuUsage: number;
18
+ memoryUsage: number;
19
+ heapUsage: number;
20
+ eventLoopDelay: number;
21
+ renderTime: number;
22
+ apiResponseTime: number;
23
+ apiCallCount: number;
24
+ errorCount: number;
25
+ cacheHitRate: number;
26
+ activeConnections: number;
27
+ gcPauseTime: number;
28
+ frameRate: number;
29
+ systemLoad: number[];
30
+ }
31
+ export interface PerformanceTrend {
32
+ metric: string;
33
+ direction: 'increasing' | 'decreasing' | 'stable';
34
+ strength: number;
35
+ average: number;
36
+ min: number;
37
+ max: number;
38
+ standardDeviation: number;
39
+ prediction: number;
40
+ }
41
+ export interface PerformanceAlert {
42
+ id: string;
43
+ type: 'warning' | 'critical' | 'info';
44
+ message: string;
45
+ metric: string;
46
+ currentValue: number;
47
+ threshold: number;
48
+ timestamp: number;
49
+ severity: number;
50
+ suggestedActions: string[];
51
+ }
52
+ export interface PerformanceReport {
53
+ timestamp: number;
54
+ period: {
55
+ start: number;
56
+ end: number;
57
+ };
58
+ summary: {
59
+ averageCpuUsage: number;
60
+ averageMemoryUsage: number;
61
+ averageResponseTime: number;
62
+ totalApiCalls: number;
63
+ totalErrors: number;
64
+ averageCacheHitRate: number;
65
+ uptime: number;
66
+ systemHealth: 'healthy' | 'degraded' | 'critical';
67
+ };
68
+ trends: PerformanceTrend[];
69
+ alerts: PerformanceAlert[];
70
+ recommendations: string[];
71
+ metrics: PerformanceMetrics[];
72
+ }
73
+ export interface PerformanceProfile {
74
+ id: string;
75
+ name: string;
76
+ startTime: number;
77
+ endTime: number;
78
+ duration: number;
79
+ cpuSamples: Array<{
80
+ timestamp: number;
81
+ usage: number;
82
+ }>;
83
+ memorySamples: Array<{
84
+ timestamp: number;
85
+ usage: number;
86
+ }>;
87
+ callStack: Array<{
88
+ function: string;
89
+ duration: number;
90
+ calls: number;
91
+ }>;
92
+ hotSpots: Array<{
93
+ location: string;
94
+ time: number;
95
+ percentage: number;
96
+ }>;
97
+ }
98
+ export declare class PerformanceMonitor extends EventEmitter {
99
+ private config;
100
+ private metrics;
101
+ private alerts;
102
+ private profiles;
103
+ private monitoringTimer?;
104
+ private reportTimer?;
105
+ private isRunning;
106
+ private startTime;
107
+ private lastCpuUsage;
108
+ private lastMeasurement;
109
+ private alertIdCounter;
110
+ private activeProfiles;
111
+ constructor(config?: Partial<PerformanceMonitorConfig>);
112
+ start(): void;
113
+ stop(): void;
114
+ collectMetrics(): PerformanceMetrics;
115
+ recordMetrics(metrics: Partial<PerformanceMetrics>): void;
116
+ startProfile(profileId: string, name: string): void;
117
+ stopProfile(profileId: string): PerformanceProfile | null;
118
+ getMetrics(timeRange?: {
119
+ start: number;
120
+ end: number;
121
+ }): PerformanceMetrics[];
122
+ getTrends(timeRange?: {
123
+ start: number;
124
+ end: number;
125
+ }): PerformanceTrend[];
126
+ getAlerts(timeRange?: {
127
+ start: number;
128
+ end: number;
129
+ }): PerformanceAlert[];
130
+ generateReport(timeRange?: {
131
+ start: number;
132
+ end: number;
133
+ }): PerformanceReport;
134
+ getProfile(profileId: string): PerformanceProfile | null;
135
+ clearData(): void;
136
+ updateConfig(newConfig: Partial<PerformanceMonitorConfig>): void;
137
+ private measureEventLoopDelay;
138
+ private startMonitoring;
139
+ private startReporting;
140
+ private checkAlerts;
141
+ private startProfilingSampling;
142
+ private analyzeProfile;
143
+ private findHotSpots;
144
+ private calculateTrend;
145
+ private calculateSummary;
146
+ private generateRecommendations;
147
+ private setupEventHandlers;
148
+ }
149
+ //# sourceMappingURL=performance-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/performance/performance-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,513 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PerformanceMonitor = void 0;
37
+ const events_1 = require("events");
38
+ const perf_hooks_1 = require("perf_hooks");
39
+ const os = __importStar(require("os"));
40
+ class PerformanceMonitor extends events_1.EventEmitter {
41
+ constructor(config = {}) {
42
+ super();
43
+ this.metrics = [];
44
+ this.alerts = [];
45
+ this.profiles = new Map();
46
+ this.isRunning = false;
47
+ this.startTime = Date.now();
48
+ this.lastCpuUsage = process.cpuUsage();
49
+ this.lastMeasurement = Date.now();
50
+ this.alertIdCounter = 0;
51
+ this.activeProfiles = new Set();
52
+ this.config = {
53
+ enableAutoMonitoring: true,
54
+ monitoringInterval: 5000,
55
+ maxRecords: 1000,
56
+ cpuThreshold: 80,
57
+ memoryThreshold: 100,
58
+ responseTimeThreshold: 1000,
59
+ enableAlerts: true,
60
+ enableReporting: true,
61
+ reportInterval: 300000,
62
+ enableProfiling: false,
63
+ profilingSampleRate: 0.1,
64
+ ...config,
65
+ };
66
+ this.setupEventHandlers();
67
+ }
68
+ start() {
69
+ if (this.isRunning) {
70
+ return;
71
+ }
72
+ this.isRunning = true;
73
+ this.startTime = Date.now();
74
+ this.lastMeasurement = Date.now();
75
+ this.lastCpuUsage = process.cpuUsage();
76
+ if (this.config.enableAutoMonitoring) {
77
+ this.startMonitoring();
78
+ }
79
+ if (this.config.enableReporting) {
80
+ this.startReporting();
81
+ }
82
+ this.emit('monitoringStarted', {
83
+ timestamp: Date.now(),
84
+ config: this.config,
85
+ });
86
+ }
87
+ stop() {
88
+ if (!this.isRunning) {
89
+ return;
90
+ }
91
+ this.isRunning = false;
92
+ if (this.monitoringTimer) {
93
+ clearInterval(this.monitoringTimer);
94
+ delete this.monitoringTimer;
95
+ }
96
+ if (this.reportTimer) {
97
+ clearInterval(this.reportTimer);
98
+ delete this.reportTimer;
99
+ }
100
+ for (const profileId of this.activeProfiles) {
101
+ this.stopProfile(profileId);
102
+ }
103
+ const finalReport = this.generateReport();
104
+ this.emit('monitoringStopped', {
105
+ timestamp: Date.now(),
106
+ uptime: Date.now() - this.startTime,
107
+ finalReport,
108
+ });
109
+ }
110
+ collectMetrics() {
111
+ const now = Date.now();
112
+ const memoryUsage = process.memoryUsage();
113
+ const cpuUsage = process.cpuUsage(this.lastCpuUsage);
114
+ const systemLoad = os.loadavg();
115
+ const cpuPercent = (cpuUsage.user + cpuUsage.system) / ((now - this.lastMeasurement) * 1000) * 100;
116
+ const eventLoopDelay = this.measureEventLoopDelay();
117
+ const metrics = {
118
+ timestamp: now,
119
+ cpuUsage: Math.min(cpuPercent, 100),
120
+ memoryUsage: memoryUsage.rss / 1024 / 1024,
121
+ heapUsage: memoryUsage.heapUsed / 1024 / 1024,
122
+ eventLoopDelay,
123
+ renderTime: 0,
124
+ apiResponseTime: 0,
125
+ apiCallCount: 0,
126
+ errorCount: 0,
127
+ cacheHitRate: 0,
128
+ activeConnections: 0,
129
+ gcPauseTime: 0,
130
+ frameRate: 0,
131
+ systemLoad,
132
+ };
133
+ this.lastCpuUsage = process.cpuUsage();
134
+ this.lastMeasurement = now;
135
+ return metrics;
136
+ }
137
+ recordMetrics(metrics) {
138
+ const currentMetrics = this.collectMetrics();
139
+ const combinedMetrics = { ...currentMetrics, ...metrics };
140
+ this.metrics.push(combinedMetrics);
141
+ if (this.metrics.length > this.config.maxRecords) {
142
+ this.metrics = this.metrics.slice(-this.config.maxRecords);
143
+ }
144
+ if (this.config.enableAlerts) {
145
+ this.checkAlerts(combinedMetrics);
146
+ }
147
+ this.emit('metricsRecorded', {
148
+ metrics: combinedMetrics,
149
+ timestamp: Date.now(),
150
+ });
151
+ }
152
+ startProfile(profileId, name) {
153
+ if (this.activeProfiles.has(profileId)) {
154
+ return;
155
+ }
156
+ const profile = {
157
+ id: profileId,
158
+ name,
159
+ startTime: Date.now(),
160
+ endTime: 0,
161
+ duration: 0,
162
+ cpuSamples: [],
163
+ memorySamples: [],
164
+ callStack: [],
165
+ hotSpots: [],
166
+ };
167
+ this.profiles.set(profileId, profile);
168
+ this.activeProfiles.add(profileId);
169
+ if (this.config.enableProfiling) {
170
+ this.startProfilingSampling(profileId);
171
+ }
172
+ this.emit('profileStarted', {
173
+ profileId,
174
+ name,
175
+ timestamp: Date.now(),
176
+ });
177
+ }
178
+ stopProfile(profileId) {
179
+ const profile = this.profiles.get(profileId);
180
+ if (!profile || !this.activeProfiles.has(profileId)) {
181
+ return null;
182
+ }
183
+ profile.endTime = Date.now();
184
+ profile.duration = profile.endTime - profile.startTime;
185
+ this.activeProfiles.delete(profileId);
186
+ this.analyzeProfile(profile);
187
+ this.emit('profileStopped', {
188
+ profileId,
189
+ duration: profile.duration,
190
+ timestamp: Date.now(),
191
+ });
192
+ return profile;
193
+ }
194
+ getMetrics(timeRange) {
195
+ if (!timeRange) {
196
+ return [...this.metrics];
197
+ }
198
+ return this.metrics.filter(metric => metric.timestamp >= timeRange.start && metric.timestamp <= timeRange.end);
199
+ }
200
+ getTrends(timeRange) {
201
+ const metrics = this.getMetrics(timeRange);
202
+ if (metrics.length < 2) {
203
+ return [];
204
+ }
205
+ const trends = [];
206
+ const metricKeys = [
207
+ 'cpuUsage', 'memoryUsage', 'renderTime', 'apiResponseTime', 'errorCount'
208
+ ];
209
+ for (const key of metricKeys) {
210
+ const values = metrics.map(m => m[key]).filter(v => !isNaN(v));
211
+ if (values.length < 2)
212
+ continue;
213
+ const trend = this.calculateTrend(key, values);
214
+ trends.push(trend);
215
+ }
216
+ return trends;
217
+ }
218
+ getAlerts(timeRange) {
219
+ if (!timeRange) {
220
+ return [...this.alerts];
221
+ }
222
+ return this.alerts.filter(alert => alert.timestamp >= timeRange.start && alert.timestamp <= timeRange.end);
223
+ }
224
+ generateReport(timeRange) {
225
+ const now = Date.now();
226
+ const period = timeRange || {
227
+ start: now - 3600000,
228
+ end: now,
229
+ };
230
+ const metrics = this.getMetrics(period);
231
+ const trends = this.getTrends(period);
232
+ const alerts = this.getAlerts(period);
233
+ const summary = this.calculateSummary(metrics);
234
+ const recommendations = this.generateRecommendations(metrics, trends, alerts);
235
+ return {
236
+ timestamp: now,
237
+ period,
238
+ summary,
239
+ trends,
240
+ alerts,
241
+ recommendations,
242
+ metrics,
243
+ };
244
+ }
245
+ getProfile(profileId) {
246
+ return this.profiles.get(profileId) || null;
247
+ }
248
+ clearData() {
249
+ const clearedMetrics = this.metrics.length;
250
+ const clearedAlerts = this.alerts.length;
251
+ const clearedProfiles = this.profiles.size;
252
+ this.metrics = [];
253
+ this.alerts = [];
254
+ this.profiles.clear();
255
+ this.emit('dataCleared', {
256
+ clearedMetrics,
257
+ clearedAlerts,
258
+ clearedProfiles,
259
+ timestamp: Date.now(),
260
+ });
261
+ }
262
+ updateConfig(newConfig) {
263
+ this.config = { ...this.config, ...newConfig };
264
+ if (this.isRunning) {
265
+ this.stop();
266
+ this.start();
267
+ }
268
+ this.emit('configUpdated', {
269
+ config: this.config,
270
+ timestamp: Date.now(),
271
+ });
272
+ }
273
+ measureEventLoopDelay() {
274
+ const start = perf_hooks_1.performance.now();
275
+ return new Promise((resolve) => {
276
+ setImmediate(() => {
277
+ resolve(perf_hooks_1.performance.now() - start);
278
+ });
279
+ });
280
+ }
281
+ startMonitoring() {
282
+ this.monitoringTimer = setInterval(() => {
283
+ this.recordMetrics({});
284
+ }, this.config.monitoringInterval);
285
+ }
286
+ startReporting() {
287
+ this.reportTimer = setInterval(() => {
288
+ const report = this.generateReport();
289
+ this.emit('reportGenerated', {
290
+ report,
291
+ timestamp: Date.now(),
292
+ });
293
+ }, this.config.reportInterval);
294
+ }
295
+ checkAlerts(metrics) {
296
+ const alerts = [];
297
+ if (metrics.cpuUsage > this.config.cpuThreshold) {
298
+ alerts.push({
299
+ id: `alert_${++this.alertIdCounter}`,
300
+ type: 'warning',
301
+ message: `High CPU usage: ${metrics.cpuUsage.toFixed(1)}%`,
302
+ metric: 'cpuUsage',
303
+ currentValue: metrics.cpuUsage,
304
+ threshold: this.config.cpuThreshold,
305
+ timestamp: Date.now(),
306
+ severity: 7,
307
+ suggestedActions: [
308
+ 'Review CPU-intensive operations',
309
+ 'Optimize algorithms',
310
+ 'Consider load balancing',
311
+ ],
312
+ });
313
+ }
314
+ if (metrics.memoryUsage > this.config.memoryThreshold) {
315
+ alerts.push({
316
+ id: `alert_${++this.alertIdCounter}`,
317
+ type: 'warning',
318
+ message: `High memory usage: ${metrics.memoryUsage.toFixed(1)}MB`,
319
+ metric: 'memoryUsage',
320
+ currentValue: metrics.memoryUsage,
321
+ threshold: this.config.memoryThreshold,
322
+ timestamp: Date.now(),
323
+ severity: 6,
324
+ suggestedActions: [
325
+ 'Review memory allocation',
326
+ 'Clear unused cache',
327
+ 'Check for memory leaks',
328
+ ],
329
+ });
330
+ }
331
+ if (metrics.apiResponseTime > this.config.responseTimeThreshold) {
332
+ alerts.push({
333
+ id: `alert_${++this.alertIdCounter}`,
334
+ type: 'warning',
335
+ message: `Slow API response: ${metrics.apiResponseTime.toFixed(0)}ms`,
336
+ metric: 'apiResponseTime',
337
+ currentValue: metrics.apiResponseTime,
338
+ threshold: this.config.responseTimeThreshold,
339
+ timestamp: Date.now(),
340
+ severity: 5,
341
+ suggestedActions: [
342
+ 'Check network connectivity',
343
+ 'Optimize API queries',
344
+ 'Enable caching',
345
+ ],
346
+ });
347
+ }
348
+ for (const alert of alerts) {
349
+ this.alerts.push(alert);
350
+ this.emit('alertTriggered', alert);
351
+ }
352
+ if (this.alerts.length > this.config.maxRecords) {
353
+ this.alerts = this.alerts.slice(-this.config.maxRecords);
354
+ }
355
+ }
356
+ startProfilingSampling(profileId) {
357
+ const profile = this.profiles.get(profileId);
358
+ if (!profile)
359
+ return;
360
+ const sampleInterval = 100;
361
+ const samplingTimer = setInterval(() => {
362
+ if (!this.activeProfiles.has(profileId)) {
363
+ clearInterval(samplingTimer);
364
+ return;
365
+ }
366
+ const metrics = this.collectMetrics();
367
+ profile.cpuSamples.push({
368
+ timestamp: Date.now(),
369
+ usage: metrics.cpuUsage,
370
+ });
371
+ profile.memorySamples.push({
372
+ timestamp: Date.now(),
373
+ usage: metrics.memoryUsage,
374
+ });
375
+ }, sampleInterval);
376
+ }
377
+ analyzeProfile(profile) {
378
+ const cpuHotSpots = this.findHotSpots(profile.cpuSamples);
379
+ const memoryHotSpots = this.findHotSpots(profile.memorySamples);
380
+ profile.hotSpots = [
381
+ ...cpuHotSpots.map(spot => ({
382
+ location: `CPU-${spot.timestamp}`,
383
+ time: spot.usage,
384
+ percentage: (spot.usage / 100) * 100,
385
+ })),
386
+ ...memoryHotSpots.map(spot => ({
387
+ location: `Memory-${spot.timestamp}`,
388
+ time: spot.usage,
389
+ percentage: (spot.usage / (profile.memorySamples.reduce((max, s) => Math.max(max, s.usage), 0) || 1)) * 100,
390
+ })),
391
+ ];
392
+ }
393
+ findHotSpots(samples) {
394
+ if (samples.length < 2)
395
+ return [];
396
+ const threshold = samples.reduce((sum, s) => sum + s.usage, 0) / samples.length * 1.5;
397
+ return samples.filter(sample => sample.usage > threshold);
398
+ }
399
+ calculateTrend(metric, values) {
400
+ if (values.length < 2) {
401
+ return {
402
+ metric,
403
+ direction: 'stable',
404
+ strength: 0,
405
+ average: 0,
406
+ min: 0,
407
+ max: 0,
408
+ standardDeviation: 0,
409
+ prediction: 0,
410
+ };
411
+ }
412
+ const average = values.reduce((sum, val) => sum + val, 0) / values.length;
413
+ const min = Math.min(...values);
414
+ const max = Math.max(...values);
415
+ const variance = values.reduce((sum, val) => sum + Math.pow(val - average, 2), 0) / values.length;
416
+ const standardDeviation = Math.sqrt(variance);
417
+ const firstHalf = values.slice(0, Math.floor(values.length / 2));
418
+ const secondHalf = values.slice(Math.floor(values.length / 2));
419
+ const firstAvg = firstHalf.reduce((sum, val) => sum + val, 0) / firstHalf.length;
420
+ const secondAvg = secondHalf.reduce((sum, val) => sum + val, 0) / secondHalf.length;
421
+ const difference = secondAvg - firstAvg;
422
+ const direction = Math.abs(difference) < average * 0.1 ? 'stable' :
423
+ difference > 0 ? 'increasing' : 'decreasing';
424
+ const strength = Math.min(Math.abs(difference) / average, 1);
425
+ const prediction = average + (difference / firstHalf.length) * values.length;
426
+ return {
427
+ metric,
428
+ direction,
429
+ strength,
430
+ average,
431
+ min,
432
+ max,
433
+ standardDeviation,
434
+ prediction,
435
+ };
436
+ }
437
+ calculateSummary(metrics) {
438
+ if (metrics.length === 0) {
439
+ return {
440
+ averageCpuUsage: 0,
441
+ averageMemoryUsage: 0,
442
+ averageResponseTime: 0,
443
+ totalApiCalls: 0,
444
+ totalErrors: 0,
445
+ averageCacheHitRate: 0,
446
+ uptime: Date.now() - this.startTime,
447
+ systemHealth: 'healthy',
448
+ };
449
+ }
450
+ const averageCpuUsage = metrics.reduce((sum, m) => sum + m.cpuUsage, 0) / metrics.length;
451
+ const averageMemoryUsage = metrics.reduce((sum, m) => sum + m.memoryUsage, 0) / metrics.length;
452
+ const averageResponseTime = metrics.reduce((sum, m) => sum + m.apiResponseTime, 0) / metrics.length;
453
+ const totalApiCalls = metrics.reduce((sum, m) => sum + m.apiCallCount, 0);
454
+ const totalErrors = metrics.reduce((sum, m) => sum + m.errorCount, 0);
455
+ const averageCacheHitRate = metrics.reduce((sum, m) => sum + m.cacheHitRate, 0) / metrics.length;
456
+ let systemHealth = 'healthy';
457
+ if (averageCpuUsage > 80 || averageMemoryUsage > 200 || averageResponseTime > 2000) {
458
+ systemHealth = 'critical';
459
+ }
460
+ else if (averageCpuUsage > 60 || averageMemoryUsage > 150 || averageResponseTime > 1000) {
461
+ systemHealth = 'degraded';
462
+ }
463
+ return {
464
+ averageCpuUsage,
465
+ averageMemoryUsage,
466
+ averageResponseTime,
467
+ totalApiCalls,
468
+ totalErrors,
469
+ averageCacheHitRate,
470
+ uptime: Date.now() - this.startTime,
471
+ systemHealth,
472
+ };
473
+ }
474
+ generateRecommendations(_metrics, trends, alerts) {
475
+ const recommendations = [];
476
+ const cpuTrend = trends.find(t => t.metric === 'cpuUsage');
477
+ if (cpuTrend && cpuTrend.direction === 'increasing' && cpuTrend.average > 50) {
478
+ recommendations.push('Consider optimizing CPU-intensive operations');
479
+ }
480
+ const memoryTrend = trends.find(t => t.metric === 'memoryUsage');
481
+ if (memoryTrend && memoryTrend.direction === 'increasing') {
482
+ recommendations.push('Review memory usage and implement cleanup strategies');
483
+ }
484
+ const responseTrend = trends.find(t => t.metric === 'apiResponseTime');
485
+ if (responseTrend && responseTrend.average > 500) {
486
+ recommendations.push('Optimize API calls with caching and request batching');
487
+ }
488
+ const criticalAlerts = alerts.filter(a => a.type === 'critical');
489
+ if (criticalAlerts.length > 0) {
490
+ recommendations.push('Address critical performance alerts immediately');
491
+ }
492
+ if (recommendations.length === 0) {
493
+ recommendations.push('Performance is within acceptable ranges');
494
+ }
495
+ return recommendations;
496
+ }
497
+ setupEventHandlers() {
498
+ process.on('warning', (warning) => {
499
+ this.emit('performanceWarning', {
500
+ warning: warning.message,
501
+ timestamp: Date.now(),
502
+ });
503
+ });
504
+ process.on('uncaughtException', (error) => {
505
+ this.emit('performanceError', {
506
+ error: error.message,
507
+ timestamp: Date.now(),
508
+ });
509
+ });
510
+ }
511
+ }
512
+ exports.PerformanceMonitor = PerformanceMonitor;
513
+ //# sourceMappingURL=performance-monitor.js.map