beddel 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +297 -0
- package/dist/agents/agentRegistry.d.ts +68 -0
- package/dist/agents/agentRegistry.d.ts.map +1 -0
- package/dist/agents/agentRegistry.js +222 -0
- package/dist/agents/agentRegistry.js.map +1 -0
- package/dist/agents/formatter-agent.d.ts +10 -0
- package/dist/agents/formatter-agent.d.ts.map +1 -0
- package/dist/agents/formatter-agent.js +49 -0
- package/dist/agents/formatter-agent.js.map +1 -0
- package/dist/agents/genkit-agent.d.ts +12 -0
- package/dist/agents/genkit-agent.d.ts.map +1 -0
- package/dist/agents/genkit-agent.js +119 -0
- package/dist/agents/genkit-agent.js.map +1 -0
- package/dist/agents/i18n-messages.d.ts +17 -0
- package/dist/agents/i18n-messages.d.ts.map +1 -0
- package/dist/agents/i18n-messages.js +92 -0
- package/dist/agents/i18n-messages.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +26 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/pipeline.d.ts +15 -0
- package/dist/agents/pipeline.d.ts.map +1 -0
- package/dist/agents/pipeline.js +45 -0
- package/dist/agents/pipeline.js.map +1 -0
- package/dist/agents/schema-factory.d.ts +40 -0
- package/dist/agents/schema-factory.d.ts.map +1 -0
- package/dist/agents/schema-factory.js +121 -0
- package/dist/agents/schema-factory.js.map +1 -0
- package/dist/agents/translation-validators.d.ts +26 -0
- package/dist/agents/translation-validators.d.ts.map +1 -0
- package/dist/agents/translation-validators.js +77 -0
- package/dist/agents/translation-validators.js.map +1 -0
- package/dist/agents/translator-agents.d.ts +184 -0
- package/dist/agents/translator-agents.d.ts.map +1 -0
- package/dist/agents/translator-agents.js +613 -0
- package/dist/agents/translator-agents.js.map +1 -0
- package/dist/agents/types/translation.types.d.ts +100 -0
- package/dist/agents/types/translation.types.d.ts.map +1 -0
- package/dist/agents/types/translation.types.js +3 -0
- package/dist/agents/types/translation.types.js.map +1 -0
- package/dist/agents/validator-agent.d.ts +42 -0
- package/dist/agents/validator-agent.d.ts.map +1 -0
- package/dist/agents/validator-agent.js +122 -0
- package/dist/agents/validator-agent.js.map +1 -0
- package/dist/audit/auditTrail.d.ts +55 -0
- package/dist/audit/auditTrail.d.ts.map +1 -0
- package/dist/audit/auditTrail.js +93 -0
- package/dist/audit/auditTrail.js.map +1 -0
- package/dist/compliance/gdprEngine.d.ts +44 -0
- package/dist/compliance/gdprEngine.d.ts.map +1 -0
- package/dist/compliance/gdprEngine.js +178 -0
- package/dist/compliance/gdprEngine.js.map +1 -0
- package/dist/compliance/lgpdEngine.d.ts +51 -0
- package/dist/compliance/lgpdEngine.d.ts.map +1 -0
- package/dist/compliance/lgpdEngine.js +221 -0
- package/dist/compliance/lgpdEngine.js.map +1 -0
- package/dist/config.d.ts +78 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +17 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/firebase/tenantManager.d.ts +84 -0
- package/dist/firebase/tenantManager.d.ts.map +1 -0
- package/dist/firebase/tenantManager.js +378 -0
- package/dist/firebase/tenantManager.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/secure-yaml-runtime.d.ts +68 -0
- package/dist/integration/secure-yaml-runtime.d.ts.map +1 -0
- package/dist/integration/secure-yaml-runtime.js +245 -0
- package/dist/integration/secure-yaml-runtime.js.map +1 -0
- package/dist/parser/secure-yaml-parser.d.ts +62 -0
- package/dist/parser/secure-yaml-parser.d.ts.map +1 -0
- package/dist/parser/secure-yaml-parser.js +234 -0
- package/dist/parser/secure-yaml-parser.js.map +1 -0
- package/dist/performance/autoscaling.d.ts +100 -0
- package/dist/performance/autoscaling.d.ts.map +1 -0
- package/dist/performance/autoscaling.js +339 -0
- package/dist/performance/autoscaling.js.map +1 -0
- package/dist/performance/benchmark.d.ts +104 -0
- package/dist/performance/benchmark.d.ts.map +1 -0
- package/dist/performance/benchmark.js +514 -0
- package/dist/performance/benchmark.js.map +1 -0
- package/dist/performance/index.d.ts +14 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +35 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/performance/monitor.d.ts +126 -0
- package/dist/performance/monitor.d.ts.map +1 -0
- package/dist/performance/monitor.js +324 -0
- package/dist/performance/monitor.js.map +1 -0
- package/dist/performance/streaming.d.ts +82 -0
- package/dist/performance/streaming.d.ts.map +1 -0
- package/dist/performance/streaming.js +287 -0
- package/dist/performance/streaming.js.map +1 -0
- package/dist/runtime/audit.d.ts +240 -0
- package/dist/runtime/audit.d.ts.map +1 -0
- package/dist/runtime/audit.js +641 -0
- package/dist/runtime/audit.js.map +1 -0
- package/dist/runtime/declarativeAgentRuntime.d.ts +123 -0
- package/dist/runtime/declarativeAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/declarativeAgentRuntime.js +576 -0
- package/dist/runtime/declarativeAgentRuntime.js.map +1 -0
- package/dist/runtime/isolatedRuntime.d.ts +119 -0
- package/dist/runtime/isolatedRuntime.d.ts.map +1 -0
- package/dist/runtime/isolatedRuntime.js +425 -0
- package/dist/runtime/isolatedRuntime.js.map +1 -0
- package/dist/runtime/schemaCompiler.d.ts +35 -0
- package/dist/runtime/schemaCompiler.d.ts.map +1 -0
- package/dist/runtime/schemaCompiler.js +151 -0
- package/dist/runtime/schemaCompiler.js.map +1 -0
- package/dist/runtime/simpleRuntime.d.ts +57 -0
- package/dist/runtime/simpleRuntime.d.ts.map +1 -0
- package/dist/runtime/simpleRuntime.js +187 -0
- package/dist/runtime/simpleRuntime.js.map +1 -0
- package/dist/security/dashboard.d.ts +89 -0
- package/dist/security/dashboard.d.ts.map +1 -0
- package/dist/security/dashboard.js +300 -0
- package/dist/security/dashboard.js.map +1 -0
- package/dist/security/hardening.d.ts +130 -0
- package/dist/security/hardening.d.ts.map +1 -0
- package/dist/security/hardening.js +414 -0
- package/dist/security/hardening.js.map +1 -0
- package/dist/security/index.d.ts +128 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +353 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/monitor.d.ts +88 -0
- package/dist/security/monitor.d.ts.map +1 -0
- package/dist/security/monitor.js +356 -0
- package/dist/security/monitor.js.map +1 -0
- package/dist/security/scanner.d.ts +104 -0
- package/dist/security/scanner.d.ts.map +1 -0
- package/dist/security/scanner.js +298 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/security/score.d.ts +150 -0
- package/dist/security/score.d.ts.map +1 -0
- package/dist/security/score.js +983 -0
- package/dist/security/score.js.map +1 -0
- package/dist/security/test-security.d.ts +22 -0
- package/dist/security/test-security.d.ts.map +1 -0
- package/dist/security/test-security.js +154 -0
- package/dist/security/test-security.js.map +1 -0
- package/dist/security/threatDetector.d.ts +39 -0
- package/dist/security/threatDetector.d.ts.map +1 -0
- package/dist/security/threatDetector.js +354 -0
- package/dist/security/threatDetector.js.map +1 -0
- package/dist/security/validation.d.ts +69 -0
- package/dist/security/validation.d.ts.map +1 -0
- package/dist/security/validation.js +286 -0
- package/dist/security/validation.js.map +1 -0
- package/dist/server/api/clientsRoute.d.ts +9 -0
- package/dist/server/api/clientsRoute.d.ts.map +1 -0
- package/dist/server/api/clientsRoute.js +71 -0
- package/dist/server/api/clientsRoute.js.map +1 -0
- package/dist/server/api/endpointsRoute.d.ts +8 -0
- package/dist/server/api/endpointsRoute.d.ts.map +1 -0
- package/dist/server/api/endpointsRoute.js +76 -0
- package/dist/server/api/endpointsRoute.js.map +1 -0
- package/dist/server/api/graphql.d.ts +9 -0
- package/dist/server/api/graphql.d.ts.map +1 -0
- package/dist/server/api/graphql.js +180 -0
- package/dist/server/api/graphql.js.map +1 -0
- package/dist/server/errors.d.ts +19 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +42 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +24 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/kvStore.d.ts +27 -0
- package/dist/server/kvStore.d.ts.map +1 -0
- package/dist/server/kvStore.js +128 -0
- package/dist/server/kvStore.js.map +1 -0
- package/dist/server/runtimeSecurity.d.ts +28 -0
- package/dist/server/runtimeSecurity.d.ts.map +1 -0
- package/dist/server/runtimeSecurity.js +85 -0
- package/dist/server/runtimeSecurity.js.map +1 -0
- package/dist/server/types.d.ts +53 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +8 -0
- package/dist/server/types.js.map +1 -0
- package/dist/types/executionContext.d.ts +16 -0
- package/dist/types/executionContext.d.ts.map +1 -0
- package/dist/types/executionContext.js +3 -0
- package/dist/types/executionContext.js.map +1 -0
- package/package.json +77 -0
- package/src/agents/agentRegistry.ts +272 -0
- package/src/agents/image-agent.yaml +86 -0
- package/src/agents/joker-agent.yaml +47 -0
- package/src/agents/translator-agent.yaml +80 -0
- package/src/audit/auditTrail.ts +134 -0
- package/src/compliance/gdprEngine.ts +209 -0
- package/src/compliance/lgpdEngine.ts +268 -0
- package/src/config.ts +179 -0
- package/src/errors.ts +35 -0
- package/src/firebase/tenantManager.ts +443 -0
- package/src/index.ts +125 -0
- package/src/integration/secure-yaml-runtime.ts +341 -0
- package/src/parser/secure-yaml-parser.ts +273 -0
- package/src/performance/autoscaling.ts +495 -0
- package/src/performance/benchmark.ts +644 -0
- package/src/performance/index.ts +34 -0
- package/src/performance/monitor.ts +469 -0
- package/src/performance/streaming.ts +317 -0
- package/src/runtime/audit.ts +907 -0
- package/src/runtime/declarativeAgentRuntime.ts +836 -0
- package/src/runtime/isolatedRuntime.ts +572 -0
- package/src/runtime/schemaCompiler.ts +228 -0
- package/src/runtime/simpleRuntime.ts +201 -0
- package/src/security/dashboard.ts +462 -0
- package/src/security/hardening.ts +560 -0
- package/src/security/index.ts +439 -0
- package/src/security/monitor.ts +490 -0
- package/src/security/scanner.ts +368 -0
- package/src/security/score.ts +1138 -0
- package/src/security/threatDetector.ts +481 -0
- package/src/security/validation.ts +365 -0
- package/src/server/api/clientsRoute.ts +92 -0
- package/src/server/api/endpointsRoute.ts +97 -0
- package/src/server/api/graphql.ts +249 -0
- package/src/server/errors.ts +38 -0
- package/src/server/index.ts +6 -0
- package/src/server/kvStore.ts +152 -0
- package/src/server/runtimeSecurity.ts +102 -0
- package/src/server/types.ts +60 -0
- package/src/types/executionContext.ts +16 -0
- package/tools/seed.ts +365 -0
- package/tools/test-endpoints.ts +174 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
export interface PerformanceMetric {
|
|
2
|
+
metric: string;
|
|
3
|
+
value: number;
|
|
4
|
+
timestamp: Date;
|
|
5
|
+
executionId: string;
|
|
6
|
+
tenantId?: string;
|
|
7
|
+
context?: any;
|
|
8
|
+
}
|
|
9
|
+
export interface PerformanceSnapshot {
|
|
10
|
+
timestamp: Date;
|
|
11
|
+
metrics: Record<string, number[]>;
|
|
12
|
+
averages: Record<string, number>;
|
|
13
|
+
violations: Violation[];
|
|
14
|
+
recommendations: Recommendation[];
|
|
15
|
+
}
|
|
16
|
+
export interface Violation {
|
|
17
|
+
metric: string;
|
|
18
|
+
value: number;
|
|
19
|
+
target: number;
|
|
20
|
+
severity: "warning" | "critical";
|
|
21
|
+
timestamp: Date;
|
|
22
|
+
executionId: string;
|
|
23
|
+
}
|
|
24
|
+
export interface Recommendation {
|
|
25
|
+
type: "performance" | "memory" | "security" | "scaling";
|
|
26
|
+
priority: "high" | "medium" | "low";
|
|
27
|
+
description: string;
|
|
28
|
+
action: string;
|
|
29
|
+
estimatedImpact: number;
|
|
30
|
+
}
|
|
31
|
+
export interface BenchmarkResult {
|
|
32
|
+
label: string;
|
|
33
|
+
iterations: number;
|
|
34
|
+
averageTime: number;
|
|
35
|
+
minTime: number;
|
|
36
|
+
maxTime: number;
|
|
37
|
+
payloadSize?: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class PerformanceMonitor {
|
|
40
|
+
private metrics;
|
|
41
|
+
private violations;
|
|
42
|
+
private recommendations;
|
|
43
|
+
private readonly retentionPeriod;
|
|
44
|
+
private readonly alertThreshold;
|
|
45
|
+
private readonly criticalThreshold;
|
|
46
|
+
constructor();
|
|
47
|
+
/**
|
|
48
|
+
* Record a performance metric
|
|
49
|
+
*/
|
|
50
|
+
recordMetric(metric: PerformanceMetric): void;
|
|
51
|
+
/**
|
|
52
|
+
* Record execution performance metrics
|
|
53
|
+
*/
|
|
54
|
+
recordExecution(executionId: string, executionTime: number, memoryUsed: number, tenantId?: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Simple benchmarking helper so downstream modules can compare strategies.
|
|
57
|
+
*/
|
|
58
|
+
benchmark<T>(fn: () => Promise<T> | T, label: string, iterations?: number, payloadSize?: number): Promise<BenchmarkResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Check for performance violations
|
|
61
|
+
*/
|
|
62
|
+
private checkViolation;
|
|
63
|
+
/**
|
|
64
|
+
* Log violations for monitoring
|
|
65
|
+
*/
|
|
66
|
+
private logViolation;
|
|
67
|
+
/**
|
|
68
|
+
* Generate performance recommendations
|
|
69
|
+
*/
|
|
70
|
+
private generateRecommendations;
|
|
71
|
+
/**
|
|
72
|
+
* Get current performance snapshot
|
|
73
|
+
*/
|
|
74
|
+
getSnapshot(): PerformanceSnapshot;
|
|
75
|
+
/**
|
|
76
|
+
* Get performance statistics for a specific period
|
|
77
|
+
*/
|
|
78
|
+
getStats(metric: string, period?: number): {
|
|
79
|
+
average: number;
|
|
80
|
+
min: number;
|
|
81
|
+
max: number;
|
|
82
|
+
count: number;
|
|
83
|
+
violations: number;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Check if performance is within acceptable ranges
|
|
87
|
+
*/
|
|
88
|
+
isPerformanceHealthy(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Get performance alerts
|
|
91
|
+
*/
|
|
92
|
+
getAlerts(): {
|
|
93
|
+
warnings: Violation[];
|
|
94
|
+
criticals: Violation[];
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Cleanup metrics older than retention period
|
|
98
|
+
*/
|
|
99
|
+
private cleanupOldMetrics;
|
|
100
|
+
/**
|
|
101
|
+
* Start periodic cleanup interval
|
|
102
|
+
*/
|
|
103
|
+
private startCleanupInterval;
|
|
104
|
+
/**
|
|
105
|
+
* Get performance summary
|
|
106
|
+
*/
|
|
107
|
+
getPerformanceSummary(): {
|
|
108
|
+
overall: "excellent" | "good" | "warning" | "critical";
|
|
109
|
+
executionTime: number;
|
|
110
|
+
memoryUsage: number;
|
|
111
|
+
successRate: number;
|
|
112
|
+
alerts: number;
|
|
113
|
+
recommendations: number;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Dump performance data for analysis
|
|
117
|
+
*/
|
|
118
|
+
dumpData(): string;
|
|
119
|
+
/**
|
|
120
|
+
* Dispose of monitor resources
|
|
121
|
+
*/
|
|
122
|
+
dispose(): void;
|
|
123
|
+
}
|
|
124
|
+
export declare const performanceMonitor: PerformanceMonitor;
|
|
125
|
+
export default PerformanceMonitor;
|
|
126
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/performance/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.performanceMonitor = exports.PerformanceMonitor = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Performance Monitor - Execution Performance Tracking
|
|
6
|
+
* Monitors execution performance with <50ms target and memory tracking
|
|
7
|
+
*/
|
|
8
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
class PerformanceMonitor {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.metrics = new Map();
|
|
13
|
+
this.violations = [];
|
|
14
|
+
this.recommendations = [];
|
|
15
|
+
this.retentionPeriod = 60 * 60 * 1000; // 1 hour
|
|
16
|
+
this.alertThreshold = 0.8; // 80% of target
|
|
17
|
+
this.criticalThreshold = 1.5; // 150% of target
|
|
18
|
+
this.startCleanupInterval();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Record a performance metric
|
|
22
|
+
*/
|
|
23
|
+
recordMetric(metric) {
|
|
24
|
+
if (!this.metrics.has(metric.metric)) {
|
|
25
|
+
this.metrics.set(metric.metric, []);
|
|
26
|
+
}
|
|
27
|
+
const metrics = this.metrics.get(metric.metric);
|
|
28
|
+
metrics.push(metric);
|
|
29
|
+
// Check for violations
|
|
30
|
+
const target = config_1.performanceTargets.find((t) => t.metric === metric.metric);
|
|
31
|
+
if (target) {
|
|
32
|
+
const violation = this.checkViolation(metric, target);
|
|
33
|
+
if (violation) {
|
|
34
|
+
this.violations.push(violation);
|
|
35
|
+
this.logViolation(violation);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Keep only metrics within retention period
|
|
39
|
+
this.cleanupOldMetrics(metric.metric, this.retentionPeriod);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Record execution performance metrics
|
|
43
|
+
*/
|
|
44
|
+
recordExecution(executionId, executionTime, memoryUsed, tenantId) {
|
|
45
|
+
const timestamp = new Date();
|
|
46
|
+
// Record execution time
|
|
47
|
+
this.recordMetric({
|
|
48
|
+
metric: "executionTime",
|
|
49
|
+
value: executionTime,
|
|
50
|
+
timestamp,
|
|
51
|
+
executionId,
|
|
52
|
+
tenantId,
|
|
53
|
+
});
|
|
54
|
+
// Record memory usage
|
|
55
|
+
this.recordMetric({
|
|
56
|
+
metric: "memoryUsage",
|
|
57
|
+
value: memoryUsed,
|
|
58
|
+
timestamp,
|
|
59
|
+
executionId,
|
|
60
|
+
tenantId,
|
|
61
|
+
});
|
|
62
|
+
// Generate recommendations based on metrics
|
|
63
|
+
this.generateRecommendations(executionTime, memoryUsed, tenantId);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Simple benchmarking helper so downstream modules can compare strategies.
|
|
67
|
+
*/
|
|
68
|
+
async benchmark(fn, label, iterations = 1, payloadSize) {
|
|
69
|
+
if (iterations < 1) {
|
|
70
|
+
throw new Error("Benchmark iterations must be >= 1");
|
|
71
|
+
}
|
|
72
|
+
const samples = [];
|
|
73
|
+
for (let i = 0; i < iterations; i++) {
|
|
74
|
+
const start = node_perf_hooks_1.performance.now();
|
|
75
|
+
await Promise.resolve(fn());
|
|
76
|
+
const duration = node_perf_hooks_1.performance.now() - start;
|
|
77
|
+
samples.push(duration);
|
|
78
|
+
this.recordMetric({
|
|
79
|
+
metric: "benchmark",
|
|
80
|
+
value: duration,
|
|
81
|
+
timestamp: new Date(),
|
|
82
|
+
executionId: `${label}-${i}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const averageTime = samples.reduce((total, value) => total + value, 0) / samples.length;
|
|
86
|
+
return {
|
|
87
|
+
label,
|
|
88
|
+
iterations,
|
|
89
|
+
averageTime,
|
|
90
|
+
minTime: Math.min(...samples),
|
|
91
|
+
maxTime: Math.max(...samples),
|
|
92
|
+
payloadSize,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check for performance violations
|
|
97
|
+
*/
|
|
98
|
+
checkViolation(metric, target) {
|
|
99
|
+
const threshold = target.threshold;
|
|
100
|
+
const isViolation = metric.value > threshold;
|
|
101
|
+
if (!isViolation)
|
|
102
|
+
return null;
|
|
103
|
+
const severity = metric.value > target.target * this.criticalThreshold
|
|
104
|
+
? "critical"
|
|
105
|
+
: "warning";
|
|
106
|
+
return {
|
|
107
|
+
metric: metric.metric,
|
|
108
|
+
value: metric.value,
|
|
109
|
+
target: target.target,
|
|
110
|
+
severity,
|
|
111
|
+
timestamp: metric.timestamp,
|
|
112
|
+
executionId: metric.executionId,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Log violations for monitoring
|
|
117
|
+
*/
|
|
118
|
+
logViolation(violation) {
|
|
119
|
+
const message = `[PERFORMANCE_${violation.severity.toUpperCase()}] ${violation.metric}: ${violation.value} ${config_1.performanceTargets
|
|
120
|
+
.find((t) => t.metric === violation.metric)
|
|
121
|
+
?.unit?.toLowerCase()} (target: ${violation.target}) - Execution ID: ${violation.executionId}`;
|
|
122
|
+
console.log(`[${violation.timestamp.toISOString()}] ${message}`);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate performance recommendations
|
|
126
|
+
*/
|
|
127
|
+
generateRecommendations(executionTime, memoryUsed, tenantId) {
|
|
128
|
+
const executionTimeTarget = config_1.performanceTargets.find((t) => t.metric === "executionTime")?.target ||
|
|
129
|
+
50;
|
|
130
|
+
const memoryTarget = config_1.performanceTargets.find((t) => t.metric === "memoryUsage")?.target || 2;
|
|
131
|
+
// Execution time recommendations
|
|
132
|
+
if (executionTime > executionTimeTarget * 1.2) {
|
|
133
|
+
this.recommendations.push({
|
|
134
|
+
type: "performance",
|
|
135
|
+
priority: "high",
|
|
136
|
+
description: `Execution time ${executionTime}ms exceeds target by ${(((executionTime - executionTimeTarget) / executionTimeTarget) *
|
|
137
|
+
100).toFixed(1)}%`,
|
|
138
|
+
action: "Consider optimizing code complexity or splitting execution",
|
|
139
|
+
estimatedImpact: -30, // 30% improvement
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Memory usage recommendations
|
|
143
|
+
if (memoryUsed > memoryTarget * 1.5) {
|
|
144
|
+
this.recommendations.push({
|
|
145
|
+
type: "memory",
|
|
146
|
+
priority: "medium",
|
|
147
|
+
description: `Memory usage ${memoryUsed}MB exceeds target by ${(((memoryUsed - memoryTarget) / memoryTarget) *
|
|
148
|
+
100).toFixed(1)}%`,
|
|
149
|
+
action: "Review memory allocation patterns and object cleanup",
|
|
150
|
+
estimatedImpact: -25,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Pool scaling recommendations
|
|
154
|
+
if (executionTime > executionTimeTarget * 1.5) {
|
|
155
|
+
this.recommendations.push({
|
|
156
|
+
type: "scaling",
|
|
157
|
+
priority: "medium",
|
|
158
|
+
description: "Pool may need scaling due to high execution times",
|
|
159
|
+
action: "Consider increasing pool size or optimizing isolation setup",
|
|
160
|
+
estimatedImpact: -20,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get current performance snapshot
|
|
166
|
+
*/
|
|
167
|
+
getSnapshot() {
|
|
168
|
+
const snapshot = {
|
|
169
|
+
timestamp: new Date(),
|
|
170
|
+
metrics: {},
|
|
171
|
+
averages: {},
|
|
172
|
+
violations: [...this.violations],
|
|
173
|
+
recommendations: [...this.recommendations],
|
|
174
|
+
};
|
|
175
|
+
// Calculate averages for each metric
|
|
176
|
+
for (const target of config_1.performanceTargets) {
|
|
177
|
+
const metrics = this.metrics.get(target.metric) || [];
|
|
178
|
+
if (metrics.length > 0) {
|
|
179
|
+
const values = metrics.map((m) => m.value);
|
|
180
|
+
const average = values.reduce((a, b) => a + b, 0) / values.length;
|
|
181
|
+
snapshot.metrics[target.metric] = values;
|
|
182
|
+
snapshot.averages[target.metric] = Math.round(average * 100) / 100;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return snapshot;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get performance statistics for a specific period
|
|
189
|
+
*/
|
|
190
|
+
getStats(metric, period = 5 * 60 * 1000) {
|
|
191
|
+
const metrics = this.metrics.get(metric) || [];
|
|
192
|
+
const cutoff = new Date(Date.now() - period);
|
|
193
|
+
const recentMetrics = metrics.filter((m) => m.timestamp >= cutoff);
|
|
194
|
+
if (recentMetrics.length === 0) {
|
|
195
|
+
return {
|
|
196
|
+
average: 0,
|
|
197
|
+
min: 0,
|
|
198
|
+
max: 0,
|
|
199
|
+
count: 0,
|
|
200
|
+
violations: 0,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const values = recentMetrics.map((m) => m.value);
|
|
204
|
+
const target = config_1.performanceTargets.find((t) => t.metric === metric);
|
|
205
|
+
return {
|
|
206
|
+
average: values.reduce((a, b) => a + b, 0) / recentMetrics.length,
|
|
207
|
+
min: Math.min(...values),
|
|
208
|
+
max: Math.max(...values),
|
|
209
|
+
count: recentMetrics.length,
|
|
210
|
+
violations: this.violations.filter((v) => {
|
|
211
|
+
return (v.metric === metric &&
|
|
212
|
+
v.timestamp >= cutoff &&
|
|
213
|
+
v.value > (target?.target || 0));
|
|
214
|
+
}).length,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if performance is within acceptable ranges
|
|
219
|
+
*/
|
|
220
|
+
isPerformanceHealthy() {
|
|
221
|
+
const snapshot = this.getSnapshot();
|
|
222
|
+
// Check if any critical violations in last 5 minutes
|
|
223
|
+
const recentViolations = this.violations.filter((v) => v.timestamp >= new Date(Date.now() - 5 * 60 * 1000) &&
|
|
224
|
+
v.severity === "critical");
|
|
225
|
+
if (recentViolations.length > 3) {
|
|
226
|
+
return false; // More than 3 critical violations
|
|
227
|
+
}
|
|
228
|
+
// Check if averages are within acceptable ranges
|
|
229
|
+
for (const target of config_1.performanceTargets) {
|
|
230
|
+
const average = snapshot.averages[target.metric];
|
|
231
|
+
if (average && average > target.target * this.alertThreshold) {
|
|
232
|
+
return false; // Performance target exceeded
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get performance alerts
|
|
239
|
+
*/
|
|
240
|
+
getAlerts() {
|
|
241
|
+
const now = new Date();
|
|
242
|
+
const recentViolations = this.violations.filter((v) => v.timestamp >= new Date(now.getTime() - 15 * 60 * 1000) // Last 15 minutes
|
|
243
|
+
);
|
|
244
|
+
return {
|
|
245
|
+
warnings: recentViolations.filter((v) => v.severity === "warning"),
|
|
246
|
+
criticals: recentViolations.filter((v) => v.severity === "critical"),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Cleanup metrics older than retention period
|
|
251
|
+
*/
|
|
252
|
+
cleanupOldMetrics(metric, maxAge) {
|
|
253
|
+
const metrics = this.metrics.get(metric) || [];
|
|
254
|
+
const cutoff = new Date(Date.now() - maxAge);
|
|
255
|
+
const filteredMetrics = metrics.filter((m) => m.timestamp >= cutoff);
|
|
256
|
+
this.metrics.set(metric, filteredMetrics);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Start periodic cleanup interval
|
|
260
|
+
*/
|
|
261
|
+
startCleanupInterval() {
|
|
262
|
+
setInterval(() => {
|
|
263
|
+
for (const [metric] of this.metrics) {
|
|
264
|
+
this.cleanupOldMetrics(metric, this.retentionPeriod);
|
|
265
|
+
}
|
|
266
|
+
// Remove old violations
|
|
267
|
+
const cutoff = new Date(Date.now() - this.retentionPeriod);
|
|
268
|
+
this.violations = this.violations.filter((v) => v.timestamp >= cutoff);
|
|
269
|
+
// Remove old recommendations
|
|
270
|
+
if (this.recommendations.length > 100) {
|
|
271
|
+
this.recommendations = this.recommendations.slice(-100);
|
|
272
|
+
}
|
|
273
|
+
}, this.retentionPeriod / 2);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get performance summary
|
|
277
|
+
*/
|
|
278
|
+
getPerformanceSummary() {
|
|
279
|
+
const snapshot = this.getSnapshot();
|
|
280
|
+
const alerts = this.getAlerts();
|
|
281
|
+
// Calculate overall performance rating
|
|
282
|
+
let overall = "excellent";
|
|
283
|
+
if (alerts.criticals.length > 0)
|
|
284
|
+
overall = "critical";
|
|
285
|
+
else if (alerts.warnings.length > 3)
|
|
286
|
+
overall = "warning";
|
|
287
|
+
else if (alerts.warnings.length > 0)
|
|
288
|
+
overall = "good";
|
|
289
|
+
return {
|
|
290
|
+
overall,
|
|
291
|
+
executionTime: snapshot.averages["executionTime"] || 0,
|
|
292
|
+
memoryUsage: snapshot.averages["memoryUsage"] || 0,
|
|
293
|
+
successRate: snapshot.averages["successRate"] || 99.9,
|
|
294
|
+
alerts: alerts.warnings.length + alerts.criticals.length,
|
|
295
|
+
recommendations: this.recommendations.length,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Dump performance data for analysis
|
|
300
|
+
*/
|
|
301
|
+
dumpData() {
|
|
302
|
+
const snapshot = this.getSnapshot();
|
|
303
|
+
const summary = this.getPerformanceSummary();
|
|
304
|
+
return JSON.stringify({
|
|
305
|
+
snapshot,
|
|
306
|
+
summary,
|
|
307
|
+
violations: this.violations.slice(-50), // Last 50 violations
|
|
308
|
+
recommendations: this.recommendations.slice(-20), // Last 20 recommendations
|
|
309
|
+
}, null, 2);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Dispose of monitor resources
|
|
313
|
+
*/
|
|
314
|
+
dispose() {
|
|
315
|
+
this.metrics.clear();
|
|
316
|
+
this.violations = [];
|
|
317
|
+
this.recommendations = [];
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
exports.PerformanceMonitor = PerformanceMonitor;
|
|
321
|
+
// Singleton instance
|
|
322
|
+
exports.performanceMonitor = new PerformanceMonitor();
|
|
323
|
+
exports.default = PerformanceMonitor;
|
|
324
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/performance/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { SecureYamlParser } from '../parser/secure-yaml-parser';
|
|
3
|
+
/**
|
|
4
|
+
* Interface para opções de streaming
|
|
5
|
+
*/
|
|
6
|
+
export interface StreamingOptions {
|
|
7
|
+
chunkSize?: number;
|
|
8
|
+
maxChunkSize?: number;
|
|
9
|
+
validateChunkSize?: boolean;
|
|
10
|
+
enableStreaming?: boolean;
|
|
11
|
+
lazyParsing?: boolean;
|
|
12
|
+
parallelProcessing?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parser YAML com suporte a streaming para arquivos grandes
|
|
16
|
+
*/
|
|
17
|
+
export declare class StreamingYamlParser extends SecureYamlParser {
|
|
18
|
+
private readonly streamingOptions;
|
|
19
|
+
constructor(options?: {
|
|
20
|
+
config?: any;
|
|
21
|
+
streaming?: StreamingOptions;
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Parse arquivo YAML via streaming
|
|
25
|
+
*/
|
|
26
|
+
parseFileStreaming(filePath: string): Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* Parse YAML a partir de stream
|
|
29
|
+
*/
|
|
30
|
+
parseStream(stream: Readable): Promise<any>;
|
|
31
|
+
/**
|
|
32
|
+
* Parse YAML com lazy loading e streaming
|
|
33
|
+
*/
|
|
34
|
+
parseStreamingLazy(yamlContent: string): Promise<any>;
|
|
35
|
+
/**
|
|
36
|
+
* Parse YAML em chunks para não bloquear o event loop
|
|
37
|
+
*/
|
|
38
|
+
private parseSecureChunked;
|
|
39
|
+
/**
|
|
40
|
+
* Parser otimizado para streams de entrada com configurações pré-definidas
|
|
41
|
+
*/
|
|
42
|
+
parseStreamOptimized(content: string | Readable): Promise<any>;
|
|
43
|
+
/**
|
|
44
|
+
* Otimização para arquivos grandes (> 1MB)
|
|
45
|
+
*/
|
|
46
|
+
private parseStreamingLarge;
|
|
47
|
+
/**
|
|
48
|
+
* Segmenta conteúdo grande em partes manejáveis
|
|
49
|
+
*/
|
|
50
|
+
private segmentLargeContent;
|
|
51
|
+
/**
|
|
52
|
+
* Processa segmento de forma assíncrona
|
|
53
|
+
*/
|
|
54
|
+
private parseSegmentAsync;
|
|
55
|
+
/**
|
|
56
|
+
* Merge resultados de múltiplos segmentos (simplificado)
|
|
57
|
+
*/
|
|
58
|
+
private mergeResults;
|
|
59
|
+
/**
|
|
60
|
+
* Wrapper com monitoramento de performance para parsing de arquivos grandes
|
|
61
|
+
*/
|
|
62
|
+
parseFileWithMonitoring(filePath: string): Promise<{
|
|
63
|
+
result: any;
|
|
64
|
+
metrics: any;
|
|
65
|
+
}>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Wrapper para parsing com streaming
|
|
69
|
+
*/
|
|
70
|
+
export declare function parseYamlStreaming(content: string | Readable, config?: {
|
|
71
|
+
streaming?: StreamingOptions;
|
|
72
|
+
parser?: any;
|
|
73
|
+
}): Promise<any>;
|
|
74
|
+
/**
|
|
75
|
+
* Benchmark compartivo entre parsing normal e streaming
|
|
76
|
+
*/
|
|
77
|
+
export declare function benchmarkStreamingComparison(content: string, iterations?: number): Promise<{
|
|
78
|
+
normal: any;
|
|
79
|
+
streaming: any;
|
|
80
|
+
}>;
|
|
81
|
+
export declare function parseSecureYaml(content: string): Promise<any>;
|
|
82
|
+
//# sourceMappingURL=streaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/performance/streaming.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;gBAElD,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;KAAO;IAaxE;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAaxD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAgDjD;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkB3D;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAQpE;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC;CAyBxF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAC1B,MAAM,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,GACtD,OAAO,CAAC,GAAG,CAAC,CAQd;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE,CAAC,CAwB1C;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAGnE"}
|