polyv-live-cli 1.1.4 → 1.1.5

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 (244) hide show
  1. package/dist/commands/index.d.ts +1 -0
  2. package/dist/commands/index.d.ts.map +1 -1
  3. package/dist/commands/index.js +3 -1
  4. package/dist/commands/index.js.map +1 -1
  5. package/dist/commands/monitor.commands.d.ts +12 -0
  6. package/dist/commands/monitor.commands.d.ts.map +1 -0
  7. package/dist/commands/monitor.commands.js +75 -0
  8. package/dist/commands/monitor.commands.js.map +1 -0
  9. package/dist/components/alert.panel.d.ts +98 -0
  10. package/dist/components/alert.panel.d.ts.map +1 -0
  11. package/dist/components/alert.panel.js +1000 -0
  12. package/dist/components/alert.panel.js.map +1 -0
  13. package/dist/components/base.component.d.ts +61 -0
  14. package/dist/components/base.component.d.ts.map +1 -0
  15. package/dist/components/base.component.js +346 -0
  16. package/dist/components/base.component.js.map +1 -0
  17. package/dist/components/batch-operations.dialog.d.ts +58 -0
  18. package/dist/components/batch-operations.dialog.d.ts.map +1 -0
  19. package/dist/components/batch-operations.dialog.js +340 -0
  20. package/dist/components/batch-operations.dialog.js.map +1 -0
  21. package/dist/components/channel-details.popup.d.ts +55 -0
  22. package/dist/components/channel-details.popup.d.ts.map +1 -0
  23. package/dist/components/channel-details.popup.js +416 -0
  24. package/dist/components/channel-details.popup.js.map +1 -0
  25. package/dist/components/channel-status.panel.d.ts +129 -0
  26. package/dist/components/channel-status.panel.d.ts.map +1 -0
  27. package/dist/components/channel-status.panel.js +858 -0
  28. package/dist/components/channel-status.panel.js.map +1 -0
  29. package/dist/components/component-registry.d.ts +36 -0
  30. package/dist/components/component-registry.d.ts.map +1 -0
  31. package/dist/components/component-registry.js +119 -0
  32. package/dist/components/component-registry.js.map +1 -0
  33. package/dist/components/context-menu-factory.d.ts +13 -0
  34. package/dist/components/context-menu-factory.d.ts.map +1 -0
  35. package/dist/components/context-menu-factory.js +341 -0
  36. package/dist/components/context-menu-factory.js.map +1 -0
  37. package/dist/components/context-menu.d.ts +54 -0
  38. package/dist/components/context-menu.d.ts.map +1 -0
  39. package/dist/components/context-menu.js +235 -0
  40. package/dist/components/context-menu.js.map +1 -0
  41. package/dist/components/grid-manager.d.ts +52 -0
  42. package/dist/components/grid-manager.d.ts.map +1 -0
  43. package/dist/components/grid-manager.js +404 -0
  44. package/dist/components/grid-manager.js.map +1 -0
  45. package/dist/components/help-panel.d.ts +34 -0
  46. package/dist/components/help-panel.d.ts.map +1 -0
  47. package/dist/components/help-panel.js +249 -0
  48. package/dist/components/help-panel.js.map +1 -0
  49. package/dist/components/index.d.ts +20 -0
  50. package/dist/components/index.d.ts.map +1 -0
  51. package/dist/components/index.js +43 -0
  52. package/dist/components/index.js.map +1 -0
  53. package/dist/components/interaction-manager.d.ts +47 -0
  54. package/dist/components/interaction-manager.d.ts.map +1 -0
  55. package/dist/components/interaction-manager.js +597 -0
  56. package/dist/components/interaction-manager.js.map +1 -0
  57. package/dist/components/layout-manager.d.ts +76 -0
  58. package/dist/components/layout-manager.d.ts.map +1 -0
  59. package/dist/components/layout-manager.js +538 -0
  60. package/dist/components/layout-manager.js.map +1 -0
  61. package/dist/components/monitoring-dashboard.d.ts +85 -0
  62. package/dist/components/monitoring-dashboard.d.ts.map +1 -0
  63. package/dist/components/monitoring-dashboard.js +908 -0
  64. package/dist/components/monitoring-dashboard.js.map +1 -0
  65. package/dist/components/search-panel.d.ts +80 -0
  66. package/dist/components/search-panel.d.ts.map +1 -0
  67. package/dist/components/search-panel.js +585 -0
  68. package/dist/components/search-panel.js.map +1 -0
  69. package/dist/components/status-bar.d.ts +77 -0
  70. package/dist/components/status-bar.d.ts.map +1 -0
  71. package/dist/components/status-bar.js +482 -0
  72. package/dist/components/status-bar.js.map +1 -0
  73. package/dist/components/status.component.d.ts +16 -0
  74. package/dist/components/status.component.d.ts.map +1 -0
  75. package/dist/components/status.component.js +79 -0
  76. package/dist/components/status.component.js.map +1 -0
  77. package/dist/components/stream-metrics.panel.d.ts +86 -0
  78. package/dist/components/stream-metrics.panel.d.ts.map +1 -0
  79. package/dist/components/stream-metrics.panel.js +395 -0
  80. package/dist/components/stream-metrics.panel.js.map +1 -0
  81. package/dist/components/system-resource.panel.d.ts +78 -0
  82. package/dist/components/system-resource.panel.d.ts.map +1 -0
  83. package/dist/components/system-resource.panel.js +642 -0
  84. package/dist/components/system-resource.panel.js.map +1 -0
  85. package/dist/components/tooltip.d.ts +35 -0
  86. package/dist/components/tooltip.d.ts.map +1 -0
  87. package/dist/components/tooltip.js +156 -0
  88. package/dist/components/tooltip.js.map +1 -0
  89. package/dist/config/config-io.d.ts +63 -0
  90. package/dist/config/config-io.d.ts.map +1 -0
  91. package/dist/config/config-io.js +352 -0
  92. package/dist/config/config-io.js.map +1 -0
  93. package/dist/config/config-manager.d.ts +51 -0
  94. package/dist/config/config-manager.d.ts.map +1 -0
  95. package/dist/config/config-manager.js +404 -0
  96. package/dist/config/config-manager.js.map +1 -0
  97. package/dist/config/config-validator.d.ts +27 -0
  98. package/dist/config/config-validator.d.ts.map +1 -0
  99. package/dist/config/config-validator.js +421 -0
  100. package/dist/config/config-validator.js.map +1 -0
  101. package/dist/config/custom-theme-builder.d.ts +88 -0
  102. package/dist/config/custom-theme-builder.d.ts.map +1 -0
  103. package/dist/config/custom-theme-builder.js +458 -0
  104. package/dist/config/custom-theme-builder.js.map +1 -0
  105. package/dist/config/layout-manager.d.ts +60 -0
  106. package/dist/config/layout-manager.d.ts.map +1 -0
  107. package/dist/config/layout-manager.js +595 -0
  108. package/dist/config/layout-manager.js.map +1 -0
  109. package/dist/config/monitoring.d.ts +27 -0
  110. package/dist/config/monitoring.d.ts.map +1 -0
  111. package/dist/config/monitoring.js +276 -0
  112. package/dist/config/monitoring.js.map +1 -0
  113. package/dist/config/theme-manager.d.ts +53 -0
  114. package/dist/config/theme-manager.d.ts.map +1 -0
  115. package/dist/config/theme-manager.js +490 -0
  116. package/dist/config/theme-manager.js.map +1 -0
  117. package/dist/handlers/monitor.handler.d.ts +28 -0
  118. package/dist/handlers/monitor.handler.d.ts.map +1 -0
  119. package/dist/handlers/monitor.handler.js +457 -0
  120. package/dist/handlers/monitor.handler.js.map +1 -0
  121. package/dist/index.d.ts +2 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +8 -3
  124. package/dist/index.js.map +1 -1
  125. package/dist/performance/adaptive-polling.d.ts +69 -0
  126. package/dist/performance/adaptive-polling.d.ts.map +1 -0
  127. package/dist/performance/adaptive-polling.js +313 -0
  128. package/dist/performance/adaptive-polling.js.map +1 -0
  129. package/dist/performance/api-analytics.d.ts +137 -0
  130. package/dist/performance/api-analytics.d.ts.map +1 -0
  131. package/dist/performance/api-analytics.js +351 -0
  132. package/dist/performance/api-analytics.js.map +1 -0
  133. package/dist/performance/api-optimizer.d.ts +66 -0
  134. package/dist/performance/api-optimizer.d.ts.map +1 -0
  135. package/dist/performance/api-optimizer.js +368 -0
  136. package/dist/performance/api-optimizer.js.map +1 -0
  137. package/dist/performance/batch-request-manager.d.ts +89 -0
  138. package/dist/performance/batch-request-manager.d.ts.map +1 -0
  139. package/dist/performance/batch-request-manager.js +351 -0
  140. package/dist/performance/batch-request-manager.js.map +1 -0
  141. package/dist/performance/change-detector.d.ts +75 -0
  142. package/dist/performance/change-detector.d.ts.map +1 -0
  143. package/dist/performance/change-detector.js +392 -0
  144. package/dist/performance/change-detector.js.map +1 -0
  145. package/dist/performance/connection-pool-manager.d.ts +99 -0
  146. package/dist/performance/connection-pool-manager.d.ts.map +1 -0
  147. package/dist/performance/connection-pool-manager.js +474 -0
  148. package/dist/performance/connection-pool-manager.js.map +1 -0
  149. package/dist/performance/error-recovery-manager.d.ts +134 -0
  150. package/dist/performance/error-recovery-manager.d.ts.map +1 -0
  151. package/dist/performance/error-recovery-manager.js +673 -0
  152. package/dist/performance/error-recovery-manager.js.map +1 -0
  153. package/dist/performance/fallback-manager.d.ts +123 -0
  154. package/dist/performance/fallback-manager.d.ts.map +1 -0
  155. package/dist/performance/fallback-manager.js +524 -0
  156. package/dist/performance/fallback-manager.js.map +1 -0
  157. package/dist/performance/index.d.ts +13 -0
  158. package/dist/performance/index.d.ts.map +1 -0
  159. package/dist/performance/index.js +28 -0
  160. package/dist/performance/index.js.map +1 -0
  161. package/dist/performance/memory-manager.d.ts +97 -0
  162. package/dist/performance/memory-manager.d.ts.map +1 -0
  163. package/dist/performance/memory-manager.js +417 -0
  164. package/dist/performance/memory-manager.js.map +1 -0
  165. package/dist/performance/performance-monitor.d.ts +149 -0
  166. package/dist/performance/performance-monitor.d.ts.map +1 -0
  167. package/dist/performance/performance-monitor.js +513 -0
  168. package/dist/performance/performance-monitor.js.map +1 -0
  169. package/dist/performance/performance-optimizer.d.ts +110 -0
  170. package/dist/performance/performance-optimizer.d.ts.map +1 -0
  171. package/dist/performance/performance-optimizer.js +476 -0
  172. package/dist/performance/performance-optimizer.js.map +1 -0
  173. package/dist/performance/render-optimizer.d.ts +95 -0
  174. package/dist/performance/render-optimizer.d.ts.map +1 -0
  175. package/dist/performance/render-optimizer.js +408 -0
  176. package/dist/performance/render-optimizer.js.map +1 -0
  177. package/dist/services/index.d.ts +1 -0
  178. package/dist/services/index.d.ts.map +1 -1
  179. package/dist/services/index.js +3 -1
  180. package/dist/services/index.js.map +1 -1
  181. package/dist/services/system-resource.service.d.ts +168 -0
  182. package/dist/services/system-resource.service.d.ts.map +1 -0
  183. package/dist/services/system-resource.service.js +544 -0
  184. package/dist/services/system-resource.service.js.map +1 -0
  185. package/dist/types/alert.d.ts +147 -0
  186. package/dist/types/alert.d.ts.map +1 -0
  187. package/dist/types/alert.js +3 -0
  188. package/dist/types/alert.js.map +1 -0
  189. package/dist/types/index.d.ts +3 -0
  190. package/dist/types/index.d.ts.map +1 -1
  191. package/dist/types/index.js +2 -0
  192. package/dist/types/index.js.map +1 -1
  193. package/dist/types/interaction.d.ts +147 -0
  194. package/dist/types/interaction.d.ts.map +1 -0
  195. package/dist/types/interaction.js +3 -0
  196. package/dist/types/interaction.js.map +1 -0
  197. package/dist/types/monitoring.d.ts +233 -0
  198. package/dist/types/monitoring.d.ts.map +1 -0
  199. package/dist/types/monitoring.js +35 -0
  200. package/dist/types/monitoring.js.map +1 -0
  201. package/dist/utils/alert-history-manager.d.ts +72 -0
  202. package/dist/utils/alert-history-manager.d.ts.map +1 -0
  203. package/dist/utils/alert-history-manager.js +492 -0
  204. package/dist/utils/alert-history-manager.js.map +1 -0
  205. package/dist/utils/alert-manager.d.ts +75 -0
  206. package/dist/utils/alert-manager.d.ts.map +1 -0
  207. package/dist/utils/alert-manager.js +348 -0
  208. package/dist/utils/alert-manager.js.map +1 -0
  209. package/dist/utils/alert-rule-manager.d.ts +51 -0
  210. package/dist/utils/alert-rule-manager.d.ts.map +1 -0
  211. package/dist/utils/alert-rule-manager.js +515 -0
  212. package/dist/utils/alert-rule-manager.js.map +1 -0
  213. package/dist/utils/data-manager.d.ts +53 -0
  214. package/dist/utils/data-manager.d.ts.map +1 -0
  215. package/dist/utils/data-manager.js +228 -0
  216. package/dist/utils/data-manager.js.map +1 -0
  217. package/dist/utils/formatter.d.ts +5 -0
  218. package/dist/utils/formatter.d.ts.map +1 -1
  219. package/dist/utils/formatter.js +19 -0
  220. package/dist/utils/formatter.js.map +1 -1
  221. package/dist/utils/index.d.ts +6 -0
  222. package/dist/utils/index.d.ts.map +1 -1
  223. package/dist/utils/index.js +6 -0
  224. package/dist/utils/index.js.map +1 -1
  225. package/dist/utils/keyboard-handler.d.ts +32 -0
  226. package/dist/utils/keyboard-handler.d.ts.map +1 -0
  227. package/dist/utils/keyboard-handler.js +193 -0
  228. package/dist/utils/keyboard-handler.js.map +1 -0
  229. package/dist/utils/mouse-handler.d.ts +61 -0
  230. package/dist/utils/mouse-handler.d.ts.map +1 -0
  231. package/dist/utils/mouse-handler.js +192 -0
  232. package/dist/utils/mouse-handler.js.map +1 -0
  233. package/dist/utils/stream-verification.d.ts.map +1 -1
  234. package/dist/utils/stream-verification.js +2 -13
  235. package/dist/utils/stream-verification.js.map +1 -1
  236. package/dist/utils/terminal.d.ts +24 -0
  237. package/dist/utils/terminal.d.ts.map +1 -0
  238. package/dist/utils/terminal.js +148 -0
  239. package/dist/utils/terminal.js.map +1 -0
  240. package/dist/utils/time-series.processor.d.ts +65 -0
  241. package/dist/utils/time-series.processor.d.ts.map +1 -0
  242. package/dist/utils/time-series.processor.js +263 -0
  243. package/dist/utils/time-series.processor.js.map +1 -0
  244. package/package.json +28 -4
@@ -0,0 +1,72 @@
1
+ import { EventEmitter } from 'events';
2
+ import { Alert, AlertHistoryEntry, AlertFilter, AlertLevel, AlertType, AlertStatus, AlertSystemConfig } from '../types/alert';
3
+ export declare class AlertHistoryManager extends EventEmitter {
4
+ private historyEntries;
5
+ private persistenceFilePath;
6
+ private maxHistoryEntries;
7
+ private persistenceEnabled;
8
+ private autoSaveInterval?;
9
+ private isDirty;
10
+ constructor(config?: Partial<AlertSystemConfig>);
11
+ private initializePersistence;
12
+ private setupAutoSave;
13
+ private loadHistory;
14
+ private saveHistory;
15
+ addAlert(alert: Alert, action?: string, user?: string, context?: Record<string, any>): void;
16
+ recordAction(alertId: string, action: string, user?: string, context?: Record<string, any>): AlertHistoryEntry | null;
17
+ updateAlert(updatedAlert: Alert, user?: string): void;
18
+ getHistory(filter?: AlertFilter, limit?: number, offset?: number): AlertHistoryEntry[];
19
+ getAlertHistory(alertId: string): AlertHistoryEntry[];
20
+ getHistoryByAction(action: string): AlertHistoryEntry[];
21
+ getHistoryByUser(user: string): AlertHistoryEntry[];
22
+ getHistoryByTimeRange(startTime: number, endTime: number): AlertHistoryEntry[];
23
+ private applyFilter;
24
+ searchHistory(searchText: string, searchFields?: Array<'title' | 'message' | 'source' | 'action' | 'user'>, limit?: number): AlertHistoryEntry[];
25
+ getStatistics(): {
26
+ totalEntries: number;
27
+ uniqueAlerts: number;
28
+ actionCounts: Record<string, number>;
29
+ userCounts: Record<string, number>;
30
+ timeRange: {
31
+ earliest: number;
32
+ latest: number;
33
+ } | null;
34
+ levelCounts: Record<AlertLevel, number>;
35
+ typeCounts: Record<AlertType, number>;
36
+ statusCounts: Record<AlertStatus, number>;
37
+ };
38
+ getRecentActivity(hours?: number): {
39
+ totalAlerts: number;
40
+ newAlerts: number;
41
+ acknowledgedAlerts: number;
42
+ resolvedAlerts: number;
43
+ activeUsers: string[];
44
+ topAlertTypes: Array<{
45
+ type: AlertType;
46
+ count: number;
47
+ }>;
48
+ };
49
+ exportHistory(format?: 'json' | 'csv'): string;
50
+ private exportToCSV;
51
+ importHistory(data: string, format?: 'json', merge?: boolean): {
52
+ imported: number;
53
+ errors: string[];
54
+ };
55
+ clearHistory(): void;
56
+ clearOldHistory(olderThanMs: number): number;
57
+ private enforceMaxSize;
58
+ getConfig(): {
59
+ maxHistoryEntries: number;
60
+ persistenceEnabled: boolean;
61
+ persistenceFilePath: string;
62
+ currentSize: number;
63
+ };
64
+ updateConfig(updates: {
65
+ maxHistoryEntries?: number;
66
+ persistenceEnabled?: boolean;
67
+ persistenceFilePath?: string;
68
+ }): void;
69
+ forceSave(): Promise<void>;
70
+ destroy(): Promise<void>;
71
+ }
72
+ //# sourceMappingURL=alert-history-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-history-manager.d.ts","sourceRoot":"","sources":["../../src/utils/alert-history-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,492 @@
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.AlertHistoryManager = void 0;
37
+ const events_1 = require("events");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ class AlertHistoryManager extends events_1.EventEmitter {
41
+ constructor(config) {
42
+ super();
43
+ this.historyEntries = [];
44
+ this.isDirty = false;
45
+ this.maxHistoryEntries = config?.maxHistoryEntries || 10000;
46
+ this.persistenceEnabled = config?.persistenceEnabled !== false;
47
+ this.persistenceFilePath = config?.persistenceFile || path.join(process.cwd(), '.polyv-alerts', 'alert-history.json');
48
+ this.initializePersistence();
49
+ this.setupAutoSave();
50
+ }
51
+ async initializePersistence() {
52
+ if (!this.persistenceEnabled)
53
+ return;
54
+ try {
55
+ const dir = path.dirname(this.persistenceFilePath);
56
+ if (!fs.existsSync(dir)) {
57
+ fs.mkdirSync(dir, { recursive: true });
58
+ }
59
+ await this.loadHistory();
60
+ }
61
+ catch (error) {
62
+ console.warn('Failed to initialize alert history persistence:', error);
63
+ this.emit('persistence:error', { action: 'initialize', error });
64
+ }
65
+ }
66
+ setupAutoSave() {
67
+ if (!this.persistenceEnabled)
68
+ return;
69
+ this.autoSaveInterval = setInterval(async () => {
70
+ if (this.isDirty) {
71
+ await this.saveHistory();
72
+ }
73
+ }, 30000);
74
+ }
75
+ async loadHistory() {
76
+ if (!this.persistenceEnabled || !fs.existsSync(this.persistenceFilePath)) {
77
+ return;
78
+ }
79
+ try {
80
+ const data = fs.readFileSync(this.persistenceFilePath, 'utf8');
81
+ const parsed = JSON.parse(data);
82
+ if (Array.isArray(parsed.entries)) {
83
+ this.historyEntries = parsed.entries.map((entry) => ({
84
+ ...entry,
85
+ alert: { ...entry.alert },
86
+ timestamp: typeof entry.timestamp === 'string' ?
87
+ new Date(entry.timestamp).getTime() : entry.timestamp
88
+ }));
89
+ if (this.historyEntries.length > this.maxHistoryEntries) {
90
+ this.historyEntries = this.historyEntries
91
+ .sort((a, b) => b.timestamp - a.timestamp)
92
+ .slice(0, this.maxHistoryEntries);
93
+ this.isDirty = true;
94
+ }
95
+ }
96
+ this.emit('history:loaded', {
97
+ count: this.historyEntries.length,
98
+ file: this.persistenceFilePath
99
+ });
100
+ }
101
+ catch (error) {
102
+ console.warn('Failed to load alert history:', error);
103
+ this.emit('persistence:error', { action: 'load', error });
104
+ }
105
+ }
106
+ async saveHistory() {
107
+ if (!this.persistenceEnabled || !this.isDirty)
108
+ return;
109
+ try {
110
+ const data = {
111
+ version: '1.0',
112
+ timestamp: new Date().toISOString(),
113
+ count: this.historyEntries.length,
114
+ entries: this.historyEntries
115
+ };
116
+ const dir = path.dirname(this.persistenceFilePath);
117
+ if (!fs.existsSync(dir)) {
118
+ fs.mkdirSync(dir, { recursive: true });
119
+ }
120
+ fs.writeFileSync(this.persistenceFilePath, JSON.stringify(data, null, 2), 'utf8');
121
+ this.isDirty = false;
122
+ this.emit('history:saved', {
123
+ count: this.historyEntries.length,
124
+ file: this.persistenceFilePath
125
+ });
126
+ }
127
+ catch (error) {
128
+ console.warn('Failed to save alert history:', error);
129
+ this.emit('persistence:error', { action: 'save', error });
130
+ }
131
+ }
132
+ addAlert(alert, action = 'created', user, context) {
133
+ const entry = {
134
+ alert: { ...alert },
135
+ timestamp: Date.now(),
136
+ action,
137
+ ...(user && { user }),
138
+ ...(context && { context })
139
+ };
140
+ this.historyEntries.unshift(entry);
141
+ this.enforceMaxSize();
142
+ this.isDirty = true;
143
+ this.emit('entry:added', { entry, alert });
144
+ }
145
+ recordAction(alertId, action, user, context) {
146
+ const alertEntry = this.historyEntries.find(entry => entry.alert.id === alertId);
147
+ if (!alertEntry)
148
+ return null;
149
+ const actionEntry = {
150
+ alert: { ...alertEntry.alert },
151
+ timestamp: Date.now(),
152
+ action,
153
+ ...(user && { user }),
154
+ ...(context && { context })
155
+ };
156
+ this.historyEntries.unshift(actionEntry);
157
+ this.enforceMaxSize();
158
+ this.isDirty = true;
159
+ this.emit('action:recorded', { entry: actionEntry, alertId, action });
160
+ return actionEntry;
161
+ }
162
+ updateAlert(updatedAlert, user) {
163
+ let updateCount = 0;
164
+ this.historyEntries.forEach(entry => {
165
+ if (entry.alert.id === updatedAlert.id) {
166
+ entry.alert = { ...updatedAlert };
167
+ updateCount++;
168
+ }
169
+ });
170
+ if (updateCount > 0) {
171
+ this.recordAction(updatedAlert.id, 'updated', user, {
172
+ updateCount,
173
+ timestamp: Date.now()
174
+ });
175
+ }
176
+ }
177
+ getHistory(filter, limit, offset = 0) {
178
+ let filtered = this.historyEntries;
179
+ if (filter) {
180
+ filtered = this.applyFilter(filtered, filter);
181
+ }
182
+ const start = offset;
183
+ const end = limit ? start + limit : undefined;
184
+ return filtered.slice(start, end);
185
+ }
186
+ getAlertHistory(alertId) {
187
+ return this.historyEntries.filter(entry => entry.alert.id === alertId);
188
+ }
189
+ getHistoryByAction(action) {
190
+ return this.historyEntries.filter(entry => entry.action === action);
191
+ }
192
+ getHistoryByUser(user) {
193
+ return this.historyEntries.filter(entry => entry.user === user);
194
+ }
195
+ getHistoryByTimeRange(startTime, endTime) {
196
+ return this.historyEntries.filter(entry => entry.timestamp >= startTime && entry.timestamp <= endTime);
197
+ }
198
+ applyFilter(entries, filter) {
199
+ return entries.filter(entry => {
200
+ const alert = entry.alert;
201
+ if (filter.levels?.length && !filter.levels.includes(alert.level)) {
202
+ return false;
203
+ }
204
+ if (filter.types?.length && !filter.types.includes(alert.type)) {
205
+ return false;
206
+ }
207
+ if (filter.statuses?.length && !filter.statuses.includes(alert.status)) {
208
+ return false;
209
+ }
210
+ if (filter.sources?.length && !filter.sources.includes(alert.source)) {
211
+ return false;
212
+ }
213
+ if (filter.channelIds?.length && !filter.channelIds.includes(alert.channelId || '')) {
214
+ return false;
215
+ }
216
+ if (filter.timeRange) {
217
+ if (entry.timestamp < filter.timeRange.start ||
218
+ entry.timestamp > filter.timeRange.end) {
219
+ return false;
220
+ }
221
+ }
222
+ if (filter.searchText) {
223
+ const searchText = filter.searchText.toLowerCase();
224
+ return alert.title.toLowerCase().includes(searchText) ||
225
+ alert.message.toLowerCase().includes(searchText) ||
226
+ alert.source.toLowerCase().includes(searchText) ||
227
+ entry.action.toLowerCase().includes(searchText);
228
+ }
229
+ if (filter.acknowledgedOnly && !alert.acknowledged) {
230
+ return false;
231
+ }
232
+ if (filter.unacknowledgedOnly && alert.acknowledged) {
233
+ return false;
234
+ }
235
+ return true;
236
+ });
237
+ }
238
+ searchHistory(searchText, searchFields = ['title', 'message'], limit = 100) {
239
+ if (!searchText || searchText.trim() === '') {
240
+ return [];
241
+ }
242
+ const searchLower = searchText.toLowerCase();
243
+ const matches = this.historyEntries.filter(entry => {
244
+ return searchFields.some(field => {
245
+ switch (field) {
246
+ case 'title':
247
+ return entry.alert.title.toLowerCase().includes(searchLower);
248
+ case 'message':
249
+ return entry.alert.message.toLowerCase().includes(searchLower);
250
+ case 'source':
251
+ return entry.alert.source.toLowerCase().includes(searchLower);
252
+ case 'action':
253
+ return entry.action.toLowerCase().includes(searchLower);
254
+ case 'user':
255
+ return entry.user?.toLowerCase().includes(searchLower) || false;
256
+ default:
257
+ return false;
258
+ }
259
+ });
260
+ });
261
+ return matches.slice(0, limit);
262
+ }
263
+ getStatistics() {
264
+ const stats = {
265
+ totalEntries: this.historyEntries.length,
266
+ uniqueAlerts: new Set(this.historyEntries.map(e => e.alert.id)).size,
267
+ actionCounts: {},
268
+ userCounts: {},
269
+ timeRange: null,
270
+ levelCounts: { info: 0, warning: 0, error: 0, critical: 0 },
271
+ typeCounts: { system: 0, stream: 0, channel: 0, network: 0 },
272
+ statusCounts: { active: 0, acknowledged: 0, resolved: 0, ignored: 0 }
273
+ };
274
+ if (this.historyEntries.length === 0) {
275
+ return stats;
276
+ }
277
+ const timestamps = this.historyEntries.map(e => e.timestamp);
278
+ stats.timeRange = {
279
+ earliest: Math.min(...timestamps),
280
+ latest: Math.max(...timestamps)
281
+ };
282
+ this.historyEntries.forEach(entry => {
283
+ stats.actionCounts[entry.action] = (stats.actionCounts[entry.action] || 0) + 1;
284
+ if (entry.user) {
285
+ stats.userCounts[entry.user] = (stats.userCounts[entry.user] || 0) + 1;
286
+ }
287
+ stats.levelCounts[entry.alert.level]++;
288
+ stats.typeCounts[entry.alert.type]++;
289
+ stats.statusCounts[entry.alert.status]++;
290
+ });
291
+ return stats;
292
+ }
293
+ getRecentActivity(hours = 24) {
294
+ const cutoffTime = Date.now() - (hours * 60 * 60 * 1000);
295
+ const recentEntries = this.historyEntries.filter(entry => entry.timestamp >= cutoffTime);
296
+ const summary = {
297
+ totalAlerts: recentEntries.length,
298
+ newAlerts: 0,
299
+ acknowledgedAlerts: 0,
300
+ resolvedAlerts: 0,
301
+ activeUsers: [],
302
+ topAlertTypes: []
303
+ };
304
+ const userSet = new Set();
305
+ const typeCounts = new Map();
306
+ recentEntries.forEach(entry => {
307
+ switch (entry.action) {
308
+ case 'created':
309
+ summary.newAlerts++;
310
+ break;
311
+ case 'acknowledged':
312
+ summary.acknowledgedAlerts++;
313
+ break;
314
+ case 'resolved':
315
+ summary.resolvedAlerts++;
316
+ break;
317
+ }
318
+ if (entry.user) {
319
+ userSet.add(entry.user);
320
+ }
321
+ const currentCount = typeCounts.get(entry.alert.type) || 0;
322
+ typeCounts.set(entry.alert.type, currentCount + 1);
323
+ });
324
+ summary.activeUsers = Array.from(userSet);
325
+ summary.topAlertTypes = Array.from(typeCounts.entries())
326
+ .map(([type, count]) => ({ type, count }))
327
+ .sort((a, b) => b.count - a.count);
328
+ return summary;
329
+ }
330
+ exportHistory(format = 'json') {
331
+ if (format === 'csv') {
332
+ return this.exportToCSV();
333
+ }
334
+ else {
335
+ return JSON.stringify({
336
+ version: '1.0',
337
+ exportedAt: new Date().toISOString(),
338
+ count: this.historyEntries.length,
339
+ entries: this.historyEntries
340
+ }, null, 2);
341
+ }
342
+ }
343
+ exportToCSV() {
344
+ const headers = [
345
+ 'Timestamp',
346
+ 'Action',
347
+ 'User',
348
+ 'Alert ID',
349
+ 'Alert Level',
350
+ 'Alert Type',
351
+ 'Alert Status',
352
+ 'Alert Title',
353
+ 'Alert Message',
354
+ 'Alert Source',
355
+ 'Channel ID'
356
+ ];
357
+ const rows = this.historyEntries.map(entry => [
358
+ new Date(entry.timestamp).toISOString(),
359
+ entry.action,
360
+ entry.user || '',
361
+ entry.alert.id,
362
+ entry.alert.level,
363
+ entry.alert.type,
364
+ entry.alert.status,
365
+ `"${entry.alert.title.replace(/"/g, '""').replace(/\n/g, '\\n')}"`,
366
+ `"${entry.alert.message.replace(/"/g, '""').replace(/\n/g, '\\n')}"`,
367
+ entry.alert.source,
368
+ entry.alert.channelId || ''
369
+ ]);
370
+ return [headers.join(','), ...rows.map(row => row.join(','))].join('\n');
371
+ }
372
+ importHistory(data, format = 'json', merge = true) {
373
+ const result = { imported: 0, errors: [] };
374
+ try {
375
+ if (format === 'json') {
376
+ const parsed = JSON.parse(data);
377
+ const entries = Array.isArray(parsed.entries) ? parsed.entries :
378
+ Array.isArray(parsed) ? parsed : [];
379
+ if (!merge) {
380
+ this.historyEntries = [];
381
+ }
382
+ entries.forEach((entry, index) => {
383
+ try {
384
+ if (!entry.alert || !entry.action || !entry.timestamp) {
385
+ throw new Error('Missing required fields (alert, action, timestamp)');
386
+ }
387
+ if (!entry.alert.id || !entry.alert.level || !entry.alert.type) {
388
+ throw new Error('Invalid alert data');
389
+ }
390
+ const historyEntry = {
391
+ alert: entry.alert,
392
+ timestamp: typeof entry.timestamp === 'string' ?
393
+ new Date(entry.timestamp).getTime() : entry.timestamp,
394
+ action: entry.action,
395
+ user: entry.user,
396
+ context: entry.context
397
+ };
398
+ this.historyEntries.push(historyEntry);
399
+ result.imported++;
400
+ }
401
+ catch (error) {
402
+ result.errors.push(`Entry ${index}: ${error instanceof Error ? error.message : 'Invalid format'}`);
403
+ }
404
+ });
405
+ this.historyEntries.sort((a, b) => b.timestamp - a.timestamp);
406
+ this.enforceMaxSize();
407
+ this.isDirty = true;
408
+ }
409
+ else {
410
+ result.errors.push('CSV import not yet implemented');
411
+ }
412
+ }
413
+ catch (error) {
414
+ result.errors.push(`Parse error: ${error instanceof Error ? error.message : 'Unknown error'}`);
415
+ }
416
+ this.emit('history:imported', result);
417
+ return result;
418
+ }
419
+ clearHistory() {
420
+ const count = this.historyEntries.length;
421
+ this.historyEntries = [];
422
+ this.isDirty = true;
423
+ this.emit('history:cleared', { count });
424
+ }
425
+ clearOldHistory(olderThanMs) {
426
+ const cutoffTime = Date.now() - olderThanMs;
427
+ const initialCount = this.historyEntries.length;
428
+ this.historyEntries = this.historyEntries.filter(entry => entry.timestamp >= cutoffTime);
429
+ const clearedCount = initialCount - this.historyEntries.length;
430
+ if (clearedCount > 0) {
431
+ this.isDirty = true;
432
+ this.emit('history:pruned', { clearedCount, remaining: this.historyEntries.length });
433
+ }
434
+ return clearedCount;
435
+ }
436
+ enforceMaxSize() {
437
+ if (this.historyEntries.length > this.maxHistoryEntries) {
438
+ const removedCount = this.historyEntries.length - this.maxHistoryEntries;
439
+ this.historyEntries = this.historyEntries.slice(0, this.maxHistoryEntries);
440
+ this.emit('history:trimmed', {
441
+ removedCount,
442
+ remaining: this.historyEntries.length
443
+ });
444
+ }
445
+ }
446
+ getConfig() {
447
+ return {
448
+ maxHistoryEntries: this.maxHistoryEntries,
449
+ persistenceEnabled: this.persistenceEnabled,
450
+ persistenceFilePath: this.persistenceFilePath,
451
+ currentSize: this.historyEntries.length
452
+ };
453
+ }
454
+ updateConfig(updates) {
455
+ if (updates.maxHistoryEntries !== undefined) {
456
+ this.maxHistoryEntries = updates.maxHistoryEntries;
457
+ this.enforceMaxSize();
458
+ }
459
+ if (updates.persistenceEnabled !== undefined) {
460
+ this.persistenceEnabled = updates.persistenceEnabled;
461
+ if (this.persistenceEnabled) {
462
+ this.setupAutoSave();
463
+ }
464
+ else if (this.autoSaveInterval) {
465
+ clearInterval(this.autoSaveInterval);
466
+ this.autoSaveInterval = undefined;
467
+ }
468
+ }
469
+ if (updates.persistenceFilePath !== undefined) {
470
+ this.persistenceFilePath = updates.persistenceFilePath;
471
+ }
472
+ this.emit('config:updated', updates);
473
+ }
474
+ async forceSave() {
475
+ this.isDirty = true;
476
+ await this.saveHistory();
477
+ }
478
+ async destroy() {
479
+ if (this.isDirty) {
480
+ await this.saveHistory();
481
+ }
482
+ if (this.autoSaveInterval) {
483
+ clearInterval(this.autoSaveInterval);
484
+ this.autoSaveInterval = undefined;
485
+ }
486
+ this.historyEntries = [];
487
+ this.removeAllListeners();
488
+ this.emit('manager:destroyed');
489
+ }
490
+ }
491
+ exports.AlertHistoryManager = AlertHistoryManager;
492
+ //# sourceMappingURL=alert-history-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-history-manager.js","sourceRoot":"","sources":["../../src/utils/alert-history-manager.ts"],"names":[],"mappings":"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"}