@dollhousemcp/mcp-server 2.0.0-rc.5 → 2.0.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/CHANGELOG.md +54 -17
- package/README.github.md +2 -2
- package/README.md +2 -2
- package/README.md.backup +284 -224
- package/README.npm.md +2 -2
- 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/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +39 -18
- package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
- package/dist/handlers/element-crud/helpers.js +30 -3
- 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/GatekeeperTypes.d.ts +4 -0
- package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
- 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/UnifiedEndpoint.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
- 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/ElementPolicies.d.ts +17 -0
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
- package/dist/handlers/mcp-aql/types.d.ts +22 -0
- package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/types.js +47 -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 +8 -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/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +8 -1
- 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/constants/version.d.ts +0 -3
- package/dist/constants/version.d.ts.map +0 -1
- package/dist/constants/version.js +0 -4
- package/dist/logging/sinks/SSELogSink.d.ts +0 -35
- package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
- package/dist/logging/sinks/SSELogSink.js +0 -181
- package/dist/logging/viewer/viewerHtml.d.ts +0 -8
- package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
- package/dist/logging/viewer/viewerHtml.js +0 -204
- package/dist/web/public/public/app.js +0 -1878
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export class GatekeeperMetricsCollector {
|
|
2
|
+
tracker;
|
|
3
|
+
name = 'gatekeeper-metrics';
|
|
4
|
+
description = 'Gatekeeper policy enforcement: allowed/denied/confirmed, policy sources, permission levels.';
|
|
5
|
+
constructor(tracker) {
|
|
6
|
+
this.tracker = tracker;
|
|
7
|
+
}
|
|
8
|
+
collect() {
|
|
9
|
+
try {
|
|
10
|
+
const m = this.tracker.getMetrics();
|
|
11
|
+
const entries = [
|
|
12
|
+
{
|
|
13
|
+
type: 'counter',
|
|
14
|
+
name: 'gatekeeper.decisions_total',
|
|
15
|
+
source: 'GatekeeperMetricsTracker',
|
|
16
|
+
unit: 'operations',
|
|
17
|
+
description: 'Total Gatekeeper policy decisions.',
|
|
18
|
+
value: m.totalDecisions,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
type: 'counter',
|
|
22
|
+
name: 'gatekeeper.allowed_total',
|
|
23
|
+
source: 'GatekeeperMetricsTracker',
|
|
24
|
+
unit: 'operations',
|
|
25
|
+
description: 'Operations allowed by Gatekeeper.',
|
|
26
|
+
value: m.allowed,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: 'counter',
|
|
30
|
+
name: 'gatekeeper.denied_total',
|
|
31
|
+
source: 'GatekeeperMetricsTracker',
|
|
32
|
+
unit: 'operations',
|
|
33
|
+
description: 'Operations denied by Gatekeeper.',
|
|
34
|
+
value: m.denied,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'counter',
|
|
38
|
+
name: 'gatekeeper.confirmations_requested_total',
|
|
39
|
+
source: 'GatekeeperMetricsTracker',
|
|
40
|
+
unit: 'operations',
|
|
41
|
+
description: 'Total operations that requested user confirmation.',
|
|
42
|
+
value: m.confirmationsPending,
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
// Per-policy-source gauges
|
|
46
|
+
for (const [source, count] of m.byPolicySource) {
|
|
47
|
+
entries.push({
|
|
48
|
+
type: 'gauge',
|
|
49
|
+
name: 'gatekeeper.by_policy_source',
|
|
50
|
+
source: 'GatekeeperMetricsTracker',
|
|
51
|
+
unit: 'operations',
|
|
52
|
+
description: `Decisions from policy source: ${source}.`,
|
|
53
|
+
labels: { policy_source: source },
|
|
54
|
+
value: count,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Per-permission-level gauges
|
|
58
|
+
for (const [level, count] of m.byPermissionLevel) {
|
|
59
|
+
entries.push({
|
|
60
|
+
type: 'gauge',
|
|
61
|
+
name: 'gatekeeper.by_permission_level',
|
|
62
|
+
source: 'GatekeeperMetricsTracker',
|
|
63
|
+
unit: 'operations',
|
|
64
|
+
description: `Decisions at permission level: ${level}.`,
|
|
65
|
+
labels: { permission_level: level },
|
|
66
|
+
value: count,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return entries;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9jb2xsZWN0b3JzL0dhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sT0FBTywwQkFBMEI7SUFJUjtJQUhwQixJQUFJLEdBQUcsb0JBQW9CLENBQUM7SUFDNUIsV0FBVyxHQUFHLDZGQUE2RixDQUFDO0lBRXJILFlBQTZCLE9BQWlDO1FBQWpDLFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBQUcsQ0FBQztJQUVsRSxPQUFPO1FBQ0wsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVwQyxNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLDRCQUE0QjtvQkFDbEMsTUFBTSxFQUFFLDBCQUEwQjtvQkFDbEMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsb0NBQW9DO29CQUNqRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLGNBQWM7aUJBQ3hCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsTUFBTSxFQUFFLDBCQUEwQjtvQkFDbEMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU87aUJBQ2pCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLHlCQUF5QjtvQkFDL0IsTUFBTSxFQUFFLDBCQUEwQjtvQkFDbEMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU07aUJBQ2hCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLDBDQUEwQztvQkFDaEQsTUFBTSxFQUFFLDBCQUEwQjtvQkFDbEMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsb0RBQW9EO29CQUNqRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtpQkFDOUI7YUFDRixDQUFDO1lBRUYsMkJBQTJCO1lBQzNCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsNkJBQTZCO29CQUNuQyxNQUFNLEVBQUUsMEJBQTBCO29CQUNsQyxJQUFJLEVBQUUsWUFBcUI7b0JBQzNCLFdBQVcsRUFBRSxpQ0FBaUMsTUFBTSxHQUFHO29CQUN2RCxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO29CQUNqQyxLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsOEJBQThCO1lBQzlCLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDakQsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxnQ0FBZ0M7b0JBQ3RDLE1BQU0sRUFBRSwwQkFBMEI7b0JBQ2xDLElBQUksRUFBRSxZQUFxQjtvQkFDM0IsV0FBVyxFQUFFLGtDQUFrQyxLQUFLLEdBQUc7b0JBQ3ZELE1BQU0sRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRTtvQkFDbkMsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RvciBmb3IgR2F0ZWtlZXBlciBwb2xpY3kgZW5mb3JjZW1lbnQgbWV0cmljcy5cbiAqXG4gKiBSZWFkcyBmcm9tIEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciBhbmQgZW1pdHMgY291bnRlciBhbmQgZ2F1Z2VcbiAqIG1ldHJpYyBlbnRyaWVzIGZvciB0aGUgTWV0cmljc01hbmFnZXIgcGlwZWxpbmUuXG4gKi9cbmltcG9ydCB0eXBlIHsgSU1ldHJpY0NvbGxlY3RvciwgTWV0cmljRW50cnkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3RvciBpbXBsZW1lbnRzIElNZXRyaWNDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYW1lID0gJ2dhdGVrZWVwZXItbWV0cmljcyc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gJ0dhdGVrZWVwZXIgcG9saWN5IGVuZm9yY2VtZW50OiBhbGxvd2VkL2RlbmllZC9jb25maXJtZWQsIHBvbGljeSBzb3VyY2VzLCBwZXJtaXNzaW9uIGxldmVscy4nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHJhY2tlcjogR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyKSB7fVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLnRyYWNrZXIuZ2V0TWV0cmljcygpO1xuXG4gICAgICBjb25zdCBlbnRyaWVzOiBNZXRyaWNFbnRyeVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdnYXRla2VlcGVyLmRlY2lzaW9uc190b3RhbCcsXG4gICAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBHYXRla2VlcGVyIHBvbGljeSBkZWNpc2lvbnMuJyxcbiAgICAgICAgICB2YWx1ZTogbS50b3RhbERlY2lzaW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb3VudGVyJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnZ2F0ZWtlZXBlci5hbGxvd2VkX3RvdGFsJyxcbiAgICAgICAgICBzb3VyY2U6ICdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInLFxuICAgICAgICAgIHVuaXQ6ICdvcGVyYXRpb25zJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ09wZXJhdGlvbnMgYWxsb3dlZCBieSBHYXRla2VlcGVyLicsXG4gICAgICAgICAgdmFsdWU6IG0uYWxsb3dlZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb3VudGVyJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnZ2F0ZWtlZXBlci5kZW5pZWRfdG90YWwnLFxuICAgICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicsXG4gICAgICAgICAgdW5pdDogJ29wZXJhdGlvbnMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3BlcmF0aW9ucyBkZW5pZWQgYnkgR2F0ZWtlZXBlci4nLFxuICAgICAgICAgIHZhbHVlOiBtLmRlbmllZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb3VudGVyJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnZ2F0ZWtlZXBlci5jb25maXJtYXRpb25zX3JlcXVlc3RlZF90b3RhbCcsXG4gICAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBvcGVyYXRpb25zIHRoYXQgcmVxdWVzdGVkIHVzZXIgY29uZmlybWF0aW9uLicsXG4gICAgICAgICAgdmFsdWU6IG0uY29uZmlybWF0aW9uc1BlbmRpbmcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICAvLyBQZXItcG9saWN5LXNvdXJjZSBnYXVnZXNcbiAgICAgIGZvciAoY29uc3QgW3NvdXJjZSwgY291bnRdIG9mIG0uYnlQb2xpY3lTb3VyY2UpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdnYXRla2VlcGVyLmJ5X3BvbGljeV9zb3VyY2UnLFxuICAgICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicsXG4gICAgICAgICAgdW5pdDogJ29wZXJhdGlvbnMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRGVjaXNpb25zIGZyb20gcG9saWN5IHNvdXJjZTogJHtzb3VyY2V9LmAsXG4gICAgICAgICAgbGFiZWxzOiB7IHBvbGljeV9zb3VyY2U6IHNvdXJjZSB9LFxuICAgICAgICAgIHZhbHVlOiBjb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBlci1wZXJtaXNzaW9uLWxldmVsIGdhdWdlc1xuICAgICAgZm9yIChjb25zdCBbbGV2ZWwsIGNvdW50XSBvZiBtLmJ5UGVybWlzc2lvbkxldmVsKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnZ2F0ZWtlZXBlci5ieV9wZXJtaXNzaW9uX2xldmVsJyxcbiAgICAgICAgICBzb3VyY2U6ICdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInLFxuICAgICAgICAgIHVuaXQ6ICdvcGVyYXRpb25zJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYERlY2lzaW9ucyBhdCBwZXJtaXNzaW9uIGxldmVsOiAke2xldmVsfS5gLFxuICAgICAgICAgIGxhYmVsczogeyBwZXJtaXNzaW9uX2xldmVsOiBsZXZlbCB9LFxuICAgICAgICAgIHZhbHVlOiBjb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects hit/miss/eviction and sizing metrics for one or more named LRUCache
|
|
3
|
+
* instances. Each cache is collected independently; a failure on one does not
|
|
4
|
+
* prevent the others from being reported.
|
|
5
|
+
*/
|
|
6
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
7
|
+
import type { LRUCache } from '../../cache/LRUCache.js';
|
|
8
|
+
export declare class LRUCacheCollector implements IMetricCollector {
|
|
9
|
+
private readonly caches;
|
|
10
|
+
readonly name = "lru-cache";
|
|
11
|
+
readonly description = "Hit rate, eviction counts, size, and memory usage for registered LRU caches";
|
|
12
|
+
constructor(caches: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
instance: LRUCache<unknown>;
|
|
15
|
+
}>);
|
|
16
|
+
collect(): MetricEntry[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=LRUCacheCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LRUCacheCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/LRUCacheCollector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,qBAAa,iBAAkB,YAAW,gBAAgB;IAMtD,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,iFAC4D;gBAG7D,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAG/E,OAAO,IAAI,WAAW,EAAE;CA0FzB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects hit/miss/eviction and sizing metrics for one or more named LRUCache
|
|
3
|
+
* instances. Each cache is collected independently; a failure on one does not
|
|
4
|
+
* prevent the others from being reported.
|
|
5
|
+
*/
|
|
6
|
+
const SOURCE = 'LRUCache';
|
|
7
|
+
export class LRUCacheCollector {
|
|
8
|
+
caches;
|
|
9
|
+
name = 'lru-cache';
|
|
10
|
+
description = 'Hit rate, eviction counts, size, and memory usage for registered LRU caches';
|
|
11
|
+
constructor(caches) {
|
|
12
|
+
this.caches = caches;
|
|
13
|
+
}
|
|
14
|
+
collect() {
|
|
15
|
+
const entries = [];
|
|
16
|
+
for (const { name, instance } of this.caches) {
|
|
17
|
+
try {
|
|
18
|
+
const stats = instance.getStats();
|
|
19
|
+
const labels = { cache: name };
|
|
20
|
+
entries.push({
|
|
21
|
+
type: 'counter',
|
|
22
|
+
name: 'cache.lru.hits_total',
|
|
23
|
+
source: SOURCE,
|
|
24
|
+
unit: 'count',
|
|
25
|
+
description: 'Total cache hits',
|
|
26
|
+
labels,
|
|
27
|
+
value: stats.hitCount,
|
|
28
|
+
}, {
|
|
29
|
+
type: 'counter',
|
|
30
|
+
name: 'cache.lru.misses_total',
|
|
31
|
+
source: SOURCE,
|
|
32
|
+
unit: 'count',
|
|
33
|
+
description: 'Total cache misses',
|
|
34
|
+
labels,
|
|
35
|
+
value: stats.missCount,
|
|
36
|
+
}, {
|
|
37
|
+
type: 'counter',
|
|
38
|
+
name: 'cache.lru.evictions_total',
|
|
39
|
+
source: SOURCE,
|
|
40
|
+
unit: 'count',
|
|
41
|
+
description: 'Total entries evicted from cache',
|
|
42
|
+
labels,
|
|
43
|
+
value: stats.evictionCount,
|
|
44
|
+
}, {
|
|
45
|
+
type: 'gauge',
|
|
46
|
+
name: 'cache.lru.hit_rate',
|
|
47
|
+
source: SOURCE,
|
|
48
|
+
unit: 'ratio',
|
|
49
|
+
description: 'Fraction of lookups that resulted in a cache hit',
|
|
50
|
+
labels,
|
|
51
|
+
value: stats.hitRate,
|
|
52
|
+
}, {
|
|
53
|
+
type: 'gauge',
|
|
54
|
+
name: 'cache.lru.size_current',
|
|
55
|
+
source: SOURCE,
|
|
56
|
+
unit: 'count',
|
|
57
|
+
description: 'Current number of entries in cache',
|
|
58
|
+
labels,
|
|
59
|
+
value: stats.size,
|
|
60
|
+
}, {
|
|
61
|
+
type: 'gauge',
|
|
62
|
+
name: 'cache.lru.size_max',
|
|
63
|
+
source: SOURCE,
|
|
64
|
+
unit: 'count',
|
|
65
|
+
description: 'Maximum capacity of the cache',
|
|
66
|
+
labels,
|
|
67
|
+
value: stats.maxSize,
|
|
68
|
+
}, {
|
|
69
|
+
type: 'gauge',
|
|
70
|
+
name: 'cache.lru.memory_used_megabytes',
|
|
71
|
+
source: SOURCE,
|
|
72
|
+
unit: 'megabytes',
|
|
73
|
+
description: 'Estimated memory used by cached entries (MB)',
|
|
74
|
+
labels,
|
|
75
|
+
value: stats.memoryUsageMB,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
// Record failure as a metric so it's visible in the dashboard.
|
|
80
|
+
// Individual cache failures should not prevent other caches from reporting.
|
|
81
|
+
entries.push({
|
|
82
|
+
type: 'gauge',
|
|
83
|
+
name: 'cache.lru.collection_error',
|
|
84
|
+
source: SOURCE,
|
|
85
|
+
unit: 'count',
|
|
86
|
+
description: `Failed to collect stats: ${err instanceof Error ? err.message : String(err)}`,
|
|
87
|
+
labels: { cache: name },
|
|
88
|
+
value: 1,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return entries;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJVQ2FjaGVDb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9jb2xsZWN0b3JzL0xSVUNhY2hlQ29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFLSCxNQUFNLE1BQU0sR0FBRyxVQUFtQixDQUFDO0FBRW5DLE1BQU0sT0FBTyxpQkFBaUI7SUFNVDtJQUxWLElBQUksR0FBRyxXQUFXLENBQUM7SUFDbkIsV0FBVyxHQUNsQiw2RUFBNkUsQ0FBQztJQUVoRixZQUNtQixNQUE0RDtRQUE1RCxXQUFNLEdBQU4sTUFBTSxDQUFzRDtJQUM1RSxDQUFDO0lBRUosT0FBTztRQUNMLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFFbEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVcsQ0FBQztnQkFFeEMsT0FBTyxDQUFDLElBQUksQ0FDVjtvQkFDRSxJQUFJLEVBQUUsU0FBa0I7b0JBQ3hCLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLGtCQUFrQjtvQkFDL0IsTUFBTTtvQkFDTixLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVE7aUJBQ3RCLEVBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFNBQWtCO29CQUN4QixJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSxvQkFBb0I7b0JBQ2pDLE1BQU07b0JBQ04sS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTO2lCQUN2QixFQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxNQUFNO29CQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYTtpQkFDM0IsRUFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsTUFBTTtvQkFDTixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU87aUJBQ3JCLEVBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSxvQ0FBb0M7b0JBQ2pELE1BQU07b0JBQ04sS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO2lCQUNsQixFQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsK0JBQStCO29CQUM1QyxNQUFNO29CQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDckIsRUFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxpQ0FBaUM7b0JBQ3ZDLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxXQUFvQjtvQkFDMUIsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsTUFBTTtvQkFDTixLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWE7aUJBQzNCLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLCtEQUErRDtnQkFDL0QsNEVBQTRFO2dCQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLDRCQUE0QjtvQkFDbEMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsNEJBQTRCLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDM0YsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDdkIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RzIGhpdC9taXNzL2V2aWN0aW9uIGFuZCBzaXppbmcgbWV0cmljcyBmb3Igb25lIG9yIG1vcmUgbmFtZWQgTFJVQ2FjaGVcbiAqIGluc3RhbmNlcy4gRWFjaCBjYWNoZSBpcyBjb2xsZWN0ZWQgaW5kZXBlbmRlbnRseTsgYSBmYWlsdXJlIG9uIG9uZSBkb2VzIG5vdFxuICogcHJldmVudCB0aGUgb3RoZXJzIGZyb20gYmVpbmcgcmVwb3J0ZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTFJVQ2FjaGUgfSBmcm9tICcuLi8uLi9jYWNoZS9MUlVDYWNoZS5qcyc7XG5cbmNvbnN0IFNPVVJDRSA9ICdMUlVDYWNoZScgYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZUNvbGxlY3RvciBpbXBsZW1lbnRzIElNZXRyaWNDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYW1lID0gJ2xydS1jYWNoZSc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID1cbiAgICAnSGl0IHJhdGUsIGV2aWN0aW9uIGNvdW50cywgc2l6ZSwgYW5kIG1lbW9yeSB1c2FnZSBmb3IgcmVnaXN0ZXJlZCBMUlUgY2FjaGVzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBMUlVDYWNoZTx1bmtub3duPiB9PixcbiAgKSB7fVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgY29uc3QgZW50cmllczogTWV0cmljRW50cnlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIGluc3RhbmNlIH0gb2YgdGhpcy5jYWNoZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gaW5zdGFuY2UuZ2V0U3RhdHMoKTtcbiAgICAgICAgY29uc3QgbGFiZWxzID0geyBjYWNoZTogbmFtZSB9IGFzIGNvbnN0O1xuXG4gICAgICAgIGVudHJpZXMucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY291bnRlcicgYXMgY29uc3QsXG4gICAgICAgICAgICBuYW1lOiAnY2FjaGUubHJ1LmhpdHNfdG90YWwnLFxuICAgICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBjYWNoZSBoaXRzJyxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0cy5oaXRDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjb3VudGVyJyBhcyBjb25zdCxcbiAgICAgICAgICAgIG5hbWU6ICdjYWNoZS5scnUubWlzc2VzX3RvdGFsJyxcbiAgICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgY2FjaGUgbWlzc2VzJyxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0cy5taXNzQ291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY291bnRlcicgYXMgY29uc3QsXG4gICAgICAgICAgICBuYW1lOiAnY2FjaGUubHJ1LmV2aWN0aW9uc190b3RhbCcsXG4gICAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGVudHJpZXMgZXZpY3RlZCBmcm9tIGNhY2hlJyxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0cy5ldmljdGlvbkNvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIG5hbWU6ICdjYWNoZS5scnUuaGl0X3JhdGUnLFxuICAgICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgICB1bml0OiAncmF0aW8nIGFzIGNvbnN0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdGcmFjdGlvbiBvZiBsb29rdXBzIHRoYXQgcmVzdWx0ZWQgaW4gYSBjYWNoZSBoaXQnLFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXRzLmhpdFJhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgICAgbmFtZTogJ2NhY2hlLmxydS5zaXplX2N1cnJlbnQnLFxuICAgICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGNhY2hlJyxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0cy5zaXplLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIG5hbWU6ICdjYWNoZS5scnUuc2l6ZV9tYXgnLFxuICAgICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgICB1bml0OiAnY291bnQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIGNhcGFjaXR5IG9mIHRoZSBjYWNoZScsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdHMubWF4U2l6ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgICBuYW1lOiAnY2FjaGUubHJ1Lm1lbW9yeV91c2VkX21lZ2FieXRlcycsXG4gICAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICAgIHVuaXQ6ICdtZWdhYnl0ZXMnIGFzIGNvbnN0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFc3RpbWF0ZWQgbWVtb3J5IHVzZWQgYnkgY2FjaGVkIGVudHJpZXMgKE1CKScsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdHMubWVtb3J5VXNhZ2VNQixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJlY29yZCBmYWlsdXJlIGFzIGEgbWV0cmljIHNvIGl0J3MgdmlzaWJsZSBpbiB0aGUgZGFzaGJvYXJkLlxuICAgICAgICAvLyBJbmRpdmlkdWFsIGNhY2hlIGZhaWx1cmVzIHNob3VsZCBub3QgcHJldmVudCBvdGhlciBjYWNoZXMgZnJvbSByZXBvcnRpbmcuXG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnY2FjaGUubHJ1LmNvbGxlY3Rpb25fZXJyb3InLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBGYWlsZWQgdG8gY29sbGVjdCBzdGF0czogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgICAgICBsYWJlbHM6IHsgY2FjaGU6IG5hbWUgfSxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector for MCP-AQL operation metrics.
|
|
3
|
+
*
|
|
4
|
+
* Reads from OperationMetricsTracker and emits counter, histogram,
|
|
5
|
+
* and gauge metric entries for the MetricsManager pipeline.
|
|
6
|
+
*/
|
|
7
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
8
|
+
import { OperationMetricsTracker } from '../OperationMetricsTracker.js';
|
|
9
|
+
export declare class OperationMetricsCollector implements IMetricCollector {
|
|
10
|
+
private readonly tracker;
|
|
11
|
+
readonly name = "operation-metrics";
|
|
12
|
+
readonly description = "MCP-AQL operation counts, durations, and endpoint breakdown.";
|
|
13
|
+
constructor(tracker: OperationMetricsTracker);
|
|
14
|
+
collect(): MetricEntry[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=OperationMetricsCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationMetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/OperationMetricsCollector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,qBAAa,yBAA0B,YAAW,gBAAgB;IAIpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,WAAW,kEAAkE;gBAEzD,OAAO,EAAE,uBAAuB;IAE7D,OAAO,IAAI,WAAW,EAAE;CAyEzB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { OperationMetricsTracker } from '../OperationMetricsTracker.js';
|
|
2
|
+
export class OperationMetricsCollector {
|
|
3
|
+
tracker;
|
|
4
|
+
name = 'operation-metrics';
|
|
5
|
+
description = 'MCP-AQL operation counts, durations, and endpoint breakdown.';
|
|
6
|
+
constructor(tracker) {
|
|
7
|
+
this.tracker = tracker;
|
|
8
|
+
}
|
|
9
|
+
collect() {
|
|
10
|
+
try {
|
|
11
|
+
const m = this.tracker.getMetrics();
|
|
12
|
+
const pct = OperationMetricsTracker.percentiles(m.durations);
|
|
13
|
+
const entries = [
|
|
14
|
+
{
|
|
15
|
+
type: 'counter',
|
|
16
|
+
name: 'mcpaql.operations_total',
|
|
17
|
+
source: 'OperationMetricsTracker',
|
|
18
|
+
unit: 'operations',
|
|
19
|
+
description: 'Total MCP-AQL operations executed.',
|
|
20
|
+
value: m.totalOps,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'counter',
|
|
24
|
+
name: 'mcpaql.operations_failed_total',
|
|
25
|
+
source: 'OperationMetricsTracker',
|
|
26
|
+
unit: 'operations',
|
|
27
|
+
description: 'Total MCP-AQL operations that failed.',
|
|
28
|
+
value: m.failedOps,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'histogram',
|
|
32
|
+
name: 'mcpaql.duration',
|
|
33
|
+
source: 'OperationMetricsTracker',
|
|
34
|
+
unit: 'milliseconds',
|
|
35
|
+
description: 'MCP-AQL operation duration distribution.',
|
|
36
|
+
value: {
|
|
37
|
+
count: pct.count,
|
|
38
|
+
sum: pct.sum,
|
|
39
|
+
avg: pct.avg,
|
|
40
|
+
p50: pct.p50,
|
|
41
|
+
p95: pct.p95,
|
|
42
|
+
p99: pct.p99,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
// Per-endpoint gauges
|
|
47
|
+
for (const [endpoint, count] of m.byEndpoint) {
|
|
48
|
+
entries.push({
|
|
49
|
+
type: 'gauge',
|
|
50
|
+
name: 'mcpaql.by_endpoint',
|
|
51
|
+
source: 'OperationMetricsTracker',
|
|
52
|
+
unit: 'operations',
|
|
53
|
+
description: `Operations via ${endpoint} endpoint.`,
|
|
54
|
+
labels: { endpoint },
|
|
55
|
+
value: count,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Top 10 operations by count
|
|
59
|
+
const topOps = [...m.byOperation.entries()]
|
|
60
|
+
.sort((a, b) => b[1] - a[1])
|
|
61
|
+
.slice(0, 10);
|
|
62
|
+
for (const [operation, count] of topOps) {
|
|
63
|
+
entries.push({
|
|
64
|
+
type: 'gauge',
|
|
65
|
+
name: 'mcpaql.by_operation',
|
|
66
|
+
source: 'OperationMetricsTracker',
|
|
67
|
+
unit: 'operations',
|
|
68
|
+
description: `Count for operation: ${operation}.`,
|
|
69
|
+
labels: { operation },
|
|
70
|
+
value: count,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return entries;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uTWV0cmljc0NvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZXRyaWNzL2NvbGxlY3RvcnMvT3BlcmF0aW9uTWV0cmljc0NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxNQUFNLE9BQU8seUJBQXlCO0lBSVA7SUFIcEIsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0lBQzNCLFdBQVcsR0FBRyw4REFBOEQsQ0FBQztJQUV0RixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtJQUFHLENBQUM7SUFFakUsT0FBTztRQUNMLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3RCxNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLHlCQUF5QjtvQkFDL0IsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsb0NBQW9DO29CQUNqRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVE7aUJBQ2xCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLGdDQUFnQztvQkFDdEMsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVM7aUJBQ25CO2dCQUNEO29CQUNFLElBQUksRUFBRSxXQUFvQjtvQkFDMUIsSUFBSSxFQUFFLGlCQUFpQjtvQkFDdkIsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLGNBQXVCO29CQUM3QixXQUFXLEVBQUUsMENBQTBDO29CQUN2RCxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO3dCQUNoQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7d0JBQ1osR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO3dCQUNaLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRzt3QkFDWixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7d0JBQ1osR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLHNCQUFzQjtZQUN0QixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsa0JBQWtCLFFBQVEsWUFBWTtvQkFDbkQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFO29CQUNwQixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLE1BQU0sRUFBRSx5QkFBeUI7b0JBQ2pDLElBQUksRUFBRSxZQUFxQjtvQkFDM0IsV0FBVyxFQUFFLHdCQUF3QixTQUFTLEdBQUc7b0JBQ2pELE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRTtvQkFDckIsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RvciBmb3IgTUNQLUFRTCBvcGVyYXRpb24gbWV0cmljcy5cbiAqXG4gKiBSZWFkcyBmcm9tIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIGFuZCBlbWl0cyBjb3VudGVyLCBoaXN0b2dyYW0sXG4gKiBhbmQgZ2F1Z2UgbWV0cmljIGVudHJpZXMgZm9yIHRoZSBNZXRyaWNzTWFuYWdlciBwaXBlbGluZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uTWV0cmljc0NvbGxlY3RvciBpbXBsZW1lbnRzIElNZXRyaWNDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYW1lID0gJ29wZXJhdGlvbi1tZXRyaWNzJztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSAnTUNQLUFRTCBvcGVyYXRpb24gY291bnRzLCBkdXJhdGlvbnMsIGFuZCBlbmRwb2ludCBicmVha2Rvd24uJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYWNrZXI6IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyKSB7fVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLnRyYWNrZXIuZ2V0TWV0cmljcygpO1xuICAgICAgY29uc3QgcGN0ID0gT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIucGVyY2VudGlsZXMobS5kdXJhdGlvbnMpO1xuXG4gICAgICBjb25zdCBlbnRyaWVzOiBNZXRyaWNFbnRyeVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwub3BlcmF0aW9uc190b3RhbCcsXG4gICAgICAgICAgc291cmNlOiAnT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInLFxuICAgICAgICAgIHVuaXQ6ICdvcGVyYXRpb25zJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIE1DUC1BUUwgb3BlcmF0aW9ucyBleGVjdXRlZC4nLFxuICAgICAgICAgIHZhbHVlOiBtLnRvdGFsT3BzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwub3BlcmF0aW9uc19mYWlsZWRfdG90YWwnLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBmYWlsZWQuJyxcbiAgICAgICAgICB2YWx1ZTogbS5mYWlsZWRPcHMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaGlzdG9ncmFtJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnbWNwYXFsLmR1cmF0aW9uJyxcbiAgICAgICAgICBzb3VyY2U6ICdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicsXG4gICAgICAgICAgdW5pdDogJ21pbGxpc2Vjb25kcycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdNQ1AtQVFMIG9wZXJhdGlvbiBkdXJhdGlvbiBkaXN0cmlidXRpb24uJyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgY291bnQ6IHBjdC5jb3VudCxcbiAgICAgICAgICAgIHN1bTogcGN0LnN1bSxcbiAgICAgICAgICAgIGF2ZzogcGN0LmF2ZyxcbiAgICAgICAgICAgIHA1MDogcGN0LnA1MCxcbiAgICAgICAgICAgIHA5NTogcGN0LnA5NSxcbiAgICAgICAgICAgIHA5OTogcGN0LnA5OSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gUGVyLWVuZHBvaW50IGdhdWdlc1xuICAgICAgZm9yIChjb25zdCBbZW5kcG9pbnQsIGNvdW50XSBvZiBtLmJ5RW5kcG9pbnQpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwuYnlfZW5kcG9pbnQnLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBPcGVyYXRpb25zIHZpYSAke2VuZHBvaW50fSBlbmRwb2ludC5gLFxuICAgICAgICAgIGxhYmVsczogeyBlbmRwb2ludCB9LFxuICAgICAgICAgIHZhbHVlOiBjb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRvcCAxMCBvcGVyYXRpb25zIGJ5IGNvdW50XG4gICAgICBjb25zdCB0b3BPcHMgPSBbLi4ubS5ieU9wZXJhdGlvbi5lbnRyaWVzKCldXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzFdIC0gYVsxXSlcbiAgICAgICAgLnNsaWNlKDAsIDEwKTtcbiAgICAgIGZvciAoY29uc3QgW29wZXJhdGlvbiwgY291bnRdIG9mIHRvcE9wcykge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ21jcGFxbC5ieV9vcGVyYXRpb24nLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBDb3VudCBmb3Igb3BlcmF0aW9uOiAke29wZXJhdGlvbn0uYCxcbiAgICAgICAgICBsYWJlbHM6IHsgb3BlcmF0aW9uIH0sXG4gICAgICAgICAgdmFsdWU6IGNvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector for OperationalTelemetry enabled/disabled state.
|
|
3
|
+
*
|
|
4
|
+
* Emits a single gauge (1 = enabled, 0 = disabled) derived from
|
|
5
|
+
* `OperationalTelemetry.isEnabled()`, allowing monitoring systems to
|
|
6
|
+
* alert when telemetry is unexpectedly disabled.
|
|
7
|
+
*/
|
|
8
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
9
|
+
import type { OperationalTelemetry } from '../../telemetry/OperationalTelemetry.js';
|
|
10
|
+
export declare class OperationalTelemetryCollector implements IMetricCollector {
|
|
11
|
+
private readonly telemetry;
|
|
12
|
+
readonly name = "operational-telemetry";
|
|
13
|
+
readonly description = "Reports whether OperationalTelemetry is enabled (1) or disabled (0).";
|
|
14
|
+
constructor(telemetry: OperationalTelemetry);
|
|
15
|
+
collect(): MetricEntry[];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=OperationalTelemetryCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationalTelemetryCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/OperationalTelemetryCollector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAEpF,qBAAa,6BAA8B,YAAW,gBAAgB;IAIxD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,WAAW,0EAA0E;gBAEjE,SAAS,EAAE,oBAAoB;IAE5D,OAAO,IAAI,WAAW,EAAE;CAgBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class OperationalTelemetryCollector {
|
|
2
|
+
telemetry;
|
|
3
|
+
name = 'operational-telemetry';
|
|
4
|
+
description = 'Reports whether OperationalTelemetry is enabled (1) or disabled (0).';
|
|
5
|
+
constructor(telemetry) {
|
|
6
|
+
this.telemetry = telemetry;
|
|
7
|
+
}
|
|
8
|
+
collect() {
|
|
9
|
+
try {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
type: 'gauge',
|
|
13
|
+
name: 'telemetry.operational.enabled',
|
|
14
|
+
source: 'OperationalTelemetry',
|
|
15
|
+
unit: 'none',
|
|
16
|
+
description: 'Operational telemetry enabled state: 1 = enabled, 0 = disabled.',
|
|
17
|
+
value: this.telemetry.isEnabled() ? 1 : 0,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9jb2xsZWN0b3JzL09wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sT0FBTyw2QkFBNkI7SUFJWDtJQUhwQixJQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFDL0IsV0FBVyxHQUFHLHNFQUFzRSxDQUFDO0lBRTlGLFlBQTZCLFNBQStCO1FBQS9CLGNBQVMsR0FBVCxTQUFTLENBQXNCO0lBQUcsQ0FBQztJQUVoRSxPQUFPO1FBQ0wsSUFBSSxDQUFDO1lBQ0gsT0FBTztnQkFDTDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSwrQkFBK0I7b0JBQ3JDLE1BQU0sRUFBRSxzQkFBc0I7b0JBQzlCLElBQUksRUFBRSxNQUFlO29CQUNyQixXQUFXLEVBQUUsaUVBQWlFO29CQUM5RSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQzthQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0b3IgZm9yIE9wZXJhdGlvbmFsVGVsZW1ldHJ5IGVuYWJsZWQvZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogRW1pdHMgYSBzaW5nbGUgZ2F1Z2UgKDEgPSBlbmFibGVkLCAwID0gZGlzYWJsZWQpIGRlcml2ZWQgZnJvbVxuICogYE9wZXJhdGlvbmFsVGVsZW1ldHJ5LmlzRW5hYmxlZCgpYCwgYWxsb3dpbmcgbW9uaXRvcmluZyBzeXN0ZW1zIHRvXG4gKiBhbGVydCB3aGVuIHRlbGVtZXRyeSBpcyB1bmV4cGVjdGVkbHkgZGlzYWJsZWQuXG4gKi9cbmltcG9ydCB0eXBlIHsgSU1ldHJpY0NvbGxlY3RvciwgTWV0cmljRW50cnkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5IH0gZnJvbSAnLi4vLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzJztcblxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yIGltcGxlbWVudHMgSU1ldHJpY0NvbGxlY3RvciB7XG4gIHJlYWRvbmx5IG5hbWUgPSAnb3BlcmF0aW9uYWwtdGVsZW1ldHJ5JztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSAnUmVwb3J0cyB3aGV0aGVyIE9wZXJhdGlvbmFsVGVsZW1ldHJ5IGlzIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKS4nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGVsZW1ldHJ5OiBPcGVyYXRpb25hbFRlbGVtZXRyeSkge31cblxuICBjb2xsZWN0KCk6IE1ldHJpY0VudHJ5W10ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAndGVsZW1ldHJ5Lm9wZXJhdGlvbmFsLmVuYWJsZWQnLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbmFsVGVsZW1ldHJ5JyxcbiAgICAgICAgICB1bml0OiAnbm9uZScgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdPcGVyYXRpb25hbCB0ZWxlbWV0cnkgZW5hYmxlZCBzdGF0ZTogMSA9IGVuYWJsZWQsIDAgPSBkaXNhYmxlZC4nLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnRlbGVtZXRyeS5pc0VuYWJsZWQoKSA/IDEgOiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects search-performance and system-resource metrics from a PerformanceMonitor
|
|
3
|
+
* instance. Returns an empty array (never throws) when the source is unavailable.
|
|
4
|
+
*/
|
|
5
|
+
import type { IMetricCollector, MetricEntry } from '../types.js';
|
|
6
|
+
import type { PerformanceMonitor } from '../../utils/PerformanceMonitor.js';
|
|
7
|
+
export declare class PerformanceMonitorCollector implements IMetricCollector {
|
|
8
|
+
private readonly monitor;
|
|
9
|
+
readonly name = "performance-monitor";
|
|
10
|
+
readonly description = "Search performance timings, cache hit rate, and system memory/CPU from PerformanceMonitor";
|
|
11
|
+
constructor(monitor: PerformanceMonitor);
|
|
12
|
+
collect(): MetricEntry[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=PerformanceMonitorCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceMonitorCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/PerformanceMonitorCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAI5E,qBAAa,2BAA4B,YAAW,gBAAgB;IAKtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,WAAW,+FAC0E;gBAEjE,OAAO,EAAE,kBAAkB;IAExD,OAAO,IAAI,WAAW,EAAE;CAiIzB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects search-performance and system-resource metrics from a PerformanceMonitor
|
|
3
|
+
* instance. Returns an empty array (never throws) when the source is unavailable.
|
|
4
|
+
*/
|
|
5
|
+
const SOURCE = 'PerformanceMonitor';
|
|
6
|
+
export class PerformanceMonitorCollector {
|
|
7
|
+
monitor;
|
|
8
|
+
name = 'performance-monitor';
|
|
9
|
+
description = 'Search performance timings, cache hit rate, and system memory/CPU from PerformanceMonitor';
|
|
10
|
+
constructor(monitor) {
|
|
11
|
+
this.monitor = monitor;
|
|
12
|
+
}
|
|
13
|
+
collect() {
|
|
14
|
+
try {
|
|
15
|
+
const metrics = this.monitor.getMetrics();
|
|
16
|
+
const searchStats = this.monitor.getSearchStats();
|
|
17
|
+
const memStats = this.monitor.getMemoryStats();
|
|
18
|
+
const searchTimes = metrics.searchTimes ?? [];
|
|
19
|
+
const histCount = searchTimes.length;
|
|
20
|
+
const histSum = searchTimes.reduce((s, v) => s + v, 0);
|
|
21
|
+
const entries = [
|
|
22
|
+
{
|
|
23
|
+
type: 'counter',
|
|
24
|
+
name: 'performance.search.searches_total',
|
|
25
|
+
source: SOURCE,
|
|
26
|
+
unit: 'count',
|
|
27
|
+
description: 'Total number of searches performed',
|
|
28
|
+
value: searchStats.totalSearches,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'histogram',
|
|
32
|
+
name: 'performance.search.duration',
|
|
33
|
+
source: SOURCE,
|
|
34
|
+
unit: 'milliseconds',
|
|
35
|
+
description: 'Distribution of search durations',
|
|
36
|
+
value: {
|
|
37
|
+
count: histCount,
|
|
38
|
+
sum: histSum,
|
|
39
|
+
avg: searchStats.averageTime,
|
|
40
|
+
p50: searchStats.medianTime,
|
|
41
|
+
p95: searchStats.p95Time,
|
|
42
|
+
p99: searchStats.p99Time,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'counter',
|
|
47
|
+
name: 'performance.search.slow_query_count',
|
|
48
|
+
source: SOURCE,
|
|
49
|
+
unit: 'count',
|
|
50
|
+
description: 'Number of searches that exceeded the slow-query threshold',
|
|
51
|
+
value: searchStats.slowQueries,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'gauge',
|
|
55
|
+
name: 'performance.search.cache_hit_rate',
|
|
56
|
+
source: SOURCE,
|
|
57
|
+
unit: 'ratio',
|
|
58
|
+
description: 'Fraction of searches served from cache',
|
|
59
|
+
value: searchStats.cacheHitRate,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'gauge',
|
|
63
|
+
name: 'system.memory.heap_used_bytes',
|
|
64
|
+
source: SOURCE,
|
|
65
|
+
unit: 'bytes',
|
|
66
|
+
description: 'V8 heap used (bytes)',
|
|
67
|
+
value: memStats.currentUsage.heapUsed,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: 'gauge',
|
|
71
|
+
name: 'system.memory.heap_total_bytes',
|
|
72
|
+
source: SOURCE,
|
|
73
|
+
unit: 'bytes',
|
|
74
|
+
description: 'V8 heap total (bytes)',
|
|
75
|
+
value: memStats.currentUsage.heapTotal,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: 'gauge',
|
|
79
|
+
name: 'system.memory.rss_bytes',
|
|
80
|
+
source: SOURCE,
|
|
81
|
+
unit: 'bytes',
|
|
82
|
+
description: 'Process resident set size (bytes)',
|
|
83
|
+
value: memStats.currentUsage.rss,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'gauge',
|
|
87
|
+
name: 'system.memory.external_bytes',
|
|
88
|
+
source: SOURCE,
|
|
89
|
+
unit: 'bytes',
|
|
90
|
+
description: 'V8 external memory (bytes)',
|
|
91
|
+
value: memStats.currentUsage.external,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'gauge',
|
|
95
|
+
name: 'system.memory.growth_rate',
|
|
96
|
+
source: SOURCE,
|
|
97
|
+
unit: 'megabytes',
|
|
98
|
+
description: 'Heap growth rate (MB/s)',
|
|
99
|
+
value: memStats.growthRate,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'counter',
|
|
103
|
+
name: 'system.cpu.usage_seconds',
|
|
104
|
+
source: SOURCE,
|
|
105
|
+
unit: 'seconds',
|
|
106
|
+
description: 'CPU time consumed by the process (seconds)',
|
|
107
|
+
value: metrics.systemStats.cpuUsage,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'counter',
|
|
111
|
+
name: 'system.uptime_seconds',
|
|
112
|
+
source: SOURCE,
|
|
113
|
+
unit: 'seconds',
|
|
114
|
+
description: 'Process uptime (seconds)',
|
|
115
|
+
value: metrics.systemStats.uptime,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'gauge',
|
|
119
|
+
name: 'system.memory.free_bytes',
|
|
120
|
+
source: SOURCE,
|
|
121
|
+
unit: 'bytes',
|
|
122
|
+
description: 'System free memory (bytes)',
|
|
123
|
+
value: metrics.systemStats.freeMemory,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'gauge',
|
|
127
|
+
name: 'system.memory.total_bytes',
|
|
128
|
+
source: SOURCE,
|
|
129
|
+
unit: 'bytes',
|
|
130
|
+
description: 'System total memory (bytes)',
|
|
131
|
+
value: metrics.systemStats.totalMemory,
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
return entries;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvY29sbGVjdG9ycy9QZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBS0gsTUFBTSxNQUFNLEdBQUcsb0JBQTZCLENBQUM7QUFFN0MsTUFBTSxPQUFPLDJCQUEyQjtJQUtUO0lBSnBCLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUM3QixXQUFXLEdBQ2xCLDJGQUEyRixDQUFDO0lBRTlGLFlBQTZCLE9BQTJCO1FBQTNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO0lBQUcsQ0FBQztJQUU1RCxPQUFPO1FBQ0wsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFL0MsTUFBTSxXQUFXLEdBQWEsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDeEQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV2RCxNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLG1DQUFtQztvQkFDekMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsb0NBQW9DO29CQUNqRCxLQUFLLEVBQUUsV0FBVyxDQUFDLGFBQWE7aUJBQ2pDO2dCQUNEO29CQUNFLElBQUksRUFBRSxXQUFvQjtvQkFDMUIsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLGNBQXVCO29CQUM3QixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLEdBQUcsRUFBRSxPQUFPO3dCQUNaLEdBQUcsRUFBRSxXQUFXLENBQUMsV0FBVzt3QkFDNUIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxVQUFVO3dCQUMzQixHQUFHLEVBQUUsV0FBVyxDQUFDLE9BQU87d0JBQ3hCLEdBQUcsRUFBRSxXQUFXLENBQUMsT0FBTztxQkFDekI7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFNBQWtCO29CQUN4QixJQUFJLEVBQUUscUNBQXFDO29CQUMzQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSwyREFBMkQ7b0JBQ3hFLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVztpQkFDL0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsbUNBQW1DO29CQUN6QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSx3Q0FBd0M7b0JBQ3JELEtBQUssRUFBRSxXQUFXLENBQUMsWUFBWTtpQkFDaEM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsK0JBQStCO29CQUNyQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSxzQkFBc0I7b0JBQ25DLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVE7aUJBQ3RDO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLGdDQUFnQztvQkFDdEMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTO2lCQUN2QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSx5QkFBeUI7b0JBQy9CLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRztpQkFDakM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsOEJBQThCO29CQUNwQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSw0QkFBNEI7b0JBQ3pDLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVE7aUJBQ3RDO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLFdBQW9CO29CQUMxQixXQUFXLEVBQUUseUJBQXlCO29CQUN0QyxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVU7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLFNBQWtCO29CQUN4QixXQUFXLEVBQUUsNENBQTRDO29CQUN6RCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRO2lCQUNwQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsU0FBa0I7b0JBQ3hCLElBQUksRUFBRSx1QkFBdUI7b0JBQzdCLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTTtpQkFDbEM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLFdBQVcsRUFBRSw0QkFBNEI7b0JBQ3pDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVU7aUJBQ3RDO2dCQUNEO29CQUNFLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE9BQWdCO29CQUN0QixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2lCQUN2QzthQUNGLENBQUM7WUFFRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0cyBzZWFyY2gtcGVyZm9ybWFuY2UgYW5kIHN5c3RlbS1yZXNvdXJjZSBtZXRyaWNzIGZyb20gYSBQZXJmb3JtYW5jZU1vbml0b3JcbiAqIGluc3RhbmNlLiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IChuZXZlciB0aHJvd3MpIHdoZW4gdGhlIHNvdXJjZSBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElNZXRyaWNDb2xsZWN0b3IsIE1ldHJpY0VudHJ5IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tICcuLi8uLi91dGlscy9QZXJmb3JtYW5jZU1vbml0b3IuanMnO1xuXG5jb25zdCBTT1VSQ0UgPSAnUGVyZm9ybWFuY2VNb25pdG9yJyBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3RvciBpbXBsZW1lbnRzIElNZXRyaWNDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYW1lID0gJ3BlcmZvcm1hbmNlLW1vbml0b3InO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9XG4gICAgJ1NlYXJjaCBwZXJmb3JtYW5jZSB0aW1pbmdzLCBjYWNoZSBoaXQgcmF0ZSwgYW5kIHN5c3RlbSBtZW1vcnkvQ1BVIGZyb20gUGVyZm9ybWFuY2VNb25pdG9yJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG1vbml0b3I6IFBlcmZvcm1hbmNlTW9uaXRvcikge31cblxuICBjb2xsZWN0KCk6IE1ldHJpY0VudHJ5W10ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5tb25pdG9yLmdldE1ldHJpY3MoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFN0YXRzID0gdGhpcy5tb25pdG9yLmdldFNlYXJjaFN0YXRzKCk7XG4gICAgICBjb25zdCBtZW1TdGF0cyA9IHRoaXMubW9uaXRvci5nZXRNZW1vcnlTdGF0cygpO1xuXG4gICAgICBjb25zdCBzZWFyY2hUaW1lczogbnVtYmVyW10gPSBtZXRyaWNzLnNlYXJjaFRpbWVzID8/IFtdO1xuICAgICAgY29uc3QgaGlzdENvdW50ID0gc2VhcmNoVGltZXMubGVuZ3RoO1xuICAgICAgY29uc3QgaGlzdFN1bSA9IHNlYXJjaFRpbWVzLnJlZHVjZSgocywgdikgPT4gcyArIHYsIDApO1xuXG4gICAgICBjb25zdCBlbnRyaWVzOiBNZXRyaWNFbnRyeVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdwZXJmb3JtYW5jZS5zZWFyY2guc2VhcmNoZXNfdG90YWwnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBudW1iZXIgb2Ygc2VhcmNoZXMgcGVyZm9ybWVkJyxcbiAgICAgICAgICB2YWx1ZTogc2VhcmNoU3RhdHMudG90YWxTZWFyY2hlcyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdoaXN0b2dyYW0nIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdwZXJmb3JtYW5jZS5zZWFyY2guZHVyYXRpb24nLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdtaWxsaXNlY29uZHMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGlzdHJpYnV0aW9uIG9mIHNlYXJjaCBkdXJhdGlvbnMnLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBjb3VudDogaGlzdENvdW50LFxuICAgICAgICAgICAgc3VtOiBoaXN0U3VtLFxuICAgICAgICAgICAgYXZnOiBzZWFyY2hTdGF0cy5hdmVyYWdlVGltZSxcbiAgICAgICAgICAgIHA1MDogc2VhcmNoU3RhdHMubWVkaWFuVGltZSxcbiAgICAgICAgICAgIHA5NTogc2VhcmNoU3RhdHMucDk1VGltZSxcbiAgICAgICAgICAgIHA5OTogc2VhcmNoU3RhdHMucDk5VGltZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdwZXJmb3JtYW5jZS5zZWFyY2guc2xvd19xdWVyeV9jb3VudCcsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiBzZWFyY2hlcyB0aGF0IGV4Y2VlZGVkIHRoZSBzbG93LXF1ZXJ5IHRocmVzaG9sZCcsXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFN0YXRzLnNsb3dRdWVyaWVzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAncGVyZm9ybWFuY2Uuc2VhcmNoLmNhY2hlX2hpdF9yYXRlJyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAncmF0aW8nIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRnJhY3Rpb24gb2Ygc2VhcmNoZXMgc2VydmVkIGZyb20gY2FjaGUnLFxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hTdGF0cy5jYWNoZUhpdFJhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzeXN0ZW0ubWVtb3J5LmhlYXBfdXNlZF9ieXRlcycsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ2J5dGVzJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Y4IGhlYXAgdXNlZCAoYnl0ZXMpJyxcbiAgICAgICAgICB2YWx1ZTogbWVtU3RhdHMuY3VycmVudFVzYWdlLmhlYXBVc2VkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2dhdWdlJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnc3lzdGVtLm1lbW9yeS5oZWFwX3RvdGFsX2J5dGVzJyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAnYnl0ZXMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVjggaGVhcCB0b3RhbCAoYnl0ZXMpJyxcbiAgICAgICAgICB2YWx1ZTogbWVtU3RhdHMuY3VycmVudFVzYWdlLmhlYXBUb3RhbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3N5c3RlbS5tZW1vcnkucnNzX2J5dGVzJyxcbiAgICAgICAgICBzb3VyY2U6IFNPVVJDRSxcbiAgICAgICAgICB1bml0OiAnYnl0ZXMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUHJvY2VzcyByZXNpZGVudCBzZXQgc2l6ZSAoYnl0ZXMpJyxcbiAgICAgICAgICB2YWx1ZTogbWVtU3RhdHMuY3VycmVudFVzYWdlLnJzcyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3N5c3RlbS5tZW1vcnkuZXh0ZXJuYWxfYnl0ZXMnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdieXRlcycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdWOCBleHRlcm5hbCBtZW1vcnkgKGJ5dGVzKScsXG4gICAgICAgICAgdmFsdWU6IG1lbVN0YXRzLmN1cnJlbnRVc2FnZS5leHRlcm5hbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3N5c3RlbS5tZW1vcnkuZ3Jvd3RoX3JhdGUnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdtZWdhYnl0ZXMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGVhcCBncm93dGggcmF0ZSAoTUIvcyknLFxuICAgICAgICAgIHZhbHVlOiBtZW1TdGF0cy5ncm93dGhSYXRlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzeXN0ZW0uY3B1LnVzYWdlX3NlY29uZHMnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdzZWNvbmRzJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NQVSB0aW1lIGNvbnN1bWVkIGJ5IHRoZSBwcm9jZXNzIChzZWNvbmRzKScsXG4gICAgICAgICAgdmFsdWU6IG1ldHJpY3Muc3lzdGVtU3RhdHMuY3B1VXNhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnY291bnRlcicgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3N5c3RlbS51cHRpbWVfc2Vjb25kcycsXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgdW5pdDogJ3NlY29uZHMnIGFzIGNvbnN0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUHJvY2VzcyB1cHRpbWUgKHNlY29uZHMpJyxcbiAgICAgICAgICB2YWx1ZTogbWV0cmljcy5zeXN0ZW1TdGF0cy51cHRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdzeXN0ZW0ubWVtb3J5LmZyZWVfYnl0ZXMnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdieXRlcycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTeXN0ZW0gZnJlZSBtZW1vcnkgKGJ5dGVzKScsXG4gICAgICAgICAgdmFsdWU6IG1ldHJpY3Muc3lzdGVtU3RhdHMuZnJlZU1lbW9yeSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ3N5c3RlbS5tZW1vcnkudG90YWxfYnl0ZXMnLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIHVuaXQ6ICdieXRlcycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTeXN0ZW0gdG90YWwgbWVtb3J5IChieXRlcyknLFxuICAgICAgICAgIHZhbHVlOiBtZXRyaWNzLnN5c3RlbVN0YXRzLnRvdGFsTWVtb3J5LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
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 type { IMetricCollector, MetricEntry } from '../types.js';
|
|
7
|
+
interface SecurityReport {
|
|
8
|
+
totalEvents: number;
|
|
9
|
+
eventsBySeverity: Record<string, number>;
|
|
10
|
+
eventsByType: Record<string, number>;
|
|
11
|
+
recentCriticalEvents: unknown[];
|
|
12
|
+
}
|
|
13
|
+
export declare class SecurityMonitorCollector implements IMetricCollector {
|
|
14
|
+
readonly name = "security-monitor";
|
|
15
|
+
readonly description = "Total security events and per-severity/per-type breakdowns from SecurityMonitor";
|
|
16
|
+
private readonly reportFn;
|
|
17
|
+
constructor(reportFn?: () => SecurityReport);
|
|
18
|
+
collect(): MetricEntry[];
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=SecurityMonitorCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityMonitorCollector.d.ts","sourceRoot":"","sources":["../../../src/metrics/collectors/SecurityMonitorCollector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjE,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,oBAAoB,EAAE,OAAO,EAAE,CAAC;CACjC;AAED,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,qFACgE;IAEpF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,QAAQ,CAAC,EAAE,MAAM,cAAc;IAI3C,OAAO,IAAI,WAAW,EAAE;CA2CzB"}
|