claude-flow-novice 2.2.4 → 2.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/scripts/verify-sdk-phase1.cjs +293 -0
|
@@ -0,0 +1,645 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { PerformanceTestRunner } = require('../src/testing/performance/PerformanceTestRunner');
|
|
4
|
+
const { PerformanceGate } = require('../src/ci-cd/performance/PerformanceGate');
|
|
5
|
+
const { RegressionDetector, defaultRegressionConfig } = require('../src/monitoring/regression/RegressionDetector');
|
|
6
|
+
const fs = require('fs').promises;
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Performance Test Runner Script
|
|
11
|
+
*
|
|
12
|
+
* This script provides a CLI interface for running performance tests,
|
|
13
|
+
* validating performance gates, and detecting regressions.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
class PerformanceTestCLI {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.testRunner = new PerformanceTestRunner();
|
|
19
|
+
this.setupTestConfigurations();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Setup predefined test configurations
|
|
23
|
+
setupTestConfigurations() {
|
|
24
|
+
// Basic performance test
|
|
25
|
+
this.testRunner.registerTest({
|
|
26
|
+
name: 'basic-cli-operations',
|
|
27
|
+
description: 'Test basic CLI command performance',
|
|
28
|
+
duration: 30000, // 30 seconds
|
|
29
|
+
warmupDuration: 5000, // 5 seconds
|
|
30
|
+
concurrency: 5,
|
|
31
|
+
rampUpTime: 2000,
|
|
32
|
+
rampDownTime: 2000,
|
|
33
|
+
targetThroughput: 10, // req/s
|
|
34
|
+
maxLatency: 1000, // ms
|
|
35
|
+
successRate: 0.95,
|
|
36
|
+
memoryLimit: 256, // MB
|
|
37
|
+
cpuLimit: 50 // %
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Load test configuration
|
|
41
|
+
this.testRunner.registerTest({
|
|
42
|
+
name: 'load-test-swarm-operations',
|
|
43
|
+
description: 'Load test for swarm coordination operations',
|
|
44
|
+
duration: 300000, // 5 minutes
|
|
45
|
+
warmupDuration: 30000, // 30 seconds
|
|
46
|
+
concurrency: parseInt(process.env.LOAD_TEST_CONCURRENCY || '50'),
|
|
47
|
+
rampUpTime: 60000, // 1 minute
|
|
48
|
+
rampDownTime: 30000, // 30 seconds
|
|
49
|
+
targetThroughput: 100, // req/s
|
|
50
|
+
maxLatency: 2000, // ms
|
|
51
|
+
successRate: 0.9,
|
|
52
|
+
memoryLimit: 512, // MB
|
|
53
|
+
cpuLimit: 70 // %
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Stress test configuration
|
|
57
|
+
this.testRunner.registerTest({
|
|
58
|
+
name: 'stress-test-agent-spawning',
|
|
59
|
+
description: 'Stress test for agent spawning and coordination',
|
|
60
|
+
duration: 600000, // 10 minutes
|
|
61
|
+
warmupDuration: 60000, // 1 minute
|
|
62
|
+
concurrency: parseInt(process.env.STRESS_TEST_MAX_CONCURRENCY || '200'),
|
|
63
|
+
rampUpTime: 120000, // 2 minutes
|
|
64
|
+
rampDownTime: 60000, // 1 minute
|
|
65
|
+
targetThroughput: 50, // req/s
|
|
66
|
+
maxLatency: 5000, // ms
|
|
67
|
+
successRate: 0.85,
|
|
68
|
+
memoryLimit: 1024, // MB
|
|
69
|
+
cpuLimit: 90 // %
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Endurance test configuration
|
|
73
|
+
this.testRunner.registerTest({
|
|
74
|
+
name: 'endurance-test-memory-stability',
|
|
75
|
+
description: 'Endurance test for memory stability and leak detection',
|
|
76
|
+
duration: parseInt(process.env.ENDURANCE_TEST_DURATION || '3600000'), // 1 hour
|
|
77
|
+
warmupDuration: 60000, // 1 minute
|
|
78
|
+
concurrency: parseInt(process.env.ENDURANCE_TEST_CONCURRENCY || '25'),
|
|
79
|
+
rampUpTime: 300000, // 5 minutes
|
|
80
|
+
rampDownTime: 300000, // 5 minutes
|
|
81
|
+
targetThroughput: 20, // req/s
|
|
82
|
+
maxLatency: 3000, // ms
|
|
83
|
+
successRate: 0.95,
|
|
84
|
+
memoryLimit: parseInt(process.env.ENDURANCE_TEST_MEMORY_LIMIT || '1024'), // MB
|
|
85
|
+
cpuLimit: 60 // %
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Run basic performance tests
|
|
90
|
+
async runBasicTests() {
|
|
91
|
+
console.log('🚀 Running basic performance tests...');
|
|
92
|
+
|
|
93
|
+
const tests = [
|
|
94
|
+
{
|
|
95
|
+
name: 'basic-cli-operations',
|
|
96
|
+
function: this.simulateBasicCLIOperation.bind(this)
|
|
97
|
+
}
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
const results = await this.testRunner.runTestSuite(tests);
|
|
101
|
+
await this.saveResults('basic', results);
|
|
102
|
+
|
|
103
|
+
return results;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Run load performance tests
|
|
107
|
+
async runLoadTests() {
|
|
108
|
+
console.log('🚀 Running load performance tests...');
|
|
109
|
+
|
|
110
|
+
const tests = [
|
|
111
|
+
{
|
|
112
|
+
name: 'load-test-swarm-operations',
|
|
113
|
+
function: this.simulateSwarmOperation.bind(this)
|
|
114
|
+
}
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
const results = await this.testRunner.runTestSuite(tests);
|
|
118
|
+
await this.saveResults('load', results);
|
|
119
|
+
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Run stress performance tests
|
|
124
|
+
async runStressTests() {
|
|
125
|
+
console.log('🚀 Running stress performance tests...');
|
|
126
|
+
|
|
127
|
+
const tests = [
|
|
128
|
+
{
|
|
129
|
+
name: 'stress-test-agent-spawning',
|
|
130
|
+
function: this.simulateAgentSpawning.bind(this)
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
const results = await this.testRunner.runTestSuite(tests);
|
|
135
|
+
await this.saveResults('stress', results);
|
|
136
|
+
|
|
137
|
+
return results;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Run endurance performance tests
|
|
141
|
+
async runEnduranceTests() {
|
|
142
|
+
console.log('🚀 Running endurance performance tests...');
|
|
143
|
+
|
|
144
|
+
const tests = [
|
|
145
|
+
{
|
|
146
|
+
name: 'endurance-test-memory-stability',
|
|
147
|
+
function: this.simulateMemoryIntensiveOperation.bind(this)
|
|
148
|
+
}
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
const results = await this.testRunner.runTestSuite(tests);
|
|
152
|
+
await this.saveResults('endurance', results);
|
|
153
|
+
|
|
154
|
+
return results;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Simulate basic CLI operation
|
|
158
|
+
async simulateBasicCLIOperation() {
|
|
159
|
+
// Simulate a basic CLI command execution
|
|
160
|
+
const start = Date.now();
|
|
161
|
+
|
|
162
|
+
// Simulate command parsing and validation
|
|
163
|
+
await this.sleep(Math.random() * 10 + 5); // 5-15ms
|
|
164
|
+
|
|
165
|
+
// Simulate configuration loading
|
|
166
|
+
await this.sleep(Math.random() * 20 + 10); // 10-30ms
|
|
167
|
+
|
|
168
|
+
// Simulate command execution
|
|
169
|
+
await this.sleep(Math.random() * 50 + 25); // 25-75ms
|
|
170
|
+
|
|
171
|
+
// Simulate response formatting
|
|
172
|
+
await this.sleep(Math.random() * 10 + 5); // 5-15ms
|
|
173
|
+
|
|
174
|
+
const duration = Date.now() - start;
|
|
175
|
+
|
|
176
|
+
// Simulate occasional failures (5% failure rate)
|
|
177
|
+
if (Math.random() < 0.05) {
|
|
178
|
+
throw new Error('Simulated command failure');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return { duration, operation: 'cli-command' };
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Simulate swarm operation
|
|
185
|
+
async simulateSwarmOperation() {
|
|
186
|
+
const start = Date.now();
|
|
187
|
+
|
|
188
|
+
// Simulate swarm initialization
|
|
189
|
+
await this.sleep(Math.random() * 30 + 20); // 20-50ms
|
|
190
|
+
|
|
191
|
+
// Simulate agent coordination
|
|
192
|
+
await this.sleep(Math.random() * 100 + 50); // 50-150ms
|
|
193
|
+
|
|
194
|
+
// Simulate task orchestration
|
|
195
|
+
await this.sleep(Math.random() * 200 + 100); // 100-300ms
|
|
196
|
+
|
|
197
|
+
// Simulate result aggregation
|
|
198
|
+
await this.sleep(Math.random() * 50 + 25); // 25-75ms
|
|
199
|
+
|
|
200
|
+
const duration = Date.now() - start;
|
|
201
|
+
|
|
202
|
+
// Simulate occasional failures (10% failure rate under load)
|
|
203
|
+
if (Math.random() < 0.1) {
|
|
204
|
+
throw new Error('Simulated swarm coordination failure');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return { duration, operation: 'swarm-coordination' };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Simulate agent spawning
|
|
211
|
+
async simulateAgentSpawning() {
|
|
212
|
+
const start = Date.now();
|
|
213
|
+
|
|
214
|
+
// Simulate agent type selection
|
|
215
|
+
await this.sleep(Math.random() * 20 + 10); // 10-30ms
|
|
216
|
+
|
|
217
|
+
// Simulate agent initialization
|
|
218
|
+
await this.sleep(Math.random() * 100 + 50); // 50-150ms
|
|
219
|
+
|
|
220
|
+
// Simulate capability registration
|
|
221
|
+
await this.sleep(Math.random() * 50 + 25); // 25-75ms
|
|
222
|
+
|
|
223
|
+
// Simulate network connection setup
|
|
224
|
+
await this.sleep(Math.random() * 150 + 75); // 75-225ms
|
|
225
|
+
|
|
226
|
+
// Simulate initial task assignment
|
|
227
|
+
await this.sleep(Math.random() * 100 + 50); // 50-150ms
|
|
228
|
+
|
|
229
|
+
const duration = Date.now() - start;
|
|
230
|
+
|
|
231
|
+
// Simulate failures (15% failure rate under stress)
|
|
232
|
+
if (Math.random() < 0.15) {
|
|
233
|
+
throw new Error('Simulated agent spawning failure');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return { duration, operation: 'agent-spawning' };
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Simulate memory-intensive operation
|
|
240
|
+
async simulateMemoryIntensiveOperation() {
|
|
241
|
+
const start = Date.now();
|
|
242
|
+
|
|
243
|
+
// Create some memory pressure to simulate real workload
|
|
244
|
+
const largeArray = new Array(10000).fill(0).map(() => ({
|
|
245
|
+
id: Math.random(),
|
|
246
|
+
data: new Array(100).fill(Math.random()),
|
|
247
|
+
timestamp: Date.now()
|
|
248
|
+
}));
|
|
249
|
+
|
|
250
|
+
// Simulate processing
|
|
251
|
+
await this.sleep(Math.random() * 100 + 50); // 50-150ms
|
|
252
|
+
|
|
253
|
+
// Simulate data transformation
|
|
254
|
+
const processedData = largeArray.map(item => ({
|
|
255
|
+
...item,
|
|
256
|
+
processed: true,
|
|
257
|
+
hash: this.simpleHash(JSON.stringify(item))
|
|
258
|
+
}));
|
|
259
|
+
|
|
260
|
+
// Simulate cleanup (helps test GC behavior)
|
|
261
|
+
largeArray.length = 0;
|
|
262
|
+
processedData.length = 0;
|
|
263
|
+
|
|
264
|
+
const duration = Date.now() - start;
|
|
265
|
+
|
|
266
|
+
// Simulate rare failures (2% failure rate)
|
|
267
|
+
if (Math.random() < 0.02) {
|
|
268
|
+
throw new Error('Simulated memory operation failure');
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return { duration, operation: 'memory-intensive' };
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Simple hash function for testing
|
|
275
|
+
simpleHash(str) {
|
|
276
|
+
let hash = 0;
|
|
277
|
+
for (let i = 0; i < str.length; i++) {
|
|
278
|
+
const char = str.charCodeAt(i);
|
|
279
|
+
hash = ((hash << 5) - hash) + char;
|
|
280
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
281
|
+
}
|
|
282
|
+
return hash;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Validate performance gate
|
|
286
|
+
async validatePerformanceGate() {
|
|
287
|
+
console.log('🚪 Running performance gate validation...');
|
|
288
|
+
|
|
289
|
+
const gateConfig = this.createPerformanceGateConfig();
|
|
290
|
+
const gate = new PerformanceGate(gateConfig);
|
|
291
|
+
|
|
292
|
+
// Run a subset of tests for gate validation
|
|
293
|
+
const tests = [
|
|
294
|
+
{
|
|
295
|
+
name: 'basic-cli-operations',
|
|
296
|
+
function: this.simulateBasicCLIOperation.bind(this)
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: 'load-test-swarm-operations',
|
|
300
|
+
function: this.simulateSwarmOperation.bind(this)
|
|
301
|
+
}
|
|
302
|
+
];
|
|
303
|
+
|
|
304
|
+
const gateResult = await gate.validatePerformance(tests);
|
|
305
|
+
|
|
306
|
+
// Save gate results
|
|
307
|
+
await this.saveGateResults(gateResult);
|
|
308
|
+
|
|
309
|
+
// Log results
|
|
310
|
+
console.log(`\n📊 Performance Gate Results:`);
|
|
311
|
+
console.log(`Status: ${gateResult.recommendation}`);
|
|
312
|
+
console.log(`Passed: ${gateResult.passed ? '✅' : '❌'}`);
|
|
313
|
+
console.log(`Violations: ${gateResult.violations.length}`);
|
|
314
|
+
console.log(`Regressions: ${gateResult.regressions.length}`);
|
|
315
|
+
console.log(`Improvements: ${gateResult.improvements.length}`);
|
|
316
|
+
|
|
317
|
+
if (gateResult.violations.length > 0) {
|
|
318
|
+
console.log('\n❌ Violations:');
|
|
319
|
+
gateResult.violations.forEach(v => console.log(` - ${v}`));
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (gateResult.regressions.length > 0) {
|
|
323
|
+
console.log('\n📉 Regressions:');
|
|
324
|
+
gateResult.regressions.forEach(r => console.log(` - ${r}`));
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (gateResult.improvements.length > 0) {
|
|
328
|
+
console.log('\n📈 Improvements:');
|
|
329
|
+
gateResult.improvements.forEach(i => console.log(` - ${i}`));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return gateResult;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Detect performance regressions
|
|
336
|
+
async detectRegressions() {
|
|
337
|
+
console.log('🔍 Running regression detection...');
|
|
338
|
+
|
|
339
|
+
const detector = new RegressionDetector(defaultRegressionConfig);
|
|
340
|
+
|
|
341
|
+
// Create a synthetic data point for testing
|
|
342
|
+
const dataPoint = {
|
|
343
|
+
timestamp: Date.now(),
|
|
344
|
+
commit: process.env.GITHUB_SHA || 'test-commit',
|
|
345
|
+
branch: process.env.GITHUB_REF_NAME || 'test-branch',
|
|
346
|
+
version: process.env.npm_package_version || '1.0.0',
|
|
347
|
+
metrics: {
|
|
348
|
+
throughput: 95 + Math.random() * 10, // 95-105 req/s
|
|
349
|
+
avgLatency: 45 + Math.random() * 10, // 45-55ms
|
|
350
|
+
p95Latency: 90 + Math.random() * 20, // 90-110ms
|
|
351
|
+
p99Latency: 180 + Math.random() * 40, // 180-220ms
|
|
352
|
+
successRate: 0.95 + Math.random() * 0.04, // 95-99%
|
|
353
|
+
memoryUsage: 200 + Math.random() * 50, // 200-250MB
|
|
354
|
+
cpuUsage: 35 + Math.random() * 15, // 35-50%
|
|
355
|
+
errorRate: Math.random() * 0.05 // 0-5%
|
|
356
|
+
},
|
|
357
|
+
environment: {
|
|
358
|
+
os: process.platform,
|
|
359
|
+
nodeVersion: process.version,
|
|
360
|
+
cpuCores: require('os').cpus().length,
|
|
361
|
+
memory: Math.round(require('os').totalmem() / 1024 / 1024) // MB
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const alerts = await detector.detectRegressions(dataPoint);
|
|
366
|
+
|
|
367
|
+
console.log(`\n🔍 Regression Detection Results:`);
|
|
368
|
+
console.log(`Alerts: ${alerts.length}`);
|
|
369
|
+
|
|
370
|
+
if (alerts.length > 0) {
|
|
371
|
+
alerts.forEach(alert => {
|
|
372
|
+
const icon = alert.type === 'REGRESSION' ? '📉' :
|
|
373
|
+
alert.type === 'IMPROVEMENT' ? '📈' : '⚠️';
|
|
374
|
+
console.log(`\n${icon} ${alert.type} - ${alert.severity}`);
|
|
375
|
+
console.log(` Metric: ${alert.metric}`);
|
|
376
|
+
console.log(` Description: ${alert.description}`);
|
|
377
|
+
console.log(` Recommendation: ${alert.recommendation}`);
|
|
378
|
+
});
|
|
379
|
+
} else {
|
|
380
|
+
console.log(' No significant regressions detected ✅');
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Save regression results
|
|
384
|
+
await this.saveRegressionResults(alerts, dataPoint);
|
|
385
|
+
|
|
386
|
+
return alerts;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Generate comprehensive performance report
|
|
390
|
+
async generateReport() {
|
|
391
|
+
console.log('📊 Generating comprehensive performance report...');
|
|
392
|
+
|
|
393
|
+
const reportData = {
|
|
394
|
+
timestamp: Date.now(),
|
|
395
|
+
environment: {
|
|
396
|
+
os: process.platform,
|
|
397
|
+
nodeVersion: process.version,
|
|
398
|
+
cpuCores: require('os').cpus().length,
|
|
399
|
+
memory: Math.round(require('os').totalmem() / 1024 / 1024),
|
|
400
|
+
branch: process.env.GITHUB_REF_NAME || 'unknown',
|
|
401
|
+
commit: process.env.GITHUB_SHA || 'unknown'
|
|
402
|
+
},
|
|
403
|
+
tests: {
|
|
404
|
+
basic: await this.loadResults('basic'),
|
|
405
|
+
load: await this.loadResults('load'),
|
|
406
|
+
stress: await this.loadResults('stress'),
|
|
407
|
+
endurance: await this.loadResults('endurance')
|
|
408
|
+
},
|
|
409
|
+
gate: await this.loadGateResults(),
|
|
410
|
+
regressions: await this.loadRegressionResults()
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
const reportPath = path.join(process.cwd(), 'reports/performance', `consolidated-${Date.now()}.json`);
|
|
414
|
+
await fs.mkdir(path.dirname(reportPath), { recursive: true });
|
|
415
|
+
await fs.writeFile(reportPath, JSON.stringify(reportData, null, 2));
|
|
416
|
+
|
|
417
|
+
console.log(`📊 Performance report saved to: ${reportPath}`);
|
|
418
|
+
|
|
419
|
+
return reportData;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Create performance gate configuration
|
|
423
|
+
createPerformanceGateConfig() {
|
|
424
|
+
return {
|
|
425
|
+
enabled: process.env.PERFORMANCE_GATE_ENABLED !== 'false',
|
|
426
|
+
thresholds: {
|
|
427
|
+
throughput: {
|
|
428
|
+
min: parseInt(process.env.PERF_THRESHOLD_THROUGHPUT_MIN || '50'),
|
|
429
|
+
regression: parseFloat(process.env.PERF_THRESHOLD_THROUGHPUT_REGRESSION || '10')
|
|
430
|
+
},
|
|
431
|
+
latency: {
|
|
432
|
+
p95: parseInt(process.env.PERF_THRESHOLD_P95_LATENCY || '1000'),
|
|
433
|
+
p99: parseInt(process.env.PERF_THRESHOLD_P99_LATENCY || '2000'),
|
|
434
|
+
regression: parseFloat(process.env.PERF_THRESHOLD_LATENCY_REGRESSION || '20')
|
|
435
|
+
},
|
|
436
|
+
successRate: {
|
|
437
|
+
min: parseFloat(process.env.PERF_THRESHOLD_SUCCESS_RATE || '0.9')
|
|
438
|
+
},
|
|
439
|
+
resources: {
|
|
440
|
+
memory: parseInt(process.env.PERF_THRESHOLD_MEMORY || '512'),
|
|
441
|
+
cpu: parseInt(process.env.PERF_THRESHOLD_CPU || '80')
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
baseline: {
|
|
445
|
+
enabled: true,
|
|
446
|
+
path: process.env.PERFORMANCE_BASELINE_PATH || './performance-baseline.json',
|
|
447
|
+
autoUpdate: process.env.PERFORMANCE_BASELINE_AUTO_UPDATE === 'true'
|
|
448
|
+
},
|
|
449
|
+
notifications: {
|
|
450
|
+
slack: {
|
|
451
|
+
webhook: process.env.SLACK_WEBHOOK_URL || '',
|
|
452
|
+
channel: process.env.SLACK_CHANNEL || '#performance'
|
|
453
|
+
},
|
|
454
|
+
email: {
|
|
455
|
+
enabled: process.env.EMAIL_NOTIFICATIONS_ENABLED === 'true',
|
|
456
|
+
recipients: (process.env.EMAIL_RECIPIENTS || '').split(',').filter(Boolean)
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// Helper methods
|
|
463
|
+
async sleep(ms) {
|
|
464
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
async saveResults(testType, results) {
|
|
468
|
+
const reportsDir = path.join(process.cwd(), 'reports/performance');
|
|
469
|
+
await fs.mkdir(reportsDir, { recursive: true });
|
|
470
|
+
|
|
471
|
+
const resultsPath = path.join(reportsDir, `${testType}-${Date.now()}.json`);
|
|
472
|
+
await fs.writeFile(resultsPath, JSON.stringify(results, null, 2));
|
|
473
|
+
|
|
474
|
+
console.log(`Results saved to: ${resultsPath}`);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
async saveGateResults(gateResult) {
|
|
478
|
+
const reportsDir = path.join(process.cwd(), 'reports/performance');
|
|
479
|
+
await fs.mkdir(reportsDir, { recursive: true });
|
|
480
|
+
|
|
481
|
+
const gateResultsPath = path.join(reportsDir, `gate-${Date.now()}.json`);
|
|
482
|
+
const latestGateResultsPath = path.join(reportsDir, 'gate-latest.json');
|
|
483
|
+
|
|
484
|
+
await fs.writeFile(gateResultsPath, JSON.stringify(gateResult, null, 2));
|
|
485
|
+
await fs.writeFile(latestGateResultsPath, JSON.stringify(gateResult, null, 2));
|
|
486
|
+
|
|
487
|
+
console.log(`Gate results saved to: ${gateResultsPath}`);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
async saveRegressionResults(alerts, dataPoint) {
|
|
491
|
+
const reportsDir = path.join(process.cwd(), 'reports/performance');
|
|
492
|
+
await fs.mkdir(reportsDir, { recursive: true });
|
|
493
|
+
|
|
494
|
+
const regressionData = {
|
|
495
|
+
timestamp: Date.now(),
|
|
496
|
+
dataPoint: dataPoint,
|
|
497
|
+
alerts: alerts
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
const regressionResultsPath = path.join(reportsDir, `regression-${Date.now()}.json`);
|
|
501
|
+
await fs.writeFile(regressionResultsPath, JSON.stringify(regressionData, null, 2));
|
|
502
|
+
|
|
503
|
+
console.log(`Regression results saved to: ${regressionResultsPath}`);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
async loadResults(testType) {
|
|
507
|
+
try {
|
|
508
|
+
const reportsDir = path.join(process.cwd(), 'reports/performance');
|
|
509
|
+
const files = await fs.readdir(reportsDir);
|
|
510
|
+
const testFiles = files.filter(f => f.startsWith(`${testType}-`) && f.endsWith('.json'));
|
|
511
|
+
|
|
512
|
+
if (testFiles.length === 0) return null;
|
|
513
|
+
|
|
514
|
+
const latestFile = testFiles.sort().pop();
|
|
515
|
+
const resultsPath = path.join(reportsDir, latestFile);
|
|
516
|
+
const data = await fs.readFile(resultsPath, 'utf-8');
|
|
517
|
+
|
|
518
|
+
return JSON.parse(data);
|
|
519
|
+
} catch (error) {
|
|
520
|
+
console.warn(`Could not load ${testType} results:`, error.message);
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
async loadGateResults() {
|
|
526
|
+
try {
|
|
527
|
+
const gateResultsPath = path.join(process.cwd(), 'reports/performance', 'gate-latest.json');
|
|
528
|
+
const data = await fs.readFile(gateResultsPath, 'utf-8');
|
|
529
|
+
return JSON.parse(data);
|
|
530
|
+
} catch (error) {
|
|
531
|
+
console.warn('Could not load gate results:', error.message);
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
async loadRegressionResults() {
|
|
537
|
+
try {
|
|
538
|
+
const reportsDir = path.join(process.cwd(), 'reports/performance');
|
|
539
|
+
const files = await fs.readdir(reportsDir);
|
|
540
|
+
const regressionFiles = files.filter(f => f.startsWith('regression-') && f.endsWith('.json'));
|
|
541
|
+
|
|
542
|
+
if (regressionFiles.length === 0) return null;
|
|
543
|
+
|
|
544
|
+
const latestFile = regressionFiles.sort().pop();
|
|
545
|
+
const resultsPath = path.join(reportsDir, latestFile);
|
|
546
|
+
const data = await fs.readFile(resultsPath, 'utf-8');
|
|
547
|
+
|
|
548
|
+
return JSON.parse(data);
|
|
549
|
+
} catch (error) {
|
|
550
|
+
console.warn('Could not load regression results:', error.message);
|
|
551
|
+
return null;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// CLI interface
|
|
557
|
+
async function main() {
|
|
558
|
+
const args = process.argv.slice(2);
|
|
559
|
+
const command = args[0];
|
|
560
|
+
|
|
561
|
+
const cli = new PerformanceTestCLI();
|
|
562
|
+
|
|
563
|
+
try {
|
|
564
|
+
switch (command) {
|
|
565
|
+
case 'basic':
|
|
566
|
+
await cli.runBasicTests();
|
|
567
|
+
break;
|
|
568
|
+
|
|
569
|
+
case 'load':
|
|
570
|
+
await cli.runLoadTests();
|
|
571
|
+
break;
|
|
572
|
+
|
|
573
|
+
case 'stress':
|
|
574
|
+
await cli.runStressTests();
|
|
575
|
+
break;
|
|
576
|
+
|
|
577
|
+
case 'endurance':
|
|
578
|
+
await cli.runEnduranceTests();
|
|
579
|
+
break;
|
|
580
|
+
|
|
581
|
+
case 'all':
|
|
582
|
+
await cli.runBasicTests();
|
|
583
|
+
await cli.runLoadTests();
|
|
584
|
+
await cli.runStressTests();
|
|
585
|
+
await cli.runEnduranceTests();
|
|
586
|
+
break;
|
|
587
|
+
|
|
588
|
+
case 'gate':
|
|
589
|
+
const gateResult = await cli.validatePerformanceGate();
|
|
590
|
+
if (!gateResult.passed) {
|
|
591
|
+
process.exit(1);
|
|
592
|
+
}
|
|
593
|
+
break;
|
|
594
|
+
|
|
595
|
+
case 'regression':
|
|
596
|
+
await cli.detectRegressions();
|
|
597
|
+
break;
|
|
598
|
+
|
|
599
|
+
case 'report':
|
|
600
|
+
await cli.generateReport();
|
|
601
|
+
break;
|
|
602
|
+
|
|
603
|
+
default:
|
|
604
|
+
console.log(`
|
|
605
|
+
Performance Test Runner
|
|
606
|
+
|
|
607
|
+
Usage: node scripts/performance-test-runner.js <command>
|
|
608
|
+
|
|
609
|
+
Commands:
|
|
610
|
+
basic Run basic performance tests
|
|
611
|
+
load Run load performance tests
|
|
612
|
+
stress Run stress performance tests
|
|
613
|
+
endurance Run endurance performance tests
|
|
614
|
+
all Run all performance test suites
|
|
615
|
+
gate Run performance gate validation
|
|
616
|
+
regression Run regression detection
|
|
617
|
+
report Generate comprehensive performance report
|
|
618
|
+
|
|
619
|
+
Environment Variables:
|
|
620
|
+
PERFORMANCE_GATE_ENABLED=true/false
|
|
621
|
+
PERFORMANCE_BASELINE_AUTO_UPDATE=true/false
|
|
622
|
+
LOAD_TEST_CONCURRENCY=50
|
|
623
|
+
STRESS_TEST_MAX_CONCURRENCY=200
|
|
624
|
+
ENDURANCE_TEST_DURATION=3600000
|
|
625
|
+
ENDURANCE_TEST_CONCURRENCY=25
|
|
626
|
+
ENDURANCE_TEST_MEMORY_LIMIT=1024
|
|
627
|
+
PERF_THRESHOLD_THROUGHPUT_MIN=50
|
|
628
|
+
PERF_THRESHOLD_P95_LATENCY=1000
|
|
629
|
+
PERF_THRESHOLD_SUCCESS_RATE=0.9
|
|
630
|
+
SLACK_WEBHOOK_URL=<webhook-url>
|
|
631
|
+
EMAIL_NOTIFICATIONS_ENABLED=true/false
|
|
632
|
+
`);
|
|
633
|
+
break;
|
|
634
|
+
}
|
|
635
|
+
} catch (error) {
|
|
636
|
+
console.error(`❌ Performance test failed:`, error.message);
|
|
637
|
+
process.exit(1);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
if (require.main === module) {
|
|
642
|
+
main();
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
module.exports = { PerformanceTestCLI };
|