@danielsimonjr/memoryjs 1.0.0 → 1.1.0
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.
- package/README.md +385 -113
- package/README.md.backup-1768084780988 +266 -0
- package/dist/index.cjs +17364 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12371 -0
- package/dist/index.d.ts +12367 -11
- package/dist/index.js +17102 -19
- package/dist/index.js.map +1 -1
- package/dist/workers/levenshteinWorker.cjs +102 -0
- package/dist/workers/levenshteinWorker.cjs.map +1 -0
- package/dist/workers/levenshteinWorker.js +57 -91
- package/dist/workers/levenshteinWorker.js.map +1 -1
- package/package.json +12 -6
- package/dist/core/EntityManager.d.ts +0 -268
- package/dist/core/EntityManager.d.ts.map +0 -1
- package/dist/core/EntityManager.js +0 -512
- package/dist/core/EntityManager.js.map +0 -1
- package/dist/core/GraphEventEmitter.d.ts +0 -202
- package/dist/core/GraphEventEmitter.d.ts.map +0 -1
- package/dist/core/GraphEventEmitter.js +0 -347
- package/dist/core/GraphEventEmitter.js.map +0 -1
- package/dist/core/GraphStorage.d.ts +0 -395
- package/dist/core/GraphStorage.d.ts.map +0 -1
- package/dist/core/GraphStorage.js +0 -786
- package/dist/core/GraphStorage.js.map +0 -1
- package/dist/core/GraphTraversal.d.ts +0 -141
- package/dist/core/GraphTraversal.d.ts.map +0 -1
- package/dist/core/GraphTraversal.js +0 -574
- package/dist/core/GraphTraversal.js.map +0 -1
- package/dist/core/HierarchyManager.d.ts +0 -111
- package/dist/core/HierarchyManager.d.ts.map +0 -1
- package/dist/core/HierarchyManager.js +0 -225
- package/dist/core/HierarchyManager.js.map +0 -1
- package/dist/core/ManagerContext.d.ts +0 -76
- package/dist/core/ManagerContext.d.ts.map +0 -1
- package/dist/core/ManagerContext.js +0 -129
- package/dist/core/ManagerContext.js.map +0 -1
- package/dist/core/ObservationManager.d.ts +0 -85
- package/dist/core/ObservationManager.d.ts.map +0 -1
- package/dist/core/ObservationManager.js +0 -124
- package/dist/core/ObservationManager.js.map +0 -1
- package/dist/core/RelationManager.d.ts +0 -131
- package/dist/core/RelationManager.d.ts.map +0 -1
- package/dist/core/RelationManager.js +0 -212
- package/dist/core/RelationManager.js.map +0 -1
- package/dist/core/SQLiteStorage.d.ts +0 -354
- package/dist/core/SQLiteStorage.d.ts.map +0 -1
- package/dist/core/SQLiteStorage.js +0 -919
- package/dist/core/SQLiteStorage.js.map +0 -1
- package/dist/core/StorageFactory.d.ts +0 -45
- package/dist/core/StorageFactory.d.ts.map +0 -1
- package/dist/core/StorageFactory.js +0 -65
- package/dist/core/StorageFactory.js.map +0 -1
- package/dist/core/TransactionManager.d.ts +0 -464
- package/dist/core/TransactionManager.d.ts.map +0 -1
- package/dist/core/TransactionManager.js +0 -869
- package/dist/core/TransactionManager.js.map +0 -1
- package/dist/core/index.d.ts +0 -17
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -20
- package/dist/core/index.js.map +0 -1
- package/dist/features/AnalyticsManager.d.ts +0 -44
- package/dist/features/AnalyticsManager.d.ts.map +0 -1
- package/dist/features/AnalyticsManager.js +0 -224
- package/dist/features/AnalyticsManager.js.map +0 -1
- package/dist/features/ArchiveManager.d.ts +0 -133
- package/dist/features/ArchiveManager.d.ts.map +0 -1
- package/dist/features/ArchiveManager.js +0 -282
- package/dist/features/ArchiveManager.js.map +0 -1
- package/dist/features/CompressionManager.d.ts +0 -119
- package/dist/features/CompressionManager.d.ts.map +0 -1
- package/dist/features/CompressionManager.js +0 -470
- package/dist/features/CompressionManager.js.map +0 -1
- package/dist/features/IOManager.d.ts +0 -225
- package/dist/features/IOManager.d.ts.map +0 -1
- package/dist/features/IOManager.js +0 -1093
- package/dist/features/IOManager.js.map +0 -1
- package/dist/features/KeywordExtractor.d.ts +0 -61
- package/dist/features/KeywordExtractor.d.ts.map +0 -1
- package/dist/features/KeywordExtractor.js +0 -127
- package/dist/features/KeywordExtractor.js.map +0 -1
- package/dist/features/ObservationNormalizer.d.ts +0 -90
- package/dist/features/ObservationNormalizer.d.ts.map +0 -1
- package/dist/features/ObservationNormalizer.js +0 -194
- package/dist/features/ObservationNormalizer.js.map +0 -1
- package/dist/features/StreamingExporter.d.ts +0 -128
- package/dist/features/StreamingExporter.d.ts.map +0 -1
- package/dist/features/StreamingExporter.js +0 -212
- package/dist/features/StreamingExporter.js.map +0 -1
- package/dist/features/TagManager.d.ts +0 -147
- package/dist/features/TagManager.d.ts.map +0 -1
- package/dist/features/TagManager.js +0 -211
- package/dist/features/TagManager.js.map +0 -1
- package/dist/features/index.d.ts +0 -14
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/index.js +0 -15
- package/dist/features/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/search/BM25Search.d.ts +0 -148
- package/dist/search/BM25Search.d.ts.map +0 -1
- package/dist/search/BM25Search.js +0 -340
- package/dist/search/BM25Search.js.map +0 -1
- package/dist/search/BasicSearch.d.ts +0 -51
- package/dist/search/BasicSearch.d.ts.map +0 -1
- package/dist/search/BasicSearch.js +0 -138
- package/dist/search/BasicSearch.js.map +0 -1
- package/dist/search/BooleanSearch.d.ts +0 -98
- package/dist/search/BooleanSearch.d.ts.map +0 -1
- package/dist/search/BooleanSearch.js +0 -431
- package/dist/search/BooleanSearch.js.map +0 -1
- package/dist/search/EarlyTerminationManager.d.ts +0 -140
- package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
- package/dist/search/EarlyTerminationManager.js +0 -280
- package/dist/search/EarlyTerminationManager.js.map +0 -1
- package/dist/search/EmbeddingCache.d.ts +0 -175
- package/dist/search/EmbeddingCache.d.ts.map +0 -1
- package/dist/search/EmbeddingCache.js +0 -247
- package/dist/search/EmbeddingCache.js.map +0 -1
- package/dist/search/EmbeddingService.d.ts +0 -277
- package/dist/search/EmbeddingService.d.ts.map +0 -1
- package/dist/search/EmbeddingService.js +0 -531
- package/dist/search/EmbeddingService.js.map +0 -1
- package/dist/search/FuzzySearch.d.ts +0 -118
- package/dist/search/FuzzySearch.d.ts.map +0 -1
- package/dist/search/FuzzySearch.js +0 -313
- package/dist/search/FuzzySearch.js.map +0 -1
- package/dist/search/HybridScorer.d.ts +0 -181
- package/dist/search/HybridScorer.d.ts.map +0 -1
- package/dist/search/HybridScorer.js +0 -258
- package/dist/search/HybridScorer.js.map +0 -1
- package/dist/search/HybridSearchManager.d.ts +0 -80
- package/dist/search/HybridSearchManager.d.ts.map +0 -1
- package/dist/search/HybridSearchManager.js +0 -188
- package/dist/search/HybridSearchManager.js.map +0 -1
- package/dist/search/IncrementalIndexer.d.ts +0 -201
- package/dist/search/IncrementalIndexer.d.ts.map +0 -1
- package/dist/search/IncrementalIndexer.js +0 -343
- package/dist/search/IncrementalIndexer.js.map +0 -1
- package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
- package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
- package/dist/search/OptimizedInvertedIndex.js +0 -359
- package/dist/search/OptimizedInvertedIndex.js.map +0 -1
- package/dist/search/ParallelSearchExecutor.d.ts +0 -172
- package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
- package/dist/search/ParallelSearchExecutor.js +0 -310
- package/dist/search/ParallelSearchExecutor.js.map +0 -1
- package/dist/search/QuantizedVectorStore.d.ts +0 -171
- package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
- package/dist/search/QuantizedVectorStore.js +0 -308
- package/dist/search/QuantizedVectorStore.js.map +0 -1
- package/dist/search/QueryAnalyzer.d.ts +0 -76
- package/dist/search/QueryAnalyzer.d.ts.map +0 -1
- package/dist/search/QueryAnalyzer.js +0 -228
- package/dist/search/QueryAnalyzer.js.map +0 -1
- package/dist/search/QueryCostEstimator.d.ts +0 -244
- package/dist/search/QueryCostEstimator.d.ts.map +0 -1
- package/dist/search/QueryCostEstimator.js +0 -653
- package/dist/search/QueryCostEstimator.js.map +0 -1
- package/dist/search/QueryPlanCache.d.ts +0 -220
- package/dist/search/QueryPlanCache.d.ts.map +0 -1
- package/dist/search/QueryPlanCache.js +0 -380
- package/dist/search/QueryPlanCache.js.map +0 -1
- package/dist/search/QueryPlanner.d.ts +0 -58
- package/dist/search/QueryPlanner.d.ts.map +0 -1
- package/dist/search/QueryPlanner.js +0 -138
- package/dist/search/QueryPlanner.js.map +0 -1
- package/dist/search/RankedSearch.d.ts +0 -71
- package/dist/search/RankedSearch.d.ts.map +0 -1
- package/dist/search/RankedSearch.js +0 -239
- package/dist/search/RankedSearch.js.map +0 -1
- package/dist/search/ReflectionManager.d.ts +0 -120
- package/dist/search/ReflectionManager.d.ts.map +0 -1
- package/dist/search/ReflectionManager.js +0 -232
- package/dist/search/ReflectionManager.js.map +0 -1
- package/dist/search/SavedSearchManager.d.ts +0 -79
- package/dist/search/SavedSearchManager.d.ts.map +0 -1
- package/dist/search/SavedSearchManager.js +0 -147
- package/dist/search/SavedSearchManager.js.map +0 -1
- package/dist/search/SearchFilterChain.d.ts +0 -120
- package/dist/search/SearchFilterChain.d.ts.map +0 -1
- package/dist/search/SearchFilterChain.js +0 -186
- package/dist/search/SearchFilterChain.js.map +0 -1
- package/dist/search/SearchManager.d.ts +0 -326
- package/dist/search/SearchManager.d.ts.map +0 -1
- package/dist/search/SearchManager.js +0 -454
- package/dist/search/SearchManager.js.map +0 -1
- package/dist/search/SearchSuggestions.d.ts +0 -27
- package/dist/search/SearchSuggestions.d.ts.map +0 -1
- package/dist/search/SearchSuggestions.js +0 -58
- package/dist/search/SearchSuggestions.js.map +0 -1
- package/dist/search/SemanticSearch.d.ts +0 -149
- package/dist/search/SemanticSearch.d.ts.map +0 -1
- package/dist/search/SemanticSearch.js +0 -324
- package/dist/search/SemanticSearch.js.map +0 -1
- package/dist/search/SymbolicSearch.d.ts +0 -61
- package/dist/search/SymbolicSearch.d.ts.map +0 -1
- package/dist/search/SymbolicSearch.js +0 -164
- package/dist/search/SymbolicSearch.js.map +0 -1
- package/dist/search/TFIDFEventSync.d.ts +0 -85
- package/dist/search/TFIDFEventSync.d.ts.map +0 -1
- package/dist/search/TFIDFEventSync.js +0 -134
- package/dist/search/TFIDFEventSync.js.map +0 -1
- package/dist/search/TFIDFIndexManager.d.ts +0 -151
- package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
- package/dist/search/TFIDFIndexManager.js +0 -433
- package/dist/search/TFIDFIndexManager.js.map +0 -1
- package/dist/search/VectorStore.d.ts +0 -235
- package/dist/search/VectorStore.d.ts.map +0 -1
- package/dist/search/VectorStore.js +0 -312
- package/dist/search/VectorStore.js.map +0 -1
- package/dist/search/index.d.ts +0 -35
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js +0 -53
- package/dist/search/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/types.d.ts +0 -1811
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -10
- package/dist/types/types.js.map +0 -1
- package/dist/utils/BatchProcessor.d.ts +0 -271
- package/dist/utils/BatchProcessor.d.ts.map +0 -1
- package/dist/utils/BatchProcessor.js +0 -377
- package/dist/utils/BatchProcessor.js.map +0 -1
- package/dist/utils/MemoryMonitor.d.ts +0 -176
- package/dist/utils/MemoryMonitor.d.ts.map +0 -1
- package/dist/utils/MemoryMonitor.js +0 -306
- package/dist/utils/MemoryMonitor.js.map +0 -1
- package/dist/utils/WorkerPoolManager.d.ts +0 -233
- package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
- package/dist/utils/WorkerPoolManager.js +0 -421
- package/dist/utils/WorkerPoolManager.js.map +0 -1
- package/dist/utils/compressedCache.d.ts +0 -221
- package/dist/utils/compressedCache.d.ts.map +0 -1
- package/dist/utils/compressedCache.js +0 -349
- package/dist/utils/compressedCache.js.map +0 -1
- package/dist/utils/compressionUtil.d.ts +0 -214
- package/dist/utils/compressionUtil.d.ts.map +0 -1
- package/dist/utils/compressionUtil.js +0 -248
- package/dist/utils/compressionUtil.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -245
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js +0 -253
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/entityUtils.d.ts +0 -379
- package/dist/utils/entityUtils.d.ts.map +0 -1
- package/dist/utils/entityUtils.js +0 -649
- package/dist/utils/entityUtils.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -95
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -146
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/formatters.d.ts +0 -145
- package/dist/utils/formatters.d.ts.map +0 -1
- package/dist/utils/formatters.js +0 -133
- package/dist/utils/formatters.js.map +0 -1
- package/dist/utils/index.d.ts +0 -26
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -88
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/indexes.d.ts +0 -270
- package/dist/utils/indexes.d.ts.map +0 -1
- package/dist/utils/indexes.js +0 -527
- package/dist/utils/indexes.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -31
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -41
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/operationUtils.d.ts +0 -124
- package/dist/utils/operationUtils.d.ts.map +0 -1
- package/dist/utils/operationUtils.js +0 -176
- package/dist/utils/operationUtils.js.map +0 -1
- package/dist/utils/parallelUtils.d.ts +0 -76
- package/dist/utils/parallelUtils.d.ts.map +0 -1
- package/dist/utils/parallelUtils.js +0 -192
- package/dist/utils/parallelUtils.js.map +0 -1
- package/dist/utils/schemas.d.ts +0 -556
- package/dist/utils/schemas.d.ts.map +0 -1
- package/dist/utils/schemas.js +0 -485
- package/dist/utils/schemas.js.map +0 -1
- package/dist/utils/searchAlgorithms.d.ts +0 -99
- package/dist/utils/searchAlgorithms.d.ts.map +0 -1
- package/dist/utils/searchAlgorithms.js +0 -168
- package/dist/utils/searchAlgorithms.js.map +0 -1
- package/dist/utils/searchCache.d.ts +0 -108
- package/dist/utils/searchCache.d.ts.map +0 -1
- package/dist/utils/searchCache.js +0 -210
- package/dist/utils/searchCache.js.map +0 -1
- package/dist/utils/taskScheduler.d.ts +0 -294
- package/dist/utils/taskScheduler.d.ts.map +0 -1
- package/dist/utils/taskScheduler.js +0 -487
- package/dist/utils/taskScheduler.js.map +0 -1
- package/dist/workers/index.d.ts +0 -12
- package/dist/workers/index.d.ts.map +0 -1
- package/dist/workers/index.js +0 -10
- package/dist/workers/index.js.map +0 -1
- package/dist/workers/levenshteinWorker.d.ts +0 -60
- package/dist/workers/levenshteinWorker.d.ts.map +0 -1
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Usage Monitor
|
|
3
|
-
*
|
|
4
|
-
* Phase 12 Sprint 6: Track memory usage across all components
|
|
5
|
-
* with human-readable formatting.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/MemoryMonitor
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Default memory thresholds.
|
|
11
|
-
*/
|
|
12
|
-
const DEFAULT_THRESHOLDS = {
|
|
13
|
-
warning: 100 * 1024 * 1024, // 100 MB
|
|
14
|
-
critical: 500 * 1024 * 1024, // 500 MB
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Memory Monitor for tracking usage across components.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const monitor = new MemoryMonitor();
|
|
22
|
-
*
|
|
23
|
-
* // Register components
|
|
24
|
-
* monitor.registerComponent('entities', () => entities.length * 500);
|
|
25
|
-
* monitor.registerComponent('vectors', () => vectors.size * dimension * 4);
|
|
26
|
-
*
|
|
27
|
-
* // Get usage stats
|
|
28
|
-
* const stats = monitor.getUsage();
|
|
29
|
-
* console.log(`Total memory: ${stats.totalFormatted}`);
|
|
30
|
-
*
|
|
31
|
-
* // Check for alerts
|
|
32
|
-
* const alerts = monitor.checkThresholds();
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export class MemoryMonitor {
|
|
36
|
-
componentEstimators;
|
|
37
|
-
itemCounters;
|
|
38
|
-
thresholds;
|
|
39
|
-
listeners;
|
|
40
|
-
lastUsage = null;
|
|
41
|
-
constructor(thresholds) {
|
|
42
|
-
this.componentEstimators = new Map();
|
|
43
|
-
this.itemCounters = new Map();
|
|
44
|
-
this.thresholds = { ...DEFAULT_THRESHOLDS, ...thresholds };
|
|
45
|
-
this.listeners = [];
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Register a component for memory tracking.
|
|
49
|
-
*
|
|
50
|
-
* @param name - Component name
|
|
51
|
-
* @param estimator - Function that returns estimated bytes
|
|
52
|
-
* @param itemCounter - Optional function that returns item count
|
|
53
|
-
*/
|
|
54
|
-
registerComponent(name, estimator, itemCounter) {
|
|
55
|
-
this.componentEstimators.set(name, estimator);
|
|
56
|
-
if (itemCounter) {
|
|
57
|
-
this.itemCounters.set(name, itemCounter);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Unregister a component.
|
|
62
|
-
*
|
|
63
|
-
* @param name - Component name
|
|
64
|
-
*/
|
|
65
|
-
unregisterComponent(name) {
|
|
66
|
-
this.componentEstimators.delete(name);
|
|
67
|
-
this.itemCounters.delete(name);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Get current memory usage statistics.
|
|
71
|
-
*/
|
|
72
|
-
getUsage() {
|
|
73
|
-
const components = [];
|
|
74
|
-
let totalBytes = 0;
|
|
75
|
-
for (const [name, estimator] of this.componentEstimators) {
|
|
76
|
-
const bytes = estimator();
|
|
77
|
-
totalBytes += bytes;
|
|
78
|
-
const itemCounter = this.itemCounters.get(name);
|
|
79
|
-
const itemCount = itemCounter ? itemCounter() : undefined;
|
|
80
|
-
const bytesPerItem = itemCount && itemCount > 0 ? Math.round(bytes / itemCount) : undefined;
|
|
81
|
-
components.push({
|
|
82
|
-
name,
|
|
83
|
-
bytes,
|
|
84
|
-
itemCount,
|
|
85
|
-
bytesPerItem,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
// Sort by usage descending
|
|
89
|
-
components.sort((a, b) => b.bytes - a.bytes);
|
|
90
|
-
// Get Node.js heap stats if available
|
|
91
|
-
let heapStats;
|
|
92
|
-
if (typeof process !== 'undefined' && process.memoryUsage) {
|
|
93
|
-
const mem = process.memoryUsage();
|
|
94
|
-
heapStats = {
|
|
95
|
-
heapUsed: mem.heapUsed,
|
|
96
|
-
heapTotal: mem.heapTotal,
|
|
97
|
-
external: mem.external,
|
|
98
|
-
rss: mem.rss,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
const stats = {
|
|
102
|
-
totalBytes,
|
|
103
|
-
totalFormatted: this.formatBytes(totalBytes),
|
|
104
|
-
components,
|
|
105
|
-
timestamp: new Date(),
|
|
106
|
-
heapStats,
|
|
107
|
-
};
|
|
108
|
-
this.lastUsage = stats;
|
|
109
|
-
this.notifyListeners(stats);
|
|
110
|
-
return stats;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Get memory usage for a specific component.
|
|
114
|
-
*
|
|
115
|
-
* @param name - Component name
|
|
116
|
-
*/
|
|
117
|
-
getComponentUsage(name) {
|
|
118
|
-
const estimator = this.componentEstimators.get(name);
|
|
119
|
-
if (!estimator)
|
|
120
|
-
return undefined;
|
|
121
|
-
const bytes = estimator();
|
|
122
|
-
const itemCounter = this.itemCounters.get(name);
|
|
123
|
-
const itemCount = itemCounter ? itemCounter() : undefined;
|
|
124
|
-
const bytesPerItem = itemCount && itemCount > 0 ? Math.round(bytes / itemCount) : undefined;
|
|
125
|
-
return {
|
|
126
|
-
name,
|
|
127
|
-
bytes,
|
|
128
|
-
itemCount,
|
|
129
|
-
bytesPerItem,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Check memory thresholds and return alerts.
|
|
134
|
-
*/
|
|
135
|
-
checkThresholds() {
|
|
136
|
-
const alerts = [];
|
|
137
|
-
const usage = this.getUsage();
|
|
138
|
-
// Check total memory
|
|
139
|
-
if (usage.totalBytes >= this.thresholds.critical) {
|
|
140
|
-
alerts.push({
|
|
141
|
-
level: 'critical',
|
|
142
|
-
component: 'total',
|
|
143
|
-
currentBytes: usage.totalBytes,
|
|
144
|
-
threshold: this.thresholds.critical,
|
|
145
|
-
message: `Total memory usage (${this.formatBytes(usage.totalBytes)}) exceeds critical threshold (${this.formatBytes(this.thresholds.critical)})`,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
else if (usage.totalBytes >= this.thresholds.warning) {
|
|
149
|
-
alerts.push({
|
|
150
|
-
level: 'warning',
|
|
151
|
-
component: 'total',
|
|
152
|
-
currentBytes: usage.totalBytes,
|
|
153
|
-
threshold: this.thresholds.warning,
|
|
154
|
-
message: `Total memory usage (${this.formatBytes(usage.totalBytes)}) exceeds warning threshold (${this.formatBytes(this.thresholds.warning)})`,
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
// Check per-component thresholds (50% of total threshold per component)
|
|
158
|
-
const componentWarning = this.thresholds.warning * 0.5;
|
|
159
|
-
const componentCritical = this.thresholds.critical * 0.5;
|
|
160
|
-
for (const component of usage.components) {
|
|
161
|
-
if (component.bytes >= componentCritical) {
|
|
162
|
-
alerts.push({
|
|
163
|
-
level: 'critical',
|
|
164
|
-
component: component.name,
|
|
165
|
-
currentBytes: component.bytes,
|
|
166
|
-
threshold: componentCritical,
|
|
167
|
-
message: `Component '${component.name}' (${this.formatBytes(component.bytes)}) exceeds critical threshold`,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
else if (component.bytes >= componentWarning) {
|
|
171
|
-
alerts.push({
|
|
172
|
-
level: 'warning',
|
|
173
|
-
component: component.name,
|
|
174
|
-
currentBytes: component.bytes,
|
|
175
|
-
threshold: componentWarning,
|
|
176
|
-
message: `Component '${component.name}' (${this.formatBytes(component.bytes)}) exceeds warning threshold`,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return alerts;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Set memory thresholds.
|
|
184
|
-
*
|
|
185
|
-
* @param thresholds - New threshold values
|
|
186
|
-
*/
|
|
187
|
-
setThresholds(thresholds) {
|
|
188
|
-
this.thresholds = { ...this.thresholds, ...thresholds };
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Get current thresholds.
|
|
192
|
-
*/
|
|
193
|
-
getThresholds() {
|
|
194
|
-
return { ...this.thresholds };
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Add a listener for memory changes.
|
|
198
|
-
*
|
|
199
|
-
* @param callback - Callback to invoke on memory changes
|
|
200
|
-
*/
|
|
201
|
-
addListener(callback) {
|
|
202
|
-
this.listeners.push(callback);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Remove a listener.
|
|
206
|
-
*
|
|
207
|
-
* @param callback - Callback to remove
|
|
208
|
-
*/
|
|
209
|
-
removeListener(callback) {
|
|
210
|
-
const index = this.listeners.indexOf(callback);
|
|
211
|
-
if (index !== -1) {
|
|
212
|
-
this.listeners.splice(index, 1);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get a human-readable summary of memory usage.
|
|
217
|
-
*/
|
|
218
|
-
getSummary() {
|
|
219
|
-
const usage = this.getUsage();
|
|
220
|
-
const lines = [
|
|
221
|
-
'=== Memory Usage Summary ===',
|
|
222
|
-
`Total: ${usage.totalFormatted}`,
|
|
223
|
-
'',
|
|
224
|
-
'By Component:',
|
|
225
|
-
];
|
|
226
|
-
for (const component of usage.components) {
|
|
227
|
-
const itemInfo = component.itemCount
|
|
228
|
-
? ` (${component.itemCount.toLocaleString()} items, ~${this.formatBytes(component.bytesPerItem ?? 0)}/item)`
|
|
229
|
-
: '';
|
|
230
|
-
lines.push(` ${component.name}: ${this.formatBytes(component.bytes)}${itemInfo}`);
|
|
231
|
-
}
|
|
232
|
-
if (usage.heapStats) {
|
|
233
|
-
lines.push('');
|
|
234
|
-
lines.push('Node.js Heap:');
|
|
235
|
-
lines.push(` Heap Used: ${this.formatBytes(usage.heapStats.heapUsed)}`);
|
|
236
|
-
lines.push(` Heap Total: ${this.formatBytes(usage.heapStats.heapTotal)}`);
|
|
237
|
-
lines.push(` External: ${this.formatBytes(usage.heapStats.external)}`);
|
|
238
|
-
lines.push(` RSS: ${this.formatBytes(usage.heapStats.rss)}`);
|
|
239
|
-
}
|
|
240
|
-
return lines.join('\n');
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Get the last recorded usage without triggering a new measurement.
|
|
244
|
-
*/
|
|
245
|
-
getLastUsage() {
|
|
246
|
-
return this.lastUsage;
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Format bytes as human-readable string.
|
|
250
|
-
*
|
|
251
|
-
* @param bytes - Number of bytes
|
|
252
|
-
*/
|
|
253
|
-
formatBytes(bytes) {
|
|
254
|
-
if (bytes === 0)
|
|
255
|
-
return '0 B';
|
|
256
|
-
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
257
|
-
const k = 1024;
|
|
258
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
259
|
-
const value = bytes / Math.pow(k, i);
|
|
260
|
-
return `${value.toFixed(i === 0 ? 0 : 2)} ${units[i]}`;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Parse a formatted byte string back to number.
|
|
264
|
-
*
|
|
265
|
-
* @param formatted - Formatted string like "10 MB"
|
|
266
|
-
*/
|
|
267
|
-
parseBytes(formatted) {
|
|
268
|
-
const match = formatted.match(/^([\d.]+)\s*(B|KB|MB|GB|TB)$/i);
|
|
269
|
-
if (!match)
|
|
270
|
-
return 0;
|
|
271
|
-
const value = parseFloat(match[1]);
|
|
272
|
-
const unit = match[2].toUpperCase();
|
|
273
|
-
const units = {
|
|
274
|
-
'B': 1,
|
|
275
|
-
'KB': 1024,
|
|
276
|
-
'MB': 1024 * 1024,
|
|
277
|
-
'GB': 1024 * 1024 * 1024,
|
|
278
|
-
'TB': 1024 * 1024 * 1024 * 1024,
|
|
279
|
-
};
|
|
280
|
-
return value * (units[unit] ?? 1);
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Clear all registered components.
|
|
284
|
-
*/
|
|
285
|
-
clear() {
|
|
286
|
-
this.componentEstimators.clear();
|
|
287
|
-
this.itemCounters.clear();
|
|
288
|
-
this.lastUsage = null;
|
|
289
|
-
}
|
|
290
|
-
// Private methods
|
|
291
|
-
notifyListeners(usage) {
|
|
292
|
-
for (const listener of this.listeners) {
|
|
293
|
-
try {
|
|
294
|
-
listener(usage);
|
|
295
|
-
}
|
|
296
|
-
catch {
|
|
297
|
-
// Ignore listener errors
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Singleton instance for global memory monitoring.
|
|
304
|
-
*/
|
|
305
|
-
export const globalMemoryMonitor = new MemoryMonitor();
|
|
306
|
-
//# sourceMappingURL=MemoryMonitor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryMonitor.js","sourceRoot":"","sources":["../../src/utils/MemoryMonitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoEH;;GAEG;AACH,MAAM,kBAAkB,GAAqB;IAC3C,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS;IACrC,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,aAAa;IAChB,mBAAmB,CAA4B;IAC/C,YAAY,CAA4B;IACxC,UAAU,CAAmB;IAC7B,SAAS,CAAyB;IAClC,SAAS,GAA4B,IAAI,CAAC;IAElD,YAAY,UAAsC;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,UAAU,EAAE,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CACf,IAAY,EACZ,SAAuB,EACvB,WAA0B;QAE1B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,IAAY;QAC9B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;YAC1B,UAAU,IAAI,KAAK,CAAC;YAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,MAAM,YAAY,GAAG,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE5F,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,KAAK;gBACL,SAAS;gBACT,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE7C,sCAAsC;QACtC,IAAI,SAAwC,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAClC,SAAS,GAAG;gBACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,GAAG,EAAE,GAAG,CAAC,GAAG;aACb,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAqB;YAC9B,UAAU;YACV,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC5C,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAY;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEjC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,YAAY,GAAG,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5F,OAAO;YACL,IAAI;YACJ,KAAK;YACL,SAAS;YACT,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,qBAAqB;QACrB,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,UAAU;gBACjB,SAAS,EAAE,OAAO;gBAClB,YAAY,EAAE,KAAK,CAAC,UAAU;gBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;gBACnC,OAAO,EAAE,uBAAuB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,iCAAiC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;aACjJ,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE,OAAO;gBAClB,YAAY,EAAE,KAAK,CAAC,UAAU;gBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;gBAClC,OAAO,EAAE,uBAAuB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,gCAAgC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;aAC/I,CAAC,CAAC;QACL,CAAC;QAED,wEAAwE;QACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;QACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC;QAEzD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,UAAU;oBACjB,SAAS,EAAE,SAAS,CAAC,IAAI;oBACzB,YAAY,EAAE,SAAS,CAAC,KAAK;oBAC7B,SAAS,EAAE,iBAAiB;oBAC5B,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,8BAA8B;iBAC3G,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,SAAS,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,SAAS,CAAC,IAAI;oBACzB,YAAY,EAAE,SAAS,CAAC,KAAK;oBAC7B,SAAS,EAAE,gBAAgB;oBAC3B,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,6BAA6B;iBAC1G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,UAAqC;QACjD,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAA8B;QACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,QAA8B;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAa;YACtB,8BAA8B;YAC9B,UAAU,KAAK,CAAC,cAAc,EAAE;YAChC,EAAE;YACF,eAAe;SAChB,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS;gBAClC,CAAC,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ;gBAC5G,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAa;QACvB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,SAAiB;QAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QAErB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,GAA2B;YACpC,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI,GAAG,IAAI;YACjB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;YACxB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;SAChC,CAAC;QAEF,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,kBAAkB;IAEV,eAAe,CAAC,KAAuB;QAC7C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Worker Pool Manager
|
|
3
|
-
*
|
|
4
|
-
* Phase 12 Sprint 2: Unified worker pool management for all parallelizable operations.
|
|
5
|
-
* Provides centralized lifecycle management, configuration, and statistics.
|
|
6
|
-
*
|
|
7
|
-
* @module utils/WorkerPoolManager
|
|
8
|
-
*/
|
|
9
|
-
import type { Pool, PoolStats } from '@danielsimonjr/workerpool';
|
|
10
|
-
/**
|
|
11
|
-
* Configuration options for worker pools.
|
|
12
|
-
*/
|
|
13
|
-
export interface WorkerPoolConfig {
|
|
14
|
-
/** Maximum number of worker threads (default: CPU count - 1) */
|
|
15
|
-
maxWorkers?: number;
|
|
16
|
-
/** Worker type: 'thread' or 'process' (default: 'thread') */
|
|
17
|
-
workerType?: 'thread' | 'process';
|
|
18
|
-
/** Optional path to worker script file */
|
|
19
|
-
workerPath?: string;
|
|
20
|
-
/** Minimum array size to use parallel processing (default: 200) */
|
|
21
|
-
minParallelSize?: number;
|
|
22
|
-
/** Default task timeout in milliseconds (default: 30000) */
|
|
23
|
-
defaultTimeout?: number;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Extended pool statistics with additional metadata.
|
|
27
|
-
*/
|
|
28
|
-
export interface ExtendedPoolStats extends PoolStats {
|
|
29
|
-
/** Pool identifier */
|
|
30
|
-
poolId: string;
|
|
31
|
-
/** When the pool was created */
|
|
32
|
-
createdAt: number;
|
|
33
|
-
/** Total tasks executed since creation */
|
|
34
|
-
totalTasksExecuted: number;
|
|
35
|
-
/** Total execution time in milliseconds */
|
|
36
|
-
totalExecutionTime: number;
|
|
37
|
-
/** Average task execution time in milliseconds */
|
|
38
|
-
averageExecutionTime: number;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Callback for pool events.
|
|
42
|
-
*/
|
|
43
|
-
export type PoolEventCallback = (poolId: string, event: 'created' | 'shutdown' | 'error', data?: unknown) => void;
|
|
44
|
-
/**
|
|
45
|
-
* WorkerPoolManager - Unified worker pool management
|
|
46
|
-
*
|
|
47
|
-
* Provides centralized management of worker pools for parallel processing.
|
|
48
|
-
* Features:
|
|
49
|
-
* - Named pool registration with automatic lifecycle management
|
|
50
|
-
* - Pool cleanup on process exit
|
|
51
|
-
* - Statistics tracking per pool
|
|
52
|
-
* - Event callbacks for monitoring
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* const manager = WorkerPoolManager.getInstance();
|
|
57
|
-
*
|
|
58
|
-
* // Get or create a pool
|
|
59
|
-
* const pool = manager.getPool('fuzzySearch', {
|
|
60
|
-
* maxWorkers: 4,
|
|
61
|
-
* workerPath: '/path/to/worker.js'
|
|
62
|
-
* });
|
|
63
|
-
*
|
|
64
|
-
* // Execute task
|
|
65
|
-
* const result = await pool.exec('searchEntities', [data]);
|
|
66
|
-
*
|
|
67
|
-
* // Get statistics
|
|
68
|
-
* const stats = manager.getPoolStats('fuzzySearch');
|
|
69
|
-
*
|
|
70
|
-
* // Shutdown all pools on exit
|
|
71
|
-
* await manager.shutdownAll();
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
export declare class WorkerPoolManager {
|
|
75
|
-
private static instance;
|
|
76
|
-
private pools;
|
|
77
|
-
private eventCallbacks;
|
|
78
|
-
private isShuttingDown;
|
|
79
|
-
private shutdownRegistered;
|
|
80
|
-
/**
|
|
81
|
-
* Private constructor for singleton pattern.
|
|
82
|
-
*/
|
|
83
|
-
private constructor();
|
|
84
|
-
/**
|
|
85
|
-
* Get the singleton instance of WorkerPoolManager.
|
|
86
|
-
*
|
|
87
|
-
* @returns The WorkerPoolManager instance
|
|
88
|
-
*/
|
|
89
|
-
static getInstance(): WorkerPoolManager;
|
|
90
|
-
/**
|
|
91
|
-
* Reset the singleton instance (primarily for testing).
|
|
92
|
-
*/
|
|
93
|
-
static resetInstance(): void;
|
|
94
|
-
/**
|
|
95
|
-
* Register process exit handlers for cleanup.
|
|
96
|
-
*/
|
|
97
|
-
private registerShutdownHandlers;
|
|
98
|
-
/**
|
|
99
|
-
* Get or create a named worker pool.
|
|
100
|
-
*
|
|
101
|
-
* If a pool with the given ID exists, returns the existing pool.
|
|
102
|
-
* Otherwise, creates a new pool with the provided configuration.
|
|
103
|
-
*
|
|
104
|
-
* @param poolId - Unique identifier for the pool
|
|
105
|
-
* @param config - Pool configuration options
|
|
106
|
-
* @returns The worker pool instance
|
|
107
|
-
*/
|
|
108
|
-
getPool(poolId: string, config?: WorkerPoolConfig): Pool;
|
|
109
|
-
/**
|
|
110
|
-
* Create a new worker pool with the given ID.
|
|
111
|
-
*
|
|
112
|
-
* @param poolId - Unique identifier for the pool
|
|
113
|
-
* @param config - Pool configuration options
|
|
114
|
-
* @returns The newly created worker pool
|
|
115
|
-
* @throws Error if a pool with the same ID already exists
|
|
116
|
-
*/
|
|
117
|
-
createPool(poolId: string, config?: WorkerPoolConfig): Pool;
|
|
118
|
-
/**
|
|
119
|
-
* Check if a pool with the given ID exists.
|
|
120
|
-
*
|
|
121
|
-
* @param poolId - Pool identifier to check
|
|
122
|
-
* @returns True if pool exists
|
|
123
|
-
*/
|
|
124
|
-
hasPool(poolId: string): boolean;
|
|
125
|
-
/**
|
|
126
|
-
* Get the configuration for a pool.
|
|
127
|
-
*
|
|
128
|
-
* @param poolId - Pool identifier
|
|
129
|
-
* @returns Pool configuration or undefined if not found
|
|
130
|
-
*/
|
|
131
|
-
getPoolConfig(poolId: string): WorkerPoolConfig | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* Get extended statistics for a pool.
|
|
134
|
-
*
|
|
135
|
-
* @param poolId - Pool identifier
|
|
136
|
-
* @returns Extended pool statistics or undefined if not found
|
|
137
|
-
*/
|
|
138
|
-
getPoolStats(poolId: string): ExtendedPoolStats | undefined;
|
|
139
|
-
/**
|
|
140
|
-
* Get statistics for all pools.
|
|
141
|
-
*
|
|
142
|
-
* @returns Map of pool IDs to their statistics
|
|
143
|
-
*/
|
|
144
|
-
getAllPoolStats(): Map<string, ExtendedPoolStats>;
|
|
145
|
-
/**
|
|
146
|
-
* Record task execution for statistics tracking.
|
|
147
|
-
*
|
|
148
|
-
* @param poolId - Pool identifier
|
|
149
|
-
* @param executionTimeMs - Task execution time in milliseconds
|
|
150
|
-
*/
|
|
151
|
-
recordTaskExecution(poolId: string, executionTimeMs: number): void;
|
|
152
|
-
/**
|
|
153
|
-
* Execute a task on a pool with automatic statistics tracking.
|
|
154
|
-
*
|
|
155
|
-
* @template T - Result type
|
|
156
|
-
* @param poolId - Pool identifier
|
|
157
|
-
* @param method - Method name to execute (for worker script pools) or inline function
|
|
158
|
-
* @param args - Arguments to pass to the method/function
|
|
159
|
-
* @param timeout - Optional timeout in milliseconds
|
|
160
|
-
* @returns Promise resolving to the task result
|
|
161
|
-
*/
|
|
162
|
-
executeTask<T>(poolId: string, method: string | ((...args: unknown[]) => T), args?: unknown[], timeout?: number): Promise<T>;
|
|
163
|
-
/**
|
|
164
|
-
* Shutdown a specific pool.
|
|
165
|
-
*
|
|
166
|
-
* @param poolId - Pool identifier
|
|
167
|
-
* @param force - If true, forcefully terminate workers (default: false)
|
|
168
|
-
* @returns Promise resolving when shutdown is complete
|
|
169
|
-
*/
|
|
170
|
-
shutdownPool(poolId: string, force?: boolean): Promise<void>;
|
|
171
|
-
/**
|
|
172
|
-
* Shutdown all pools asynchronously.
|
|
173
|
-
*
|
|
174
|
-
* @param force - If true, forcefully terminate workers (default: false)
|
|
175
|
-
* @returns Promise resolving when all pools are shut down
|
|
176
|
-
*/
|
|
177
|
-
shutdownAll(force?: boolean): Promise<void>;
|
|
178
|
-
/**
|
|
179
|
-
* Synchronous shutdown for process exit handlers.
|
|
180
|
-
* Forces immediate termination of all pools.
|
|
181
|
-
*/
|
|
182
|
-
private shutdownAllSync;
|
|
183
|
-
/**
|
|
184
|
-
* Register an event callback for pool events.
|
|
185
|
-
*
|
|
186
|
-
* @param callback - Callback function to invoke on events
|
|
187
|
-
* @returns Unsubscribe function
|
|
188
|
-
*/
|
|
189
|
-
onEvent(callback: PoolEventCallback): () => void;
|
|
190
|
-
/**
|
|
191
|
-
* Emit an event to all registered callbacks.
|
|
192
|
-
*/
|
|
193
|
-
private emitEvent;
|
|
194
|
-
/**
|
|
195
|
-
* Get the number of active pools.
|
|
196
|
-
*
|
|
197
|
-
* @returns Number of pools currently managed
|
|
198
|
-
*/
|
|
199
|
-
get poolCount(): number;
|
|
200
|
-
/**
|
|
201
|
-
* Get all pool IDs.
|
|
202
|
-
*
|
|
203
|
-
* @returns Array of pool identifiers
|
|
204
|
-
*/
|
|
205
|
-
getPoolIds(): string[];
|
|
206
|
-
/**
|
|
207
|
-
* Check if the minimum parallel size threshold is met.
|
|
208
|
-
*
|
|
209
|
-
* @param poolId - Pool identifier
|
|
210
|
-
* @param size - Size of the data to process
|
|
211
|
-
* @returns True if size meets or exceeds minimum threshold
|
|
212
|
-
*/
|
|
213
|
-
shouldUseParallel(poolId: string, size: number): boolean;
|
|
214
|
-
/**
|
|
215
|
-
* Get the default configuration values.
|
|
216
|
-
*
|
|
217
|
-
* @returns Copy of default configuration
|
|
218
|
-
*/
|
|
219
|
-
static getDefaultConfig(): Required<WorkerPoolConfig>;
|
|
220
|
-
/**
|
|
221
|
-
* Get the CPU count available for workers.
|
|
222
|
-
*
|
|
223
|
-
* @returns Number of CPUs
|
|
224
|
-
*/
|
|
225
|
-
static getCpuCount(): number;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Convenience function to get the WorkerPoolManager instance.
|
|
229
|
-
*
|
|
230
|
-
* @returns The WorkerPoolManager singleton
|
|
231
|
-
*/
|
|
232
|
-
export declare function getWorkerPoolManager(): WorkerPoolManager;
|
|
233
|
-
//# sourceMappingURL=WorkerPoolManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerPoolManager.d.ts","sourceRoot":"","sources":["../../src/utils/WorkerPoolManager.ts"],"names":[],"mappings":"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"}
|