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,532 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Phase 4 Performance Monitoring Script
|
|
5
|
+
* Real-time performance monitoring for controlled rollout
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { spawn } from 'child_process';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
|
|
13
|
+
class Phase4PerformanceMonitor {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.metricsDir = path.join(process.cwd(), '.claude-flow', 'metrics');
|
|
16
|
+
this.alertThresholds = {
|
|
17
|
+
responseTime: { warning: 5, critical: 10 }, // percentage increase
|
|
18
|
+
cpuUsage: { warning: 80, critical: 90 }, // percentage
|
|
19
|
+
memoryUsage: { warning: 85, critical: 95 }, // percentage
|
|
20
|
+
hookExecution: { warning: 100, critical: 500 }, // milliseconds
|
|
21
|
+
databaseQueries: { warning: 5, critical: 10 } // percentage increase
|
|
22
|
+
};
|
|
23
|
+
this.monitoring = false;
|
|
24
|
+
this.baseline = null;
|
|
25
|
+
this.alerts = [];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async initialize() {
|
|
29
|
+
console.log(chalk.blue('š Initializing Phase 4 Performance Monitor'));
|
|
30
|
+
|
|
31
|
+
// Ensure metrics directory exists
|
|
32
|
+
await fs.ensureDir(this.metricsDir);
|
|
33
|
+
|
|
34
|
+
// Load baseline performance metrics
|
|
35
|
+
await this.loadBaseline();
|
|
36
|
+
|
|
37
|
+
console.log(chalk.green('ā
Performance monitor initialized'));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async loadBaseline() {
|
|
41
|
+
try {
|
|
42
|
+
const systemMetricsPath = path.join(this.metricsDir, 'system-metrics.json');
|
|
43
|
+
const performanceMetricsPath = path.join(this.metricsDir, 'performance.json');
|
|
44
|
+
|
|
45
|
+
if (await fs.pathExists(systemMetricsPath)) {
|
|
46
|
+
const systemMetrics = await fs.readJson(systemMetricsPath);
|
|
47
|
+
const performanceMetrics = await fs.pathExists(performanceMetricsPath)
|
|
48
|
+
? await fs.readJson(performanceMetricsPath)
|
|
49
|
+
: {};
|
|
50
|
+
|
|
51
|
+
// Calculate baseline from recent metrics
|
|
52
|
+
const recentMetrics = systemMetrics.slice(-10);
|
|
53
|
+
this.baseline = this.calculateBaseline(recentMetrics, performanceMetrics);
|
|
54
|
+
|
|
55
|
+
console.log(chalk.cyan('š Baseline metrics loaded:'));
|
|
56
|
+
console.log(` CPU: ${this.baseline.cpu.toFixed(2)}%`);
|
|
57
|
+
console.log(` Memory: ${this.baseline.memory.toFixed(2)}%`);
|
|
58
|
+
console.log(` Tasks: ${this.baseline.tasks} total`);
|
|
59
|
+
} else {
|
|
60
|
+
console.log(chalk.yellow('ā ļø No baseline metrics found, will establish during monitoring'));
|
|
61
|
+
this.baseline = null;
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.error(chalk.red('ā Error loading baseline:'), error.message);
|
|
65
|
+
this.baseline = null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
calculateBaseline(systemMetrics, performanceMetrics) {
|
|
70
|
+
const avgCpu = systemMetrics.reduce((sum, m) => sum + (m.cpuLoad || 0), 0) / systemMetrics.length;
|
|
71
|
+
const avgMemory = systemMetrics.reduce((sum, m) => sum + (m.memoryUsagePercent || 0), 0) / systemMetrics.length;
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
cpu: avgCpu * 100, // Convert to percentage
|
|
75
|
+
memory: avgMemory,
|
|
76
|
+
tasks: performanceMetrics.totalTasks || 0,
|
|
77
|
+
successfulTasks: performanceMetrics.successfulTasks || 0,
|
|
78
|
+
timestamp: Date.now()
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async startMonitoring(interval = 30000) {
|
|
83
|
+
if (this.monitoring) {
|
|
84
|
+
console.log(chalk.yellow('ā ļø Monitoring already active'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log(chalk.blue(`š Starting performance monitoring (${interval/1000}s intervals)`));
|
|
89
|
+
this.monitoring = true;
|
|
90
|
+
|
|
91
|
+
const monitoringLoop = async () => {
|
|
92
|
+
if (!this.monitoring) return;
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
const metrics = await this.collectMetrics();
|
|
96
|
+
await this.analyzePerformance(metrics);
|
|
97
|
+
await this.saveMetrics(metrics);
|
|
98
|
+
|
|
99
|
+
// Display current status
|
|
100
|
+
this.displayStatus(metrics);
|
|
101
|
+
|
|
102
|
+
setTimeout(monitoringLoop, interval);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error(chalk.red('ā Monitoring error:'), error.message);
|
|
105
|
+
setTimeout(monitoringLoop, interval);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
await monitoringLoop();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async collectMetrics() {
|
|
113
|
+
const timestamp = Date.now();
|
|
114
|
+
|
|
115
|
+
// System metrics
|
|
116
|
+
const cpuUsage = await this.getCpuUsage();
|
|
117
|
+
const memoryUsage = await this.getMemoryUsage();
|
|
118
|
+
|
|
119
|
+
// Hook performance metrics
|
|
120
|
+
const hookMetrics = await this.getHookMetrics();
|
|
121
|
+
|
|
122
|
+
// Database performance
|
|
123
|
+
const dbMetrics = await this.getDatabaseMetrics();
|
|
124
|
+
|
|
125
|
+
// Task performance
|
|
126
|
+
const taskMetrics = await this.getTaskMetrics();
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
timestamp,
|
|
130
|
+
cpu: cpuUsage,
|
|
131
|
+
memory: memoryUsage,
|
|
132
|
+
hooks: hookMetrics,
|
|
133
|
+
database: dbMetrics,
|
|
134
|
+
tasks: taskMetrics
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async getCpuUsage() {
|
|
139
|
+
try {
|
|
140
|
+
return new Promise((resolve) => {
|
|
141
|
+
const proc = spawn('cat', ['/proc/loadavg']);
|
|
142
|
+
let output = '';
|
|
143
|
+
|
|
144
|
+
proc.stdout.on('data', (data) => {
|
|
145
|
+
output += data.toString();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
proc.on('close', () => {
|
|
149
|
+
const loadAvg = parseFloat(output.split(' ')[0]);
|
|
150
|
+
const cpuCount = require('os').cpus().length;
|
|
151
|
+
resolve((loadAvg / cpuCount) * 100);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
proc.on('error', () => resolve(0));
|
|
155
|
+
});
|
|
156
|
+
} catch (error) {
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async getMemoryUsage() {
|
|
162
|
+
try {
|
|
163
|
+
const memInfo = await fs.readFile('/proc/meminfo', 'utf8');
|
|
164
|
+
const lines = memInfo.split('\\n');
|
|
165
|
+
|
|
166
|
+
const memTotal = parseInt(lines.find(l => l.startsWith('MemTotal:')).split(/\\s+/)[1]) * 1024;
|
|
167
|
+
const memAvailable = parseInt(lines.find(l => l.startsWith('MemAvailable:')).split(/\\s+/)[1]) * 1024;
|
|
168
|
+
const memUsed = memTotal - memAvailable;
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
total: memTotal,
|
|
172
|
+
used: memUsed,
|
|
173
|
+
percentage: (memUsed / memTotal) * 100
|
|
174
|
+
};
|
|
175
|
+
} catch (error) {
|
|
176
|
+
return { total: 0, used: 0, percentage: 0 };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async getHookMetrics() {
|
|
181
|
+
try {
|
|
182
|
+
// Check for recent hook execution logs
|
|
183
|
+
const swarmDir = path.join(process.cwd(), '.swarm');
|
|
184
|
+
const memoryDbPath = path.join(swarmDir, 'memory.db');
|
|
185
|
+
|
|
186
|
+
if (await fs.pathExists(memoryDbPath)) {
|
|
187
|
+
// Simulate hook performance metrics (in real implementation, query the database)
|
|
188
|
+
return {
|
|
189
|
+
averageExecutionTime: 150, // ms
|
|
190
|
+
successRate: 99.5, // percentage
|
|
191
|
+
timeouts: 0,
|
|
192
|
+
errors: 0
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return { averageExecutionTime: 0, successRate: 100, timeouts: 0, errors: 0 };
|
|
197
|
+
} catch (error) {
|
|
198
|
+
return { averageExecutionTime: 0, successRate: 100, timeouts: 0, errors: 0 };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async getDatabaseMetrics() {
|
|
203
|
+
try {
|
|
204
|
+
// Simulate database performance metrics
|
|
205
|
+
return {
|
|
206
|
+
queryTime: 25, // average ms
|
|
207
|
+
connections: 5,
|
|
208
|
+
validationQueries: 120, // per minute
|
|
209
|
+
performanceImpact: 3.2 // percentage increase
|
|
210
|
+
};
|
|
211
|
+
} catch (error) {
|
|
212
|
+
return { queryTime: 0, connections: 0, validationQueries: 0, performanceImpact: 0 };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
async getTaskMetrics() {
|
|
217
|
+
try {
|
|
218
|
+
const performanceFile = path.join(this.metricsDir, 'performance.json');
|
|
219
|
+
if (await fs.pathExists(performanceFile)) {
|
|
220
|
+
return await fs.readJson(performanceFile);
|
|
221
|
+
}
|
|
222
|
+
return { totalTasks: 0, successfulTasks: 0, failedTasks: 0 };
|
|
223
|
+
} catch (error) {
|
|
224
|
+
return { totalTasks: 0, successfulTasks: 0, failedTasks: 0 };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async analyzePerformance(metrics) {
|
|
229
|
+
const alerts = [];
|
|
230
|
+
|
|
231
|
+
if (this.baseline) {
|
|
232
|
+
// CPU Usage Analysis
|
|
233
|
+
const cpuIncrease = ((metrics.cpu - this.baseline.cpu) / this.baseline.cpu) * 100;
|
|
234
|
+
if (metrics.cpu > this.alertThresholds.cpuUsage.critical) {
|
|
235
|
+
alerts.push({
|
|
236
|
+
type: 'CRITICAL',
|
|
237
|
+
metric: 'CPU_USAGE',
|
|
238
|
+
value: metrics.cpu,
|
|
239
|
+
threshold: this.alertThresholds.cpuUsage.critical,
|
|
240
|
+
message: `CPU usage critical: ${metrics.cpu.toFixed(2)}%`
|
|
241
|
+
});
|
|
242
|
+
} else if (metrics.cpu > this.alertThresholds.cpuUsage.warning) {
|
|
243
|
+
alerts.push({
|
|
244
|
+
type: 'WARNING',
|
|
245
|
+
metric: 'CPU_USAGE',
|
|
246
|
+
value: metrics.cpu,
|
|
247
|
+
threshold: this.alertThresholds.cpuUsage.warning,
|
|
248
|
+
message: `CPU usage high: ${metrics.cpu.toFixed(2)}%`
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Memory Usage Analysis
|
|
253
|
+
if (metrics.memory.percentage > this.alertThresholds.memoryUsage.critical) {
|
|
254
|
+
alerts.push({
|
|
255
|
+
type: 'CRITICAL',
|
|
256
|
+
metric: 'MEMORY_USAGE',
|
|
257
|
+
value: metrics.memory.percentage,
|
|
258
|
+
threshold: this.alertThresholds.memoryUsage.critical,
|
|
259
|
+
message: `Memory usage critical: ${metrics.memory.percentage.toFixed(2)}%`
|
|
260
|
+
});
|
|
261
|
+
} else if (metrics.memory.percentage > this.alertThresholds.memoryUsage.warning) {
|
|
262
|
+
alerts.push({
|
|
263
|
+
type: 'WARNING',
|
|
264
|
+
metric: 'MEMORY_USAGE',
|
|
265
|
+
value: metrics.memory.percentage,
|
|
266
|
+
threshold: this.alertThresholds.memoryUsage.warning,
|
|
267
|
+
message: `Memory usage high: ${metrics.memory.percentage.toFixed(2)}%`
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Hook Performance Analysis
|
|
272
|
+
if (metrics.hooks.averageExecutionTime > this.alertThresholds.hookExecution.critical) {
|
|
273
|
+
alerts.push({
|
|
274
|
+
type: 'CRITICAL',
|
|
275
|
+
metric: 'HOOK_PERFORMANCE',
|
|
276
|
+
value: metrics.hooks.averageExecutionTime,
|
|
277
|
+
threshold: this.alertThresholds.hookExecution.critical,
|
|
278
|
+
message: `Hook execution time critical: ${metrics.hooks.averageExecutionTime}ms`
|
|
279
|
+
});
|
|
280
|
+
} else if (metrics.hooks.averageExecutionTime > this.alertThresholds.hookExecution.warning) {
|
|
281
|
+
alerts.push({
|
|
282
|
+
type: 'WARNING',
|
|
283
|
+
metric: 'HOOK_PERFORMANCE',
|
|
284
|
+
value: metrics.hooks.averageExecutionTime,
|
|
285
|
+
threshold: this.alertThresholds.hookExecution.warning,
|
|
286
|
+
message: `Hook execution time high: ${metrics.hooks.averageExecutionTime}ms`
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Database Performance Analysis
|
|
291
|
+
if (metrics.database.performanceImpact > this.alertThresholds.databaseQueries.critical) {
|
|
292
|
+
alerts.push({
|
|
293
|
+
type: 'CRITICAL',
|
|
294
|
+
metric: 'DATABASE_PERFORMANCE',
|
|
295
|
+
value: metrics.database.performanceImpact,
|
|
296
|
+
threshold: this.alertThresholds.databaseQueries.critical,
|
|
297
|
+
message: `Database performance impact critical: +${metrics.database.performanceImpact}%`
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Store alerts
|
|
303
|
+
this.alerts = alerts;
|
|
304
|
+
|
|
305
|
+
// Log alerts
|
|
306
|
+
alerts.forEach(alert => {
|
|
307
|
+
const color = alert.type === 'CRITICAL' ? chalk.red : chalk.yellow;
|
|
308
|
+
console.log(color(`šØ ${alert.type}: ${alert.message}`));
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
displayStatus(metrics) {
|
|
313
|
+
console.clear();
|
|
314
|
+
console.log(chalk.bold.blue('š Phase 4 Performance Monitor - Live Status'));
|
|
315
|
+
console.log(chalk.gray('=' .repeat(60)));
|
|
316
|
+
|
|
317
|
+
// Timestamp
|
|
318
|
+
console.log(chalk.cyan(`š ${new Date(metrics.timestamp).toLocaleString()}`));
|
|
319
|
+
console.log();
|
|
320
|
+
|
|
321
|
+
// System Resources
|
|
322
|
+
console.log(chalk.bold('š„ļø System Resources:'));
|
|
323
|
+
console.log(` CPU Usage: ${this.colorizeMetric(metrics.cpu, 80, 90)}%`);
|
|
324
|
+
console.log(` Memory: ${this.colorizeMetric(metrics.memory.percentage, 85, 95)}% (${(metrics.memory.used / 1024 / 1024 / 1024).toFixed(2)}GB used)`);
|
|
325
|
+
console.log();
|
|
326
|
+
|
|
327
|
+
// Hook Performance
|
|
328
|
+
console.log(chalk.bold('šŖ Hook Performance:'));
|
|
329
|
+
console.log(` Avg Execution: ${this.colorizeMetric(metrics.hooks.averageExecutionTime, 100, 500)}ms`);
|
|
330
|
+
console.log(` Success Rate: ${metrics.hooks.successRate}%`);
|
|
331
|
+
console.log(` Timeouts: ${metrics.hooks.timeouts}`);
|
|
332
|
+
console.log();
|
|
333
|
+
|
|
334
|
+
// Database Performance
|
|
335
|
+
console.log(chalk.bold('šļø Database Performance:'));
|
|
336
|
+
console.log(` Query Time: ${metrics.database.queryTime}ms avg`);
|
|
337
|
+
console.log(` Connections: ${metrics.database.connections}`);
|
|
338
|
+
console.log(` Impact: +${metrics.database.performanceImpact}%`);
|
|
339
|
+
console.log();
|
|
340
|
+
|
|
341
|
+
// Task Metrics
|
|
342
|
+
console.log(chalk.bold('š Task Metrics:'));
|
|
343
|
+
console.log(` Total Tasks: ${metrics.tasks.totalTasks}`);
|
|
344
|
+
console.log(` Successful: ${metrics.tasks.successfulTasks}`);
|
|
345
|
+
console.log(` Failed: ${metrics.tasks.failedTasks}`);
|
|
346
|
+
console.log();
|
|
347
|
+
|
|
348
|
+
// Alerts
|
|
349
|
+
if (this.alerts.length > 0) {
|
|
350
|
+
console.log(chalk.bold.red('šØ Active Alerts:'));
|
|
351
|
+
this.alerts.forEach(alert => {
|
|
352
|
+
const color = alert.type === 'CRITICAL' ? chalk.red : chalk.yellow;
|
|
353
|
+
console.log(` ${color(`${alert.type}: ${alert.message}`)}`);
|
|
354
|
+
});
|
|
355
|
+
} else {
|
|
356
|
+
console.log(chalk.green('ā
No active alerts - system performing within thresholds'));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
console.log(chalk.gray('=' .repeat(60)));
|
|
360
|
+
console.log(chalk.dim('Press Ctrl+C to stop monitoring'));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
colorizeMetric(value, warningThreshold, criticalThreshold) {
|
|
364
|
+
if (value >= criticalThreshold) {
|
|
365
|
+
return chalk.red(value.toFixed(2));
|
|
366
|
+
} else if (value >= warningThreshold) {
|
|
367
|
+
return chalk.yellow(value.toFixed(2));
|
|
368
|
+
} else {
|
|
369
|
+
return chalk.green(value.toFixed(2));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
async saveMetrics(metrics) {
|
|
374
|
+
try {
|
|
375
|
+
const metricsFile = path.join(this.metricsDir, 'phase4-monitoring.json');
|
|
376
|
+
let existingMetrics = [];
|
|
377
|
+
|
|
378
|
+
if (await fs.pathExists(metricsFile)) {
|
|
379
|
+
existingMetrics = await fs.readJson(metricsFile);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
existingMetrics.push(metrics);
|
|
383
|
+
|
|
384
|
+
// Keep only last 1000 entries to prevent file growth
|
|
385
|
+
if (existingMetrics.length > 1000) {
|
|
386
|
+
existingMetrics = existingMetrics.slice(-1000);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
await fs.writeJson(metricsFile, existingMetrics, { spaces: 2 });
|
|
390
|
+
} catch (error) {
|
|
391
|
+
console.error(chalk.red('ā Error saving metrics:'), error.message);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
stopMonitoring() {
|
|
396
|
+
console.log(chalk.blue('š Stopping performance monitoring'));
|
|
397
|
+
this.monitoring = false;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
async generateReport() {
|
|
401
|
+
console.log(chalk.blue('š Generating performance report...'));
|
|
402
|
+
|
|
403
|
+
try {
|
|
404
|
+
const metricsFile = path.join(this.metricsDir, 'phase4-monitoring.json');
|
|
405
|
+
if (await fs.pathExists(metricsFile)) {
|
|
406
|
+
const metrics = await fs.readJson(metricsFile);
|
|
407
|
+
|
|
408
|
+
const report = {
|
|
409
|
+
generatedAt: new Date().toISOString(),
|
|
410
|
+
monitoringPeriod: {
|
|
411
|
+
start: new Date(metrics[0]?.timestamp).toISOString(),
|
|
412
|
+
end: new Date(metrics[metrics.length - 1]?.timestamp).toISOString(),
|
|
413
|
+
duration: `${((metrics[metrics.length - 1]?.timestamp - metrics[0]?.timestamp) / 1000 / 60).toFixed(2)} minutes`
|
|
414
|
+
},
|
|
415
|
+
summary: this.calculateSummaryStats(metrics),
|
|
416
|
+
alerts: this.summarizeAlerts(metrics),
|
|
417
|
+
recommendations: this.generateRecommendations(metrics)
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
const reportFile = path.join(this.metricsDir, `phase4-performance-report-${Date.now()}.json`);
|
|
421
|
+
await fs.writeJson(reportFile, report, { spaces: 2 });
|
|
422
|
+
|
|
423
|
+
console.log(chalk.green(`ā
Performance report saved to: ${reportFile}`));
|
|
424
|
+
return reportFile;
|
|
425
|
+
}
|
|
426
|
+
} catch (error) {
|
|
427
|
+
console.error(chalk.red('ā Error generating report:'), error.message);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
calculateSummaryStats(metrics) {
|
|
432
|
+
if (metrics.length === 0) return {};
|
|
433
|
+
|
|
434
|
+
const cpuValues = metrics.map(m => m.cpu);
|
|
435
|
+
const memoryValues = metrics.map(m => m.memory.percentage);
|
|
436
|
+
const hookTimes = metrics.map(m => m.hooks.averageExecutionTime);
|
|
437
|
+
|
|
438
|
+
return {
|
|
439
|
+
cpu: {
|
|
440
|
+
min: Math.min(...cpuValues),
|
|
441
|
+
max: Math.max(...cpuValues),
|
|
442
|
+
average: cpuValues.reduce((a, b) => a + b, 0) / cpuValues.length
|
|
443
|
+
},
|
|
444
|
+
memory: {
|
|
445
|
+
min: Math.min(...memoryValues),
|
|
446
|
+
max: Math.max(...memoryValues),
|
|
447
|
+
average: memoryValues.reduce((a, b) => a + b, 0) / memoryValues.length
|
|
448
|
+
},
|
|
449
|
+
hooks: {
|
|
450
|
+
min: Math.min(...hookTimes),
|
|
451
|
+
max: Math.max(...hookTimes),
|
|
452
|
+
average: hookTimes.reduce((a, b) => a + b, 0) / hookTimes.length
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
summarizeAlerts(metrics) {
|
|
458
|
+
// Analyze alert patterns from metrics
|
|
459
|
+
return {
|
|
460
|
+
totalAlerts: this.alerts.length,
|
|
461
|
+
criticalAlerts: this.alerts.filter(a => a.type === 'CRITICAL').length,
|
|
462
|
+
warningAlerts: this.alerts.filter(a => a.type === 'WARNING').length,
|
|
463
|
+
mostCommonAlert: 'CPU_USAGE' // Placeholder
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
generateRecommendations(metrics) {
|
|
468
|
+
const recommendations = [];
|
|
469
|
+
|
|
470
|
+
if (metrics.some(m => m.cpu > 80)) {
|
|
471
|
+
recommendations.push('Consider CPU optimization or scaling');
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
if (metrics.some(m => m.memory.percentage > 85)) {
|
|
475
|
+
recommendations.push('Monitor memory usage and implement caching strategies');
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
if (metrics.some(m => m.hooks.averageExecutionTime > 100)) {
|
|
479
|
+
recommendations.push('Optimize hook execution performance');
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
return recommendations;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// CLI Interface
|
|
487
|
+
async function main() {
|
|
488
|
+
const monitor = new Phase4PerformanceMonitor();
|
|
489
|
+
await monitor.initialize();
|
|
490
|
+
|
|
491
|
+
const command = process.argv[2] || 'monitor';
|
|
492
|
+
const interval = parseInt(process.argv[3]) || 30000;
|
|
493
|
+
|
|
494
|
+
switch (command) {
|
|
495
|
+
case 'monitor':
|
|
496
|
+
console.log(chalk.blue('š Starting Phase 4 performance monitoring...'));
|
|
497
|
+
|
|
498
|
+
// Handle graceful shutdown
|
|
499
|
+
process.on('SIGINT', async () => {
|
|
500
|
+
console.log(chalk.yellow('\\nš Received interrupt signal'));
|
|
501
|
+
monitor.stopMonitoring();
|
|
502
|
+
await monitor.generateReport();
|
|
503
|
+
process.exit(0);
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
await monitor.startMonitoring(interval);
|
|
507
|
+
break;
|
|
508
|
+
|
|
509
|
+
case 'report':
|
|
510
|
+
await monitor.generateReport();
|
|
511
|
+
break;
|
|
512
|
+
|
|
513
|
+
case 'help':
|
|
514
|
+
default:
|
|
515
|
+
console.log(chalk.blue('Phase 4 Performance Monitor'));
|
|
516
|
+
console.log();
|
|
517
|
+
console.log('Usage:');
|
|
518
|
+
console.log(' node performance-monitoring.js monitor [interval] - Start monitoring (default: 30s)');
|
|
519
|
+
console.log(' node performance-monitoring.js report - Generate performance report');
|
|
520
|
+
console.log(' node performance-monitoring.js help - Show this help');
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
526
|
+
main().catch(error => {
|
|
527
|
+
console.error(chalk.red('ā Monitor failed:'), error);
|
|
528
|
+
process.exit(1);
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
export { Phase4PerformanceMonitor };
|