@dollhousemcp/mcp-server 2.0.0-rc.6 → 2.0.1
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/CHANGELOG.md +52 -61
- package/README.github.md +2 -2
- package/README.md +284 -224
- package/README.md.backup +284 -224
- package/README.npm.md +284 -224
- package/dist/cache/LRUCache.d.ts +3 -0
- package/dist/cache/LRUCache.d.ts.map +1 -1
- package/dist/cache/LRUCache.js +36 -26
- package/dist/config/env.d.ts +14 -4
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +20 -6
- package/dist/di/Container.d.ts +21 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +250 -53
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +5 -10
- package/dist/elements/base/BaseElementManager.d.ts +22 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +47 -7
- package/dist/elements/memories/Memory.d.ts +1 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +12 -8
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +23 -42
- package/dist/elements/memories/MemorySearchIndex.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/EnhancedIndexHandler.js +6 -6
- package/dist/handlers/element-crud/listElements.d.ts +2 -0
- package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
- package/dist/handlers/element-crud/listElements.js +3 -1
- package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
- package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/logging/LogHooks.js +11 -11
- package/dist/logging/LogManager.d.ts +0 -2
- package/dist/logging/LogManager.d.ts.map +1 -1
- package/dist/logging/LogManager.js +1 -3
- package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
- package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
- package/dist/logging/sinks/MemoryLogSink.js +12 -3
- package/dist/logging/types.d.ts +0 -2
- package/dist/logging/types.d.ts.map +1 -1
- package/dist/logging/types.js +1 -1
- package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
- package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
- package/dist/metrics/MetricsManager.d.ts +47 -0
- package/dist/metrics/MetricsManager.d.ts.map +1 -0
- package/dist/metrics/MetricsManager.js +232 -0
- package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
- package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/OperationMetricsTracker.js +53 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
- package/dist/metrics/collectors/index.d.ts +11 -0
- package/dist/metrics/collectors/index.d.ts.map +1 -0
- package/dist/metrics/collectors/index.js +11 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
- package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
- package/dist/metrics/types.d.ts +98 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +24 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +1 -7
- package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
- package/dist/portfolio/EnhancedIndexManager.js +18 -18
- package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
- package/dist/portfolio/NLPScoringManager.js +5 -9
- package/dist/portfolio/PortfolioIndexManager.js +2 -2
- package/dist/portfolio/RelationshipManager.js +2 -2
- package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
- package/dist/portfolio/VerbTriggerManager.js +5 -19
- package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
- package/dist/portfolio/config/IndexConfig.js +1 -12
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
- package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
- package/dist/portfolio/types/RelationshipTypes.js +3 -17
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +36 -8
- package/dist/security/constants.d.ts.map +1 -1
- package/dist/security/constants.js +10 -6
- package/dist/security/fileLockManager.d.ts.map +1 -1
- package/dist/security/fileLockManager.js +8 -6
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +1 -13
- package/dist/security/securityMonitor.d.ts +2 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +14 -3
- package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
- package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
- package/dist/security/telemetry/SecurityTelemetry.js +30 -2
- package/dist/security/tokenManager.d.ts +3 -0
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +13 -5
- package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
- package/dist/security/validation/BackgroundValidator.js +7 -7
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/startup.js +8 -24
- package/dist/server/tools/MCPAQLTools.js +4 -1
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +9 -3
- package/dist/services/FileWatchService.d.ts +1 -0
- package/dist/services/FileWatchService.d.ts.map +1 -1
- package/dist/services/FileWatchService.js +83 -48
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js +7 -2
- package/dist/services/query/ElementQueryService.d.ts.map +1 -1
- package/dist/services/query/ElementQueryService.js +1 -41
- package/dist/services/query/PaginationService.d.ts.map +1 -1
- package/dist/services/query/PaginationService.js +1 -14
- package/dist/services/query/SortService.d.ts.map +1 -1
- package/dist/services/query/SortService.js +1 -6
- package/dist/services/validation/ValidationService.d.ts.map +1 -1
- package/dist/services/validation/ValidationService.js +3 -8
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +5 -2
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +5 -2
- package/dist/telemetry/OperationalTelemetry.js +2 -2
- package/dist/utils/EventDeduplicator.d.ts +44 -0
- package/dist/utils/EventDeduplicator.d.ts.map +1 -0
- package/dist/utils/EventDeduplicator.js +93 -0
- package/dist/utils/FileLock.d.ts.map +1 -1
- package/dist/utils/FileLock.js +1 -9
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
- package/dist/utils/PerformanceMonitor.js +5 -5
- package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.js +23 -0
- package/dist/web/console/IngestRoutes.d.ts +84 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -0
- package/dist/web/console/IngestRoutes.js +252 -0
- package/dist/web/console/LeaderElection.d.ts +89 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -0
- package/dist/web/console/LeaderElection.js +205 -0
- package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
- package/dist/web/console/LeaderForwardingSink.js +197 -0
- package/dist/web/console/SessionNames.d.ts +46 -0
- package/dist/web/console/SessionNames.d.ts.map +1 -0
- package/dist/web/console/SessionNames.js +257 -0
- package/dist/web/console/UnifiedConsole.d.ts +64 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
- package/dist/web/console/UnifiedConsole.js +119 -0
- package/dist/web/contentPipeline.d.ts +58 -0
- package/dist/web/contentPipeline.d.ts.map +1 -0
- package/dist/web/contentPipeline.js +112 -0
- package/dist/web/portDiscovery.d.ts +58 -0
- package/dist/web/portDiscovery.d.ts.map +1 -0
- package/dist/web/portDiscovery.js +143 -0
- package/dist/web/public/app.js +148 -60
- package/dist/web/public/logs.js +638 -0
- package/dist/web/public/metrics.js +682 -0
- package/dist/web/public/permissions.js +394 -0
- package/dist/web/public/sessions.js +369 -0
- package/dist/web/routes/healthRoutes.d.ts +16 -0
- package/dist/web/routes/healthRoutes.d.ts.map +1 -0
- package/dist/web/routes/healthRoutes.js +29 -0
- package/dist/web/routes/logRoutes.d.ts +18 -0
- package/dist/web/routes/logRoutes.d.ts.map +1 -0
- package/dist/web/routes/logRoutes.js +126 -0
- package/dist/web/routes/metricsRoutes.d.ts +17 -0
- package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
- package/dist/web/routes/metricsRoutes.js +90 -0
- package/dist/web/routes/permissionRoutes.d.ts +16 -0
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
- package/dist/web/routes/permissionRoutes.js +133 -0
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +309 -339
- package/dist/web/server.d.ts +21 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +42 -4
- package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
- package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSELogSink.js +22 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/dist/web/public/public/app.js +0 -1878
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects aggregate security-event counts from SecurityMonitor, broken down
|
|
3
|
+
* by severity and event type. Accepts an injectable report function so the
|
|
4
|
+
* collector can be tested without a live SecurityMonitor singleton.
|
|
5
|
+
*/
|
|
6
|
+
import { SecurityMonitor } from '../../security/securityMonitor.js';
|
|
7
|
+
const SOURCE = 'SecurityMonitor';
|
|
8
|
+
export class SecurityMonitorCollector {
|
|
9
|
+
name = 'security-monitor';
|
|
10
|
+
description = 'Total security events and per-severity/per-type breakdowns from SecurityMonitor';
|
|
11
|
+
reportFn;
|
|
12
|
+
constructor(reportFn) {
|
|
13
|
+
this.reportFn = reportFn ?? (() => SecurityMonitor.generateSecurityReport());
|
|
14
|
+
}
|
|
15
|
+
collect() {
|
|
16
|
+
try {
|
|
17
|
+
const report = this.reportFn();
|
|
18
|
+
const entries = [];
|
|
19
|
+
entries.push({
|
|
20
|
+
type: 'counter',
|
|
21
|
+
name: 'security.monitor.events_total',
|
|
22
|
+
source: SOURCE,
|
|
23
|
+
unit: 'count',
|
|
24
|
+
description: 'Total number of security events recorded',
|
|
25
|
+
value: report.totalEvents,
|
|
26
|
+
});
|
|
27
|
+
for (const [severity, count] of Object.entries(report.eventsBySeverity)) {
|
|
28
|
+
entries.push({
|
|
29
|
+
type: 'gauge',
|
|
30
|
+
name: 'security.monitor.events_by_severity',
|
|
31
|
+
source: SOURCE,
|
|
32
|
+
unit: 'count',
|
|
33
|
+
description: 'Security event count grouped by severity level',
|
|
34
|
+
labels: { severity },
|
|
35
|
+
value: count,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
for (const [type, count] of Object.entries(report.eventsByType)) {
|
|
39
|
+
entries.push({
|
|
40
|
+
type: 'gauge',
|
|
41
|
+
name: 'security.monitor.events_by_type',
|
|
42
|
+
source: SOURCE,
|
|
43
|
+
unit: 'count',
|
|
44
|
+
description: 'Security event count grouped by event type',
|
|
45
|
+
labels: { type },
|
|
46
|
+
value: count,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return entries;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvY29sbGVjdG9ycy9TZWN1cml0eU1vbml0b3JDb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxNQUFNLE1BQU0sR0FBRyxpQkFBMEIsQ0FBQztBQVMxQyxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUMxQixXQUFXLEdBQ2xCLGlGQUFpRixDQUFDO0lBRW5FLFFBQVEsQ0FBdUI7SUFFaEQsWUFBWSxRQUErQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztZQUVsQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLElBQUksRUFBRSxTQUFrQjtnQkFDeEIsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLE9BQWdCO2dCQUN0QixXQUFXLEVBQUUsMENBQTBDO2dCQUN2RCxLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVc7YUFDMUIsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxxQ0FBcUM7b0JBQzNDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLGdEQUFnRDtvQkFDN0QsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFO29CQUNwQixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsaUNBQWlDO29CQUN2QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSw0Q0FBNEM7b0JBQ3pELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRTtvQkFDaEIsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RzIGFnZ3JlZ2F0ZSBzZWN1cml0eS1ldmVudCBjb3VudHMgZnJvbSBTZWN1cml0eU1vbml0b3IsIGJyb2tlbiBkb3duXG4gKiBieSBzZXZlcml0eSBhbmQgZXZlbnQgdHlwZS4gQWNjZXB0cyBhbiBpbmplY3RhYmxlIHJlcG9ydCBmdW5jdGlvbiBzbyB0aGVcbiAqIGNvbGxlY3RvciBjYW4gYmUgdGVzdGVkIHdpdGhvdXQgYSBsaXZlIFNlY3VyaXR5TW9uaXRvciBzaW5nbGV0b24uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmNvbnN0IFNPVVJDRSA9ICdTZWN1cml0eU1vbml0b3InIGFzIGNvbnN0O1xuXG5pbnRlcmZhY2UgU2VjdXJpdHlSZXBvcnQge1xuICB0b3RhbEV2ZW50czogbnVtYmVyO1xuICBldmVudHNCeVNldmVyaXR5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBldmVudHNCeVR5cGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIHJlY2VudENyaXRpY2FsRXZlbnRzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBjbGFzcyBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IgaW1wbGVtZW50cyBJTWV0cmljQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICdzZWN1cml0eS1tb25pdG9yJztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24gPVxuICAgICdUb3RhbCBzZWN1cml0eSBldmVudHMgYW5kIHBlci1zZXZlcml0eS9wZXItdHlwZSBicmVha2Rvd25zIGZyb20gU2VjdXJpdHlNb25pdG9yJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydEZuOiAoKSA9PiBTZWN1cml0eVJlcG9ydDtcblxuICBjb25zdHJ1Y3RvcihyZXBvcnRGbj86ICgpID0+IFNlY3VyaXR5UmVwb3J0KSB7XG4gICAgdGhpcy5yZXBvcnRGbiA9IHJlcG9ydEZuID8/ICgoKSA9PiBTZWN1cml0eU1vbml0b3IuZ2VuZXJhdGVTZWN1cml0eVJlcG9ydCgpKTtcbiAgfVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0Rm4oKTtcbiAgICAgIGNvbnN0IGVudHJpZXM6IE1ldHJpY0VudHJ5W10gPSBbXTtcblxuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICBuYW1lOiAnc2VjdXJpdHkubW9uaXRvci5ldmVudHNfdG90YWwnLFxuICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBudW1iZXIgb2Ygc2VjdXJpdHkgZXZlbnRzIHJlY29yZGVkJyxcbiAgICAgICAgdmFsdWU6IHJlcG9ydC50b3RhbEV2ZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IFtzZXZlcml0eSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKHJlcG9ydC5ldmVudHNCeVNldmVyaXR5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3NlY3VyaXR5Lm1vbml0b3IuZXZlbnRzX2J5X3NldmVyaXR5JyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2VjdXJpdHkgZXZlbnQgY291bnQgZ3JvdXBlZCBieSBzZXZlcml0eSBsZXZlbCcsXG4gICAgICAgICAgbGFiZWxzOiB7IHNldmVyaXR5IH0sXG4gICAgICAgICAgdmFsdWU6IGNvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKHJlcG9ydC5ldmVudHNCeVR5cGUpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnc2VjdXJpdHkubW9uaXRvci5ldmVudHNfYnlfdHlwZScsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NlY3VyaXR5IGV2ZW50IGNvdW50IGdyb3VwZWQgYnkgZXZlbnQgdHlwZScsXG4gICAgICAgICAgbGFiZWxzOiB7IHR5cGUgfSxcbiAgICAgICAgICB2YWx1ZTogY291bnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW50cmllcztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects blocked-attack counts and per-severity breakdowns from a
|
|
3
|
+
* SecurityTelemetry instance. The current hour's attack rate is surfaced as a
|
|
4
|
+
* gauge so dashboards can display a rolling "attacks this hour" reading.
|
|
5
|
+
*/
|
|
6
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
7
|
+
import type { SecurityTelemetry } from '../../security/telemetry/SecurityTelemetry.js';
|
|
8
|
+
export declare class SecurityTelemetryCollector implements IMetricCollector {
|
|
9
|
+
private readonly telemetry;
|
|
10
|
+
readonly name = "security-telemetry";
|
|
11
|
+
readonly description = "Blocked attack counts, unique vectors, and severity breakdown from SecurityTelemetry";
|
|
12
|
+
constructor(telemetry: SecurityTelemetry);
|
|
13
|
+
collect(): MetricEntry[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=SecurityTelemetryCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityTelemetryCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/SecurityTelemetryCollector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAIvF,qBAAa,0BAA2B,YAAW,gBAAgB;IAKrD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJtC,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,0FACqE;gBAE5D,SAAS,EAAE,iBAAiB;IAEzD,OAAO,IAAI,WAAW,EAAE;CAmGzB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects blocked-attack counts and per-severity breakdowns from a
|
|
3
|
+
* SecurityTelemetry instance. The current hour's attack rate is surfaced as a
|
|
4
|
+
* gauge so dashboards can display a rolling "attacks this hour" reading.
|
|
5
|
+
*/
|
|
6
|
+
const SOURCE = 'SecurityTelemetry';
|
|
7
|
+
export class SecurityTelemetryCollector {
|
|
8
|
+
telemetry;
|
|
9
|
+
name = 'security-telemetry';
|
|
10
|
+
description = 'Blocked attack counts, unique vectors, and severity breakdown from SecurityTelemetry';
|
|
11
|
+
constructor(telemetry) {
|
|
12
|
+
this.telemetry = telemetry;
|
|
13
|
+
}
|
|
14
|
+
collect() {
|
|
15
|
+
try {
|
|
16
|
+
const m = this.telemetry.getMetrics();
|
|
17
|
+
// attacksPerHour is a 24-element array indexed by hours-ago (0 = current hour)
|
|
18
|
+
const attacksThisHour = Array.isArray(m.attacksPerHour) ? (m.attacksPerHour[0] ?? 0) : 0;
|
|
19
|
+
const entries = [
|
|
20
|
+
{
|
|
21
|
+
type: 'gauge',
|
|
22
|
+
name: 'security.telemetry.blocked_total',
|
|
23
|
+
source: SOURCE,
|
|
24
|
+
unit: 'count',
|
|
25
|
+
description: 'Total blocked attack attempts since process start',
|
|
26
|
+
value: m.totalBlockedAttempts,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: 'gauge',
|
|
30
|
+
name: 'security.telemetry.unique_vectors',
|
|
31
|
+
source: SOURCE,
|
|
32
|
+
unit: 'count',
|
|
33
|
+
description: 'Number of distinct attack vectors observed',
|
|
34
|
+
value: m.uniqueAttackVectors,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'gauge',
|
|
38
|
+
name: 'security.telemetry.blocked_by_severity',
|
|
39
|
+
source: SOURCE,
|
|
40
|
+
unit: 'count',
|
|
41
|
+
description: 'Blocked attacks broken down by severity',
|
|
42
|
+
labels: { severity: 'critical' },
|
|
43
|
+
value: m.criticalAttacksBlocked,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'gauge',
|
|
47
|
+
name: 'security.telemetry.blocked_by_severity',
|
|
48
|
+
source: SOURCE,
|
|
49
|
+
unit: 'count',
|
|
50
|
+
description: 'Blocked attacks broken down by severity',
|
|
51
|
+
labels: { severity: 'high' },
|
|
52
|
+
value: m.highSeverityBlocked,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'gauge',
|
|
56
|
+
name: 'security.telemetry.blocked_by_severity',
|
|
57
|
+
source: SOURCE,
|
|
58
|
+
unit: 'count',
|
|
59
|
+
description: 'Blocked attacks broken down by severity',
|
|
60
|
+
labels: { severity: 'medium' },
|
|
61
|
+
value: m.mediumSeverityBlocked,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
type: 'gauge',
|
|
65
|
+
name: 'security.telemetry.blocked_by_severity',
|
|
66
|
+
source: SOURCE,
|
|
67
|
+
unit: 'count',
|
|
68
|
+
description: 'Blocked attacks broken down by severity',
|
|
69
|
+
labels: { severity: 'low' },
|
|
70
|
+
value: m.lowSeverityBlocked,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'gauge',
|
|
74
|
+
name: 'security.telemetry.attacks_per_hour',
|
|
75
|
+
source: SOURCE,
|
|
76
|
+
unit: 'count',
|
|
77
|
+
description: 'Attack attempts recorded in the current clock hour',
|
|
78
|
+
value: attacksThisHour,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'gauge',
|
|
82
|
+
name: 'security.telemetry.dedup_suppressed',
|
|
83
|
+
source: SOURCE,
|
|
84
|
+
unit: 'count',
|
|
85
|
+
description: 'Repeated events suppressed by deduplication',
|
|
86
|
+
value: m.deduplication.suppressedEvents,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'gauge',
|
|
90
|
+
name: 'security.telemetry.dedup_unique',
|
|
91
|
+
source: SOURCE,
|
|
92
|
+
unit: 'count',
|
|
93
|
+
description: 'Unique events that passed through deduplication',
|
|
94
|
+
value: m.deduplication.uniqueEvents,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'gauge',
|
|
98
|
+
name: 'security.telemetry.dedup_cache_size',
|
|
99
|
+
source: SOURCE,
|
|
100
|
+
unit: 'count',
|
|
101
|
+
description: 'Current deduplication cache size',
|
|
102
|
+
value: m.deduplication.cacheSize,
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
return entries;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9jb2xsZWN0b3JzL1NlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFLSCxNQUFNLE1BQU0sR0FBRyxtQkFBNEIsQ0FBQztBQUU1QyxNQUFNLE9BQU8sMEJBQTBCO0lBS1I7SUFKcEIsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQzVCLFdBQVcsR0FDbEIsc0ZBQXNGLENBQUM7SUFFekYsWUFBNkIsU0FBNEI7UUFBNUIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFBRyxDQUFDO0lBRTdELE9BQU87UUFDTCxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRXRDLCtFQUErRTtZQUMvRSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekYsTUFBTSxPQUFPLEdBQWtCO2dCQUM3QjtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxrQ0FBa0M7b0JBQ3hDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLG1EQUFtRDtvQkFDaEUsS0FBSyxFQUFFLENBQUMsQ0FBQyxvQkFBb0I7aUJBQzlCO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLG1DQUFtQztvQkFDekMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsNENBQTRDO29CQUN6RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDN0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsd0NBQXdDO29CQUM5QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSx5Q0FBeUM7b0JBQ3RELE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7b0JBQ2hDLEtBQUssRUFBRSxDQUFDLENBQUMsc0JBQXNCO2lCQUNoQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSx3Q0FBd0M7b0JBQzlDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLHlDQUF5QztvQkFDdEQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtvQkFDNUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7aUJBQzdCO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLHdDQUF3QztvQkFDOUMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUseUNBQXlDO29CQUN0RCxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO29CQUM5QixLQUFLLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtpQkFDL0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsd0NBQXdDO29CQUM5QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSx5Q0FBeUM7b0JBQ3RELE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7b0JBQzNCLEtBQUssRUFBRSxDQUFDLENBQUMsa0JBQWtCO2lCQUM1QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxxQ0FBcUM7b0JBQzNDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLG9EQUFvRDtvQkFDakUsS0FBSyxFQUFFLGVBQWU7aUJBQ3ZCO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLHFDQUFxQztvQkFDM0MsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsNkNBQTZDO29CQUMxRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7aUJBQ3hDO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsaURBQWlEO29CQUM5RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZO2lCQUNwQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxxQ0FBcUM7b0JBQzNDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLGtDQUFrQztvQkFDL0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUztpQkFDakM7YUFDRixDQUFDO1lBRUYsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sbGVjdHMgYmxvY2tlZC1hdHRhY2sgY291bnRzIGFuZCBwZXItc2V2ZXJpdHkgYnJlYWtkb3ducyBmcm9tIGFcbiAqIFNlY3VyaXR5VGVsZW1ldHJ5IGluc3RhbmNlLiBUaGUgY3VycmVudCBob3VyJ3MgYXR0YWNrIHJhdGUgaXMgc3VyZmFjZWQgYXMgYVxuICogZ2F1Z2Ugc28gZGFzaGJvYXJkcyBjYW4gZGlzcGxheSBhIHJvbGxpbmcgXCJhdHRhY2tzIHRoaXMgaG91clwiIHJlYWRpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VjdXJpdHlUZWxlbWV0cnkgfSBmcm9tICcuLi8uLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG5jb25zdCBTT1VSQ0UgPSAnU2VjdXJpdHlUZWxlbWV0cnknIGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IgaW1wbGVtZW50cyBJTWV0cmljQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICdzZWN1cml0eS10ZWxlbWV0cnknO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9XG4gICAgJ0Jsb2NrZWQgYXR0YWNrIGNvdW50cywgdW5pcXVlIHZlY3RvcnMsIGFuZCBzZXZlcml0eSBicmVha2Rvd24gZnJvbSBTZWN1cml0eVRlbGVtZXRyeSc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0ZWxlbWV0cnk6IFNlY3VyaXR5VGVsZW1ldHJ5KSB7fVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLnRlbGVtZXRyeS5nZXRNZXRyaWNzKCk7XG5cbiAgICAgIC8vIGF0dGFja3NQZXJIb3VyIGlzIGEgMjQtZWxlbWVudCBhcnJheSBpbmRleGVkIGJ5IGhvdXJzLWFnbyAoMCA9IGN1cnJlbnQgaG91cilcbiAgICAgIGNvbnN0IGF0dGFja3NUaGlzSG91ciA9IEFycmF5LmlzQXJyYXkobS5hdHRhY2tzUGVySG91cikgPyAobS5hdHRhY2tzUGVySG91clswXSA/PyAwKSA6IDA7XG5cbiAgICAgIGNvbnN0IGVudHJpZXM6IE1ldHJpY0VudHJ5W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzZWN1cml0eS50ZWxlbWV0cnkuYmxvY2tlZF90b3RhbCcsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGJsb2NrZWQgYXR0YWNrIGF0dGVtcHRzIHNpbmNlIHByb2Nlc3Mgc3RhcnQnLFxuICAgICAgICAgIHZhbHVlOiBtLnRvdGFsQmxvY2tlZEF0dGVtcHRzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnc2VjdXJpdHkudGVsZW1ldHJ5LnVuaXF1ZV92ZWN0b3JzJyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIGRpc3RpbmN0IGF0dGFjayB2ZWN0b3JzIG9ic2VydmVkJyxcbiAgICAgICAgICB2YWx1ZTogbS51bmlxdWVBdHRhY2tWZWN0b3JzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnc2VjdXJpdHkudGVsZW1ldHJ5LmJsb2NrZWRfYnlfc2V2ZXJpdHknLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdCbG9ja2VkIGF0dGFja3MgYnJva2VuIGRvd24gYnkgc2V2ZXJpdHknLFxuICAgICAgICAgIGxhYmVsczogeyBzZXZlcml0eTogJ2NyaXRpY2FsJyB9LFxuICAgICAgICAgIHZhbHVlOiBtLmNyaXRpY2FsQXR0YWNrc0Jsb2NrZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzZWN1cml0eS50ZWxlbWV0cnkuYmxvY2tlZF9ieV9zZXZlcml0eScsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrZWQgYXR0YWNrcyBicm9rZW4gZG93biBieSBzZXZlcml0eScsXG4gICAgICAgICAgbGFiZWxzOiB7IHNldmVyaXR5OiAnaGlnaCcgfSxcbiAgICAgICAgICB2YWx1ZTogbS5oaWdoU2V2ZXJpdHlCbG9ja2VkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnc2VjdXJpdHkudGVsZW1ldHJ5LmJsb2NrZWRfYnlfc2V2ZXJpdHknLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdCbG9ja2VkIGF0dGFja3MgYnJva2VuIGRvd24gYnkgc2V2ZXJpdHknLFxuICAgICAgICAgIGxhYmVsczogeyBzZXZlcml0eTogJ21lZGl1bScgfSxcbiAgICAgICAgICB2YWx1ZTogbS5tZWRpdW1TZXZlcml0eUJsb2NrZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzZWN1cml0eS50ZWxlbWV0cnkuYmxvY2tlZF9ieV9zZXZlcml0eScsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrZWQgYXR0YWNrcyBicm9rZW4gZG93biBieSBzZXZlcml0eScsXG4gICAgICAgICAgbGFiZWxzOiB7IHNldmVyaXR5OiAnbG93JyB9LFxuICAgICAgICAgIHZhbHVlOiBtLmxvd1NldmVyaXR5QmxvY2tlZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3NlY3VyaXR5LnRlbGVtZXRyeS5hdHRhY2tzX3Blcl9ob3VyJyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXR0YWNrIGF0dGVtcHRzIHJlY29yZGVkIGluIHRoZSBjdXJyZW50IGNsb2NrIGhvdXInLFxuICAgICAgICAgIHZhbHVlOiBhdHRhY2tzVGhpc0hvdXIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzZWN1cml0eS50ZWxlbWV0cnkuZGVkdXBfc3VwcHJlc3NlZCcsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcGVhdGVkIGV2ZW50cyBzdXBwcmVzc2VkIGJ5IGRlZHVwbGljYXRpb24nLFxuICAgICAgICAgIHZhbHVlOiBtLmRlZHVwbGljYXRpb24uc3VwcHJlc3NlZEV2ZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3NlY3VyaXR5LnRlbGVtZXRyeS5kZWR1cF91bmlxdWUnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdVbmlxdWUgZXZlbnRzIHRoYXQgcGFzc2VkIHRocm91Z2ggZGVkdXBsaWNhdGlvbicsXG4gICAgICAgICAgdmFsdWU6IG0uZGVkdXBsaWNhdGlvbi51bmlxdWVFdmVudHMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzZWN1cml0eS50ZWxlbWV0cnkuZGVkdXBfY2FjaGVfc2l6ZScsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0N1cnJlbnQgZGVkdXBsaWNhdGlvbiBjYWNoZSBzaXplJyxcbiAgICAgICAgICB2YWx1ZTogbS5kZWR1cGxpY2F0aW9uLmNhY2hlU2l6ZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector for TriggerMetricsTracker metrics.
|
|
3
|
+
*
|
|
4
|
+
* Exposes the number of pending trigger metric entries that have not yet
|
|
5
|
+
* been flushed, sourced from `TriggerMetricsTracker.pendingCount`.
|
|
6
|
+
*/
|
|
7
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
8
|
+
import type { TriggerMetricsTracker } from '../../portfolio/enhanced-index/TriggerMetricsTracker.js';
|
|
9
|
+
export declare class TriggerMetricsTrackerCollector implements IMetricCollector {
|
|
10
|
+
private readonly tracker;
|
|
11
|
+
readonly name = "trigger-metrics";
|
|
12
|
+
readonly description = "Pending trigger metric count from TriggerMetricsTracker.";
|
|
13
|
+
constructor(tracker: TriggerMetricsTracker);
|
|
14
|
+
collect(): MetricEntry[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=TriggerMetricsTrackerCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerMetricsTrackerCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/TriggerMetricsTrackerCollector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAErG,qBAAa,8BAA+B,YAAW,gBAAgB;IAIzD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,8DAA8D;gBAErD,OAAO,EAAE,qBAAqB;IAE3D,OAAO,IAAI,WAAW,EAAE;CAgBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class TriggerMetricsTrackerCollector {
|
|
2
|
+
tracker;
|
|
3
|
+
name = 'trigger-metrics';
|
|
4
|
+
description = 'Pending trigger metric count from TriggerMetricsTracker.';
|
|
5
|
+
constructor(tracker) {
|
|
6
|
+
this.tracker = tracker;
|
|
7
|
+
}
|
|
8
|
+
collect() {
|
|
9
|
+
try {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
type: 'gauge',
|
|
13
|
+
name: 'portfolio.triggers.pending_current',
|
|
14
|
+
source: 'TriggerMetricsTracker',
|
|
15
|
+
unit: 'count',
|
|
16
|
+
description: 'Number of trigger metric entries pending flush.',
|
|
17
|
+
value: this.tracker.pendingCount,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvY29sbGVjdG9ycy9UcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFPLDhCQUE4QjtJQUlaO0lBSHBCLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUN6QixXQUFXLEdBQUcsMERBQTBELENBQUM7SUFFbEYsWUFBNkIsT0FBOEI7UUFBOUIsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7SUFBRyxDQUFDO0lBRS9ELE9BQU87UUFDTCxJQUFJLENBQUM7WUFDSCxPQUFPO2dCQUNMO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLG9DQUFvQztvQkFDMUMsTUFBTSxFQUFFLHVCQUF1QjtvQkFDL0IsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsaURBQWlEO29CQUM5RCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO2lCQUNqQzthQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0b3IgZm9yIFRyaWdnZXJNZXRyaWNzVHJhY2tlciBtZXRyaWNzLlxuICpcbiAqIEV4cG9zZXMgdGhlIG51bWJlciBvZiBwZW5kaW5nIHRyaWdnZXIgbWV0cmljIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXRcbiAqIGJlZW4gZmx1c2hlZCwgc291cmNlZCBmcm9tIGBUcmlnZ2VyTWV0cmljc1RyYWNrZXIucGVuZGluZ0NvdW50YC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVHJpZ2dlck1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1RyaWdnZXJNZXRyaWNzVHJhY2tlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IgaW1wbGVtZW50cyBJTWV0cmljQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICd0cmlnZ2VyLW1ldHJpY3MnO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9ICdQZW5kaW5nIHRyaWdnZXIgbWV0cmljIGNvdW50IGZyb20gVHJpZ2dlck1ldHJpY3NUcmFja2VyLic7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0cmFja2VyOiBUcmlnZ2VyTWV0cmljc1RyYWNrZXIpIHt9XG5cbiAgY29sbGVjdCgpOiBNZXRyaWNFbnRyeVtdIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3BvcnRmb2xpby50cmlnZ2Vycy5wZW5kaW5nX2N1cnJlbnQnLFxuICAgICAgICAgIHNvdXJjZTogJ1RyaWdnZXJNZXRyaWNzVHJhY2tlcicsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiB0cmlnZ2VyIG1ldHJpYyBlbnRyaWVzIHBlbmRpbmcgZmx1c2guJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy50cmFja2VyLnBlbmRpbmdDb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PerformanceMonitorCollector } from './PerformanceMonitorCollector.js';
|
|
2
|
+
export { LRUCacheCollector } from './LRUCacheCollector.js';
|
|
3
|
+
export { SecurityMonitorCollector } from './SecurityMonitorCollector.js';
|
|
4
|
+
export { SecurityTelemetryCollector } from './SecurityTelemetryCollector.js';
|
|
5
|
+
export { FileLockManagerCollector } from './FileLockManagerCollector.js';
|
|
6
|
+
export { DefaultElementProviderCollector } from './DefaultElementProviderCollector.js';
|
|
7
|
+
export { TriggerMetricsTrackerCollector } from './TriggerMetricsTrackerCollector.js';
|
|
8
|
+
export { OperationalTelemetryCollector } from './OperationalTelemetryCollector.js';
|
|
9
|
+
export { OperationMetricsCollector } from './OperationMetricsCollector.js';
|
|
10
|
+
export { GatekeeperMetricsCollector } from './GatekeeperMetricsCollector.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PerformanceMonitorCollector } from './PerformanceMonitorCollector.js';
|
|
2
|
+
export { LRUCacheCollector } from './LRUCacheCollector.js';
|
|
3
|
+
export { SecurityMonitorCollector } from './SecurityMonitorCollector.js';
|
|
4
|
+
export { SecurityTelemetryCollector } from './SecurityTelemetryCollector.js';
|
|
5
|
+
export { FileLockManagerCollector } from './FileLockManagerCollector.js';
|
|
6
|
+
export { DefaultElementProviderCollector } from './DefaultElementProviderCollector.js';
|
|
7
|
+
export { TriggerMetricsTrackerCollector } from './TriggerMetricsTrackerCollector.js';
|
|
8
|
+
export { OperationalTelemetryCollector } from './OperationalTelemetryCollector.js';
|
|
9
|
+
export { OperationMetricsCollector } from './OperationMetricsCollector.js';
|
|
10
|
+
export { GatekeeperMetricsCollector } from './GatekeeperMetricsCollector.js';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9jb2xsZWN0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yIH0gZnJvbSAnLi9QZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IuanMnO1xuZXhwb3J0IHsgTFJVQ2FjaGVDb2xsZWN0b3IgfSBmcm9tICcuL0xSVUNhY2hlQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IFNlY3VyaXR5TW9uaXRvckNvbGxlY3RvciB9IGZyb20gJy4vU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yIH0gZnJvbSAnLi9TZWN1cml0eVRlbGVtZXRyeUNvbGxlY3Rvci5qcyc7XG5leHBvcnQgeyBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IgfSBmcm9tICcuL0ZpbGVMb2NrTWFuYWdlckNvbGxlY3Rvci5qcyc7XG5leHBvcnQgeyBEZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yIH0gZnJvbSAnLi9EZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3RvciB9IGZyb20gJy4vVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yIH0gZnJvbSAnLi9PcGVyYXRpb25hbFRlbGVtZXRyeUNvbGxlY3Rvci5qcyc7XG5leHBvcnQgeyBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yIH0gZnJvbSAnLi9PcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yIH0gZnJvbSAnLi9HYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvci5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory ring buffer sink for metric snapshots.
|
|
3
|
+
*
|
|
4
|
+
* Stores snapshots in an EvictingQueue and provides a query interface
|
|
5
|
+
* for the MCP query_metrics tool. Follows the same query pattern as
|
|
6
|
+
* MemoryLogSink (see src/logging/sinks/MemoryLogSink.ts).
|
|
7
|
+
*/
|
|
8
|
+
import type { IMetricsSink, MetricQueryOptions, MetricQueryResult, MetricSnapshot } from '../types.js';
|
|
9
|
+
export declare class MemoryMetricsSink implements IMetricsSink {
|
|
10
|
+
readonly name = "MemoryMetricsSink";
|
|
11
|
+
private readonly queue;
|
|
12
|
+
constructor(maxSnapshots?: number);
|
|
13
|
+
onSnapshot(snapshot: MetricSnapshot): void;
|
|
14
|
+
flush(): Promise<void>;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
query(options?: MetricQueryOptions): MetricQueryResult;
|
|
17
|
+
getStats(): {
|
|
18
|
+
size: number;
|
|
19
|
+
capacity: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=MemoryMetricsSink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryMetricsSink.d.ts","sourceRoot":"","sources":["../../../src/metrics/sinks/MemoryMetricsSink.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,YAAY,EAEZ,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAE1C,YAAY,GAAE,MAAY;IAItC,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB;IA4EtD,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAG/C"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory ring buffer sink for metric snapshots.
|
|
3
|
+
*
|
|
4
|
+
* Stores snapshots in an EvictingQueue and provides a query interface
|
|
5
|
+
* for the MCP query_metrics tool. Follows the same query pattern as
|
|
6
|
+
* MemoryLogSink (see src/logging/sinks/MemoryLogSink.ts).
|
|
7
|
+
*/
|
|
8
|
+
import { EvictingQueue } from '../../utils/EvictingQueue.js';
|
|
9
|
+
export class MemoryMetricsSink {
|
|
10
|
+
name = 'MemoryMetricsSink';
|
|
11
|
+
queue;
|
|
12
|
+
constructor(maxSnapshots = 240) {
|
|
13
|
+
this.queue = new EvictingQueue(maxSnapshots);
|
|
14
|
+
}
|
|
15
|
+
onSnapshot(snapshot) {
|
|
16
|
+
this.queue.push(snapshot);
|
|
17
|
+
}
|
|
18
|
+
async flush() {
|
|
19
|
+
// No-op — in-memory, nothing to flush.
|
|
20
|
+
}
|
|
21
|
+
async close() {
|
|
22
|
+
this.queue.clear();
|
|
23
|
+
}
|
|
24
|
+
query(options) {
|
|
25
|
+
const latest = options?.latest ?? true;
|
|
26
|
+
const limit = Math.min(Math.max(options?.limit ?? 1, 0), 100);
|
|
27
|
+
const offset = Math.max(options?.offset ?? 0, 0);
|
|
28
|
+
const allSnapshots = this.queue.toArray();
|
|
29
|
+
// Compute availability bounds BEFORE filtering
|
|
30
|
+
const oldestAvailable = allSnapshots.length > 0 ? allSnapshots[0].timestamp : '';
|
|
31
|
+
const newestAvailable = allSnapshots.length > 0 ? allSnapshots.at(-1).timestamp : '';
|
|
32
|
+
// If limit is 0, return empty result with bounds
|
|
33
|
+
if (limit === 0) {
|
|
34
|
+
return {
|
|
35
|
+
snapshots: [],
|
|
36
|
+
total: 0,
|
|
37
|
+
hasMore: false,
|
|
38
|
+
limit,
|
|
39
|
+
offset,
|
|
40
|
+
oldestAvailable,
|
|
41
|
+
newestAvailable,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// 1. Select snapshots based on latest flag
|
|
45
|
+
let snapshots;
|
|
46
|
+
if (latest) {
|
|
47
|
+
snapshots = allSnapshots.length > 0 ? [allSnapshots.at(-1)] : [];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
snapshots = [...allSnapshots];
|
|
51
|
+
}
|
|
52
|
+
// 2. Filter by time range
|
|
53
|
+
if (options?.since) {
|
|
54
|
+
const since = options.since;
|
|
55
|
+
snapshots = snapshots.filter(s => s.timestamp > since);
|
|
56
|
+
}
|
|
57
|
+
if (options?.until) {
|
|
58
|
+
const until = options.until;
|
|
59
|
+
snapshots = snapshots.filter(s => s.timestamp < until);
|
|
60
|
+
}
|
|
61
|
+
// 3. Filter metrics within each snapshot by name/source/type
|
|
62
|
+
if (options?.names || options?.source || options?.type) {
|
|
63
|
+
const filtered = [];
|
|
64
|
+
for (const snapshot of snapshots) {
|
|
65
|
+
const matchedMetrics = snapshot.metrics.filter(metric => matchesMetricFilters(metric, options));
|
|
66
|
+
if (matchedMetrics.length > 0) {
|
|
67
|
+
filtered.push({ ...snapshot, metrics: matchedMetrics });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
snapshots = filtered;
|
|
71
|
+
}
|
|
72
|
+
// 4. Sort newest-first (descending timestamp)
|
|
73
|
+
snapshots.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
|
74
|
+
// 5. Count total before pagination
|
|
75
|
+
const total = snapshots.length;
|
|
76
|
+
// 6. Paginate
|
|
77
|
+
snapshots = snapshots.slice(offset, offset + limit);
|
|
78
|
+
return {
|
|
79
|
+
snapshots,
|
|
80
|
+
total,
|
|
81
|
+
hasMore: offset + limit < total,
|
|
82
|
+
limit,
|
|
83
|
+
offset,
|
|
84
|
+
oldestAvailable,
|
|
85
|
+
newestAvailable,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
getStats() {
|
|
89
|
+
return { size: this.queue.size, capacity: this.queue.capacity };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Internal helpers
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
function matchesMetricFilters(metric, options) {
|
|
96
|
+
// Name filter: prefix match if ends with '.' or '.*', else exact match
|
|
97
|
+
if (options.names && options.names.length > 0) {
|
|
98
|
+
const matched = options.names.some(name => {
|
|
99
|
+
if (name.endsWith('.') || name.endsWith('.*')) {
|
|
100
|
+
const prefix = name.endsWith('.*') ? name.slice(0, -1) : name;
|
|
101
|
+
return metric.name.startsWith(prefix);
|
|
102
|
+
}
|
|
103
|
+
return metric.name === name;
|
|
104
|
+
});
|
|
105
|
+
if (!matched)
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Source filter: case-insensitive substring match
|
|
109
|
+
if (options.source) {
|
|
110
|
+
const needle = options.source.toLowerCase();
|
|
111
|
+
if (!metric.source.toLowerCase().includes(needle))
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
// Type filter: exact match
|
|
115
|
+
if (options.type) {
|
|
116
|
+
if (metric.type !== options.type)
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWV0cmljc1NpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFTN0QsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbkIsS0FBSyxDQUFnQztJQUV0RCxZQUFZLGVBQXVCLEdBQUc7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBaUIsWUFBWSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUF3QjtRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCx1Q0FBdUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQTRCO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWpELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFMUMsK0NB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SUFDbEQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEUsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbi1tZW1vcnkgcmluZyBidWZmZXIgc2luayBmb3IgbWV0cmljIHNuYXBzaG90cy5cbiAqXG4gKiBTdG9yZXMgc25hcHNob3RzIGluIGFuIEV2aWN0aW5nUXVldWUgYW5kIHByb3ZpZGVzIGEgcXVlcnkgaW50ZXJmYWNlXG4gKiBmb3IgdGhlIE1DUCBxdWVyeV9tZXRyaWNzIHRvb2wuIEZvbGxvd3MgdGhlIHNhbWUgcXVlcnkgcGF0dGVybiBhc1xuICogTWVtb3J5TG9nU2luayAoc2VlIHNyYy9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsudHMpLlxuICovXG5cbmltcG9ydCB7IEV2aWN0aW5nUXVldWUgfSBmcm9tICcuLi8uLi91dGlscy9FdmljdGluZ1F1ZXVlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgSU1ldHJpY3NTaW5rLFxuICBNZXRyaWNFbnRyeSxcbiAgTWV0cmljUXVlcnlPcHRpb25zLFxuICBNZXRyaWNRdWVyeVJlc3VsdCxcbiAgTWV0cmljU25hcHNob3QsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIE1lbW9yeU1ldHJpY3NTaW5rIGltcGxlbWVudHMgSU1ldHJpY3NTaW5rIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICdNZW1vcnlNZXRyaWNzU2luayc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVldWU6IEV2aWN0aW5nUXVldWU8TWV0cmljU25hcHNob3Q+O1xuXG4gIGNvbnN0cnVjdG9yKG1heFNuYXBzaG90czogbnVtYmVyID0gMjQwKSB7XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBFdmljdGluZ1F1ZXVlPE1ldHJpY1NuYXBzaG90PihtYXhTbmFwc2hvdHMpO1xuICB9XG5cbiAgb25TbmFwc2hvdChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXVlLnB1c2goc25hcHNob3QpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTm8tb3Ag4oCUIGluLW1lbW9yeSwgbm90aGluZyB0byBmbHVzaC5cbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucXVldWUuY2xlYXIoKTtcbiAgfVxuXG4gIHF1ZXJ5KG9wdGlvbnM/OiBNZXRyaWNRdWVyeU9wdGlvbnMpOiBNZXRyaWNRdWVyeVJlc3VsdCB7XG4gICAgY29uc3QgbGF0ZXN0ID0gb3B0aW9ucz8ubGF0ZXN0ID8/IHRydWU7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLm1pbihNYXRoLm1heChvcHRpb25zPy5saW1pdCA/PyAxLCAwKSwgMTAwKTtcbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heChvcHRpb25zPy5vZmZzZXQgPz8gMCwgMCk7XG5cbiAgICBjb25zdCBhbGxTbmFwc2hvdHMgPSB0aGlzLnF1ZXVlLnRvQXJyYXkoKTtcblxuICAgIC8vIENvbXB1dGUgYXZhaWxhYmlsaXR5IGJvdW5kcyBCRUZPUkUgZmlsdGVyaW5nXG4gICAgY29uc3Qgb2xkZXN0QXZhaWxhYmxlID0gYWxsU25hcHNob3RzLmxlbmd0aCA+IDAgPyBhbGxTbmFwc2hvdHNbMF0udGltZXN0YW1wIDogJyc7XG4gICAgY29uc3QgbmV3ZXN0QXZhaWxhYmxlID0gYWxsU25hcHNob3RzLmxlbmd0aCA+IDAgPyBhbGxTbmFwc2hvdHMuYXQoLTEpIS50aW1lc3RhbXAgOiAnJztcblxuICAgIC8vIElmIGxpbWl0IGlzIDAsIHJldHVybiBlbXB0eSByZXN1bHQgd2l0aCBib3VuZHNcbiAgICBpZiAobGltaXQgPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNuYXBzaG90czogW10sXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgbGltaXQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgb2xkZXN0QXZhaWxhYmxlLFxuICAgICAgICBuZXdlc3RBdmFpbGFibGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDEuIFNlbGVjdCBzbmFwc2hvdHMgYmFzZWQgb24gbGF0ZXN0IGZsYWdcbiAgICBsZXQgc25hcHNob3RzOiBNZXRyaWNTbmFwc2hvdFtdO1xuICAgIGlmIChsYXRlc3QpIHtcbiAgICAgIHNuYXBzaG90cyA9IGFsbFNuYXBzaG90cy5sZW5ndGggPiAwID8gW2FsbFNuYXBzaG90cy5hdCgtMSkhXSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFwc2hvdHMgPSBbLi4uYWxsU25hcHNob3RzXTtcbiAgICB9XG5cbiAgICAvLyAyLiBGaWx0ZXIgYnkgdGltZSByYW5nZVxuICAgIGlmIChvcHRpb25zPy5zaW5jZSkge1xuICAgICAgY29uc3Qgc2luY2UgPSBvcHRpb25zLnNpbmNlO1xuICAgICAgc25hcHNob3RzID0gc25hcHNob3RzLmZpbHRlcihzID0+IHMudGltZXN0YW1wID4gc2luY2UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8udW50aWwpIHtcbiAgICAgIGNvbnN0IHVudGlsID0gb3B0aW9ucy51bnRpbDtcbiAgICAgIHNuYXBzaG90cyA9IHNuYXBzaG90cy5maWx0ZXIocyA9PiBzLnRpbWVzdGFtcCA8IHVudGlsKTtcbiAgICB9XG5cbiAgICAvLyAzLiBGaWx0ZXIgbWV0cmljcyB3aXRoaW4gZWFjaCBzbmFwc2hvdCBieSBuYW1lL3NvdXJjZS90eXBlXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWVzIHx8IG9wdGlvbnM/LnNvdXJjZSB8fCBvcHRpb25zPy50eXBlKSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZDogTWV0cmljU25hcHNob3RbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBzbmFwc2hvdCBvZiBzbmFwc2hvdHMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE1ldHJpY3MgPSBzbmFwc2hvdC5tZXRyaWNzLmZpbHRlcihtZXRyaWMgPT5cbiAgICAgICAgICBtYXRjaGVzTWV0cmljRmlsdGVycyhtZXRyaWMsIG9wdGlvbnMpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2hlZE1ldHJpY3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcmVkLnB1c2goeyAuLi5zbmFwc2hvdCwgbWV0cmljczogbWF0Y2hlZE1ldHJpY3MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNuYXBzaG90cyA9IGZpbHRlcmVkO1xuICAgIH1cblxuICAgIC8vIDQuIFNvcnQgbmV3ZXN0LWZpcnN0IChkZXNjZW5kaW5nIHRpbWVzdGFtcClcbiAgICBzbmFwc2hvdHMuc29ydCgoYSwgYikgPT4gYi50aW1lc3RhbXAubG9jYWxlQ29tcGFyZShhLnRpbWVzdGFtcCkpO1xuXG4gICAgLy8gNS4gQ291bnQgdG90YWwgYmVmb3JlIHBhZ2luYXRpb25cbiAgICBjb25zdCB0b3RhbCA9IHNuYXBzaG90cy5sZW5ndGg7XG5cbiAgICAvLyA2LiBQYWdpbmF0ZVxuICAgIHNuYXBzaG90cyA9IHNuYXBzaG90cy5zbGljZShvZmZzZXQsIG9mZnNldCArIGxpbWl0KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzbmFwc2hvdHMsXG4gICAgICB0b3RhbCxcbiAgICAgIGhhc01vcmU6IG9mZnNldCArIGxpbWl0IDwgdG90YWwsXG4gICAgICBsaW1pdCxcbiAgICAgIG9mZnNldCxcbiAgICAgIG9sZGVzdEF2YWlsYWJsZSxcbiAgICAgIG5ld2VzdEF2YWlsYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogeyBzaXplOiBudW1iZXI7IGNhcGFjaXR5OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHsgc2l6ZTogdGhpcy5xdWV1ZS5zaXplLCBjYXBhY2l0eTogdGhpcy5xdWV1ZS5jYXBhY2l0eSB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW50ZXJuYWwgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIG1hdGNoZXNNZXRyaWNGaWx0ZXJzKFxuICBtZXRyaWM6IE1ldHJpY0VudHJ5LFxuICBvcHRpb25zOiBNZXRyaWNRdWVyeU9wdGlvbnMsXG4pOiBib29sZWFuIHtcbiAgLy8gTmFtZSBmaWx0ZXI6IHByZWZpeCBtYXRjaCBpZiBlbmRzIHdpdGggJy4nIG9yICcuKicsIGVsc2UgZXhhY3QgbWF0Y2hcbiAgaWYgKG9wdGlvbnMubmFtZXMgJiYgb3B0aW9ucy5uYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG9wdGlvbnMubmFtZXMuc29tZShuYW1lID0+IHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCcuJykgfHwgbmFtZS5lbmRzV2l0aCgnLionKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBuYW1lLmVuZHNXaXRoKCcuKicpID8gbmFtZS5zbGljZSgwLCAtMSkgOiBuYW1lO1xuICAgICAgICByZXR1cm4gbWV0cmljLm5hbWUuc3RhcnRzV2l0aChwcmVmaXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldHJpYy5uYW1lID09PSBuYW1lO1xuICAgIH0pO1xuICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gU291cmNlIGZpbHRlcjogY2FzZS1pbnNlbnNpdGl2ZSBzdWJzdHJpbmcgbWF0Y2hcbiAgaWYgKG9wdGlvbnMuc291cmNlKSB7XG4gICAgY29uc3QgbmVlZGxlID0gb3B0aW9ucy5zb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIW1ldHJpYy5zb3VyY2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuZWVkbGUpKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUeXBlIGZpbHRlcjogZXhhY3QgbWF0Y2hcbiAgaWYgKG9wdGlvbnMudHlwZSkge1xuICAgIGlmIChtZXRyaWMudHlwZSAhPT0gb3B0aW9ucy50eXBlKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the Metrics Collection System.
|
|
3
|
+
*
|
|
4
|
+
* These types are shared across the MetricsManager, all sinks, and all collectors.
|
|
5
|
+
*/
|
|
6
|
+
export type MetricType = 'counter' | 'gauge' | 'histogram';
|
|
7
|
+
export type MetricUnit = 'count' | 'bytes' | 'milliseconds' | 'seconds' | 'percent' | 'ratio' | 'operations' | 'megabytes' | 'none';
|
|
8
|
+
export interface BaseMetricEntry {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly source: string;
|
|
11
|
+
readonly unit: MetricUnit;
|
|
12
|
+
readonly description?: string;
|
|
13
|
+
readonly labels?: Readonly<Record<string, string>>;
|
|
14
|
+
}
|
|
15
|
+
export interface CounterEntry extends BaseMetricEntry {
|
|
16
|
+
readonly type: 'counter';
|
|
17
|
+
readonly value: number;
|
|
18
|
+
}
|
|
19
|
+
export interface GaugeEntry extends BaseMetricEntry {
|
|
20
|
+
readonly type: 'gauge';
|
|
21
|
+
readonly value: number;
|
|
22
|
+
}
|
|
23
|
+
export interface HistogramValue {
|
|
24
|
+
readonly count: number;
|
|
25
|
+
readonly sum: number;
|
|
26
|
+
readonly min?: number;
|
|
27
|
+
readonly max?: number;
|
|
28
|
+
readonly avg?: number;
|
|
29
|
+
readonly p50?: number;
|
|
30
|
+
readonly p75?: number;
|
|
31
|
+
readonly p90?: number;
|
|
32
|
+
readonly p95?: number;
|
|
33
|
+
readonly p99?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface HistogramEntry extends BaseMetricEntry {
|
|
36
|
+
readonly type: 'histogram';
|
|
37
|
+
readonly value: HistogramValue;
|
|
38
|
+
}
|
|
39
|
+
export type MetricEntry = CounterEntry | GaugeEntry | HistogramEntry;
|
|
40
|
+
export interface MetricSnapshot {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly timestamp: string;
|
|
43
|
+
readonly metrics: readonly MetricEntry[];
|
|
44
|
+
readonly errors: readonly string[];
|
|
45
|
+
readonly durationMs: number;
|
|
46
|
+
}
|
|
47
|
+
export interface IMetricCollector {
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly description: string;
|
|
50
|
+
collect(): MetricEntry[] | Promise<MetricEntry[]>;
|
|
51
|
+
}
|
|
52
|
+
export interface IMetricsSink {
|
|
53
|
+
readonly name: string;
|
|
54
|
+
onSnapshot(snapshot: MetricSnapshot): void;
|
|
55
|
+
flush(): Promise<void>;
|
|
56
|
+
close(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
export interface MetricQueryOptions {
|
|
59
|
+
names?: string[];
|
|
60
|
+
source?: string;
|
|
61
|
+
type?: MetricType;
|
|
62
|
+
since?: string;
|
|
63
|
+
until?: string;
|
|
64
|
+
latest?: boolean;
|
|
65
|
+
limit?: number;
|
|
66
|
+
offset?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface MetricQueryResult {
|
|
69
|
+
readonly snapshots: readonly MetricSnapshot[];
|
|
70
|
+
readonly total: number;
|
|
71
|
+
readonly hasMore: boolean;
|
|
72
|
+
readonly limit: number;
|
|
73
|
+
readonly offset: number;
|
|
74
|
+
readonly oldestAvailable: string;
|
|
75
|
+
readonly newestAvailable: string;
|
|
76
|
+
}
|
|
77
|
+
export interface MetricsManagerConfig {
|
|
78
|
+
readonly enabled: boolean;
|
|
79
|
+
readonly collectionIntervalMs: number;
|
|
80
|
+
readonly maxSnapshotSize: number;
|
|
81
|
+
readonly collectorFailureThreshold: number;
|
|
82
|
+
readonly collectionDurationWarnMs: number;
|
|
83
|
+
readonly memorySnapshotCapacity: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Map the flat env object (from Zod-parsed `process.env`) to a typed
|
|
87
|
+
* `MetricsManagerConfig`. Keeps the mapping in one place so the DI container
|
|
88
|
+
* only needs `buildMetricsManagerConfig(env)`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function buildMetricsManagerConfig(envVars: {
|
|
91
|
+
DOLLHOUSE_METRICS_ENABLED: boolean;
|
|
92
|
+
DOLLHOUSE_METRICS_COLLECTION_INTERVAL_MS: number;
|
|
93
|
+
DOLLHOUSE_METRICS_MAX_SNAPSHOT_SIZE: number;
|
|
94
|
+
DOLLHOUSE_METRICS_COLLECTOR_FAILURE_THRESHOLD: number;
|
|
95
|
+
DOLLHOUSE_METRICS_COLLECTION_DURATION_WARN_MS: number;
|
|
96
|
+
DOLLHOUSE_METRICS_MEMORY_SNAPSHOT_CAPACITY: number;
|
|
97
|
+
}): MetricsManagerConfig;
|
|
98
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the Metrics Collection System.
|
|
3
|
+
*
|
|
4
|
+
* These types are shared across the MetricsManager, all sinks, and all collectors.
|
|
5
|
+
*/
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Helper: build config from env vars
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* Map the flat env object (from Zod-parsed `process.env`) to a typed
|
|
11
|
+
* `MetricsManagerConfig`. Keeps the mapping in one place so the DI container
|
|
12
|
+
* only needs `buildMetricsManagerConfig(env)`.
|
|
13
|
+
*/
|
|
14
|
+
export function buildMetricsManagerConfig(envVars) {
|
|
15
|
+
return {
|
|
16
|
+
enabled: envVars.DOLLHOUSE_METRICS_ENABLED,
|
|
17
|
+
collectionIntervalMs: envVars.DOLLHOUSE_METRICS_COLLECTION_INTERVAL_MS,
|
|
18
|
+
maxSnapshotSize: envVars.DOLLHOUSE_METRICS_MAX_SNAPSHOT_SIZE,
|
|
19
|
+
collectorFailureThreshold: envVars.DOLLHOUSE_METRICS_COLLECTOR_FAILURE_THRESHOLD,
|
|
20
|
+
collectionDurationWarnMs: envVars.DOLLHOUSE_METRICS_COLLECTION_DURATION_WARN_MS,
|
|
21
|
+
memorySnapshotCapacity: envVars.DOLLHOUSE_METRICS_MEMORY_SNAPSHOT_CAPACITY,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0cmljcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBZ0lILDhFQUE4RTtBQUM5RSxxQ0FBcUM7QUFDckMsOEVBQThFO0FBRTlFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsT0FPekM7SUFDQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyx5QkFBeUI7UUFDMUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLHdDQUF3QztRQUN0RSxlQUFlLEVBQUUsT0FBTyxDQUFDLG1DQUFtQztRQUM1RCx5QkFBeUIsRUFBRSxPQUFPLENBQUMsNkNBQTZDO1FBQ2hGLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyw2Q0FBNkM7UUFDL0Usc0JBQXNCLEVBQUUsT0FBTyxDQUFDLDBDQUEwQztLQUMzRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29yZSB0eXBlcyBmb3IgdGhlIE1ldHJpY3MgQ29sbGVjdGlvbiBTeXN0ZW0uXG4gKlxuICogVGhlc2UgdHlwZXMgYXJlIHNoYXJlZCBhY3Jvc3MgdGhlIE1ldHJpY3NNYW5hZ2VyLCBhbGwgc2lua3MsIGFuZCBhbGwgY29sbGVjdG9ycy5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1ldHJpYyB0eXBlICYgdW5pdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE1ldHJpY1R5cGUgPSAnY291bnRlcicgfCAnZ2F1Z2UnIHwgJ2hpc3RvZ3JhbSc7XG5cbmV4cG9ydCB0eXBlIE1ldHJpY1VuaXQgPVxuICB8ICdjb3VudCdcbiAgfCAnYnl0ZXMnXG4gIHwgJ21pbGxpc2Vjb25kcydcbiAgfCAnc2Vjb25kcydcbiAgfCAncGVyY2VudCdcbiAgfCAncmF0aW8nXG4gIHwgJ29wZXJhdGlvbnMnXG4gIHwgJ21lZ2FieXRlcydcbiAgfCAnbm9uZSc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWV0cmljIGVudHJpZXMgKGRpc2NyaW1pbmF0ZWQgdW5pb24gb24gYHR5cGVgKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU1ldHJpY0VudHJ5IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5pdDogTWV0cmljVW5pdDtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhYmVscz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50ZXJFbnRyeSBleHRlbmRzIEJhc2VNZXRyaWNFbnRyeSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdjb3VudGVyJztcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXVnZUVudHJ5IGV4dGVuZHMgQmFzZU1ldHJpY0VudHJ5IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2dhdWdlJztcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b2dyYW1WYWx1ZSB7XG4gIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IHN1bTogbnVtYmVyO1xuICByZWFkb25seSBtaW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heD86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXZnPzogbnVtYmVyO1xuICByZWFkb25seSBwNTA/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHA3NT86IG51bWJlcjtcbiAgcmVhZG9ubHkgcDkwPzogbnVtYmVyO1xuICByZWFkb25seSBwOTU/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHA5OT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b2dyYW1FbnRyeSBleHRlbmRzIEJhc2VNZXRyaWNFbnRyeSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdoaXN0b2dyYW0nO1xuICByZWFkb25seSB2YWx1ZTogSGlzdG9ncmFtVmFsdWU7XG59XG5cbmV4cG9ydCB0eXBlIE1ldHJpY0VudHJ5ID0gQ291bnRlckVudHJ5IHwgR2F1Z2VFbnRyeSB8IEhpc3RvZ3JhbUVudHJ5O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNuYXBzaG90XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNTbmFwc2hvdCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogc3RyaW5nO1xuICByZWFkb25seSBtZXRyaWNzOiByZWFkb25seSBNZXRyaWNFbnRyeVtdO1xuICByZWFkb25seSBlcnJvcnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBkdXJhdGlvbk1zOiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29sbGVjdG9yICYgU2luayBpbnRlcmZhY2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBJTWV0cmljQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjb2xsZWN0KCk6IE1ldHJpY0VudHJ5W10gfCBQcm9taXNlPE1ldHJpY0VudHJ5W10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZXRyaWNzU2luayB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgb25TbmFwc2hvdChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpOiB2b2lkO1xuICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+O1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFF1ZXJ5IHR5cGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNRdWVyeU9wdGlvbnMge1xuICBuYW1lcz86IHN0cmluZ1tdO1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXRyaWNUeXBlO1xuICBzaW5jZT86IHN0cmluZztcbiAgdW50aWw/OiBzdHJpbmc7XG4gIGxhdGVzdD86IGJvb2xlYW47XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljUXVlcnlSZXN1bHQge1xuICByZWFkb25seSBzbmFwc2hvdHM6IHJlYWRvbmx5IE1ldHJpY1NuYXBzaG90W107XG4gIHJlYWRvbmx5IHRvdGFsOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhhc01vcmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxpbWl0OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBvbGRlc3RBdmFpbGFibGU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmV3ZXN0QXZhaWxhYmxlOiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uZmlndXJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljc01hbmFnZXJDb25maWcge1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSBjb2xsZWN0aW9uSW50ZXJ2YWxNczogbnVtYmVyO1xuICByZWFkb25seSBtYXhTbmFwc2hvdFNpemU6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29sbGVjdG9yRmFpbHVyZVRocmVzaG9sZDogbnVtYmVyO1xuICByZWFkb25seSBjb2xsZWN0aW9uRHVyYXRpb25XYXJuTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVtb3J5U25hcHNob3RDYXBhY2l0eTogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcjogYnVpbGQgY29uZmlnIGZyb20gZW52IHZhcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE1hcCB0aGUgZmxhdCBlbnYgb2JqZWN0IChmcm9tIFpvZC1wYXJzZWQgYHByb2Nlc3MuZW52YCkgdG8gYSB0eXBlZFxuICogYE1ldHJpY3NNYW5hZ2VyQ29uZmlnYC4gS2VlcHMgdGhlIG1hcHBpbmcgaW4gb25lIHBsYWNlIHNvIHRoZSBESSBjb250YWluZXJcbiAqIG9ubHkgbmVlZHMgYGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcoZW52KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnKGVudlZhcnM6IHtcbiAgRE9MTEhPVVNFX01FVFJJQ1NfRU5BQkxFRDogYm9vbGVhbjtcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9JTlRFUlZBTF9NUzogbnVtYmVyO1xuICBET0xMSE9VU0VfTUVUUklDU19NQVhfU05BUFNIT1RfU0laRTogbnVtYmVyO1xuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUT1JfRkFJTFVSRV9USFJFU0hPTEQ6IG51bWJlcjtcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9EVVJBVElPTl9XQVJOX01TOiBudW1iZXI7XG4gIERPTExIT1VTRV9NRVRSSUNTX01FTU9SWV9TTkFQU0hPVF9DQVBBQ0lUWTogbnVtYmVyO1xufSk6IE1ldHJpY3NNYW5hZ2VyQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBlbnZWYXJzLkRPTExIT1VTRV9NRVRSSUNTX0VOQUJMRUQsXG4gICAgY29sbGVjdGlvbkludGVydmFsTXM6IGVudlZhcnMuRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9JTlRFUlZBTF9NUyxcbiAgICBtYXhTbmFwc2hvdFNpemU6IGVudlZhcnMuRE9MTEhPVVNFX01FVFJJQ1NfTUFYX1NOQVBTSE9UX1NJWkUsXG4gICAgY29sbGVjdG9yRmFpbHVyZVRocmVzaG9sZDogZW52VmFycy5ET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUT1JfRkFJTFVSRV9USFJFU0hPTEQsXG4gICAgY29sbGVjdGlvbkR1cmF0aW9uV2Fybk1zOiBlbnZWYXJzLkRPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RJT05fRFVSQVRJT05fV0FSTl9NUyxcbiAgICBtZW1vcnlTbmFwc2hvdENhcGFjaXR5OiBlbnZWYXJzLkRPTExIT1VTRV9NRVRSSUNTX01FTU9SWV9TTkFQU0hPVF9DQVBBQ0lUWSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultElementProvider.d.ts","sourceRoot":"","sources":["../../src/portfolio/DefaultElementProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAkBX,MAAM,WAAW,4BAA4B;IAC3C,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuB;IACnD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;IACzD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAwG;IAEnI,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAM5I,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8C;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,MAAM,CAAC,EAAE,4BAA4B;IAmDjD;;;OAGG;IACH,IAAW,wBAAwB,IAAI,OAAO,CAE7C;IAED;;;OAGG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAEtC;YAMa,QAAQ;YASR,OAAO;YAQP,UAAU;YAaV,aAAa;YAQb,UAAU;YAUV,SAAS;YAUT,YAAY;YAUZ,eAAe;IAY7B;;;OAGG;IACH,OAAO,KAAK,eAAe,GAwC1B;IAED;;;OAGG;YACW,iBAAiB;IAyC/B;;OAEG;YACW,eAAe;IAS7B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IA8CxB;;;OAGG;IAGH;;;;OAIG;IA+BH;;;;;OAKG;IAMH;;;;;OAKG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAM;IAC3C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsC;IAEpE,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,aAAa;IAYrB;;;;OAIG;WACW,OAAO,IAAI,IAAI;IAsB7B;;;;;OAKG;WACW,mBAAmB,IAAI;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH;
|
|
1
|
+
{"version":3,"file":"DefaultElementProvider.d.ts","sourceRoot":"","sources":["../../src/portfolio/DefaultElementProvider.ts"],"names":[],"mappings":"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"}
|