@nahisaho/musubix-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/musubix.js +18 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +320 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +580 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/cli/base.d.ts +58 -0
- package/dist/cli/base.d.ts.map +1 -0
- package/dist/cli/base.js +93 -0
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/help.d.ts +17 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +228 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +25 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +258 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/coding-standards.d.ts +250 -0
- package/dist/codegen/coding-standards.d.ts.map +1 -0
- package/dist/codegen/coding-standards.js +976 -0
- package/dist/codegen/coding-standards.js.map +1 -0
- package/dist/codegen/coverage-reporter.d.ts +264 -0
- package/dist/codegen/coverage-reporter.d.ts.map +1 -0
- package/dist/codegen/coverage-reporter.js +697 -0
- package/dist/codegen/coverage-reporter.js.map +1 -0
- package/dist/codegen/dependency-analyzer.d.ts +271 -0
- package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
- package/dist/codegen/dependency-analyzer.js +661 -0
- package/dist/codegen/dependency-analyzer.js.map +1 -0
- package/dist/codegen/generator.d.ts +275 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +781 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +27 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/integration-test-generator.d.ts +312 -0
- package/dist/codegen/integration-test-generator.d.ts.map +1 -0
- package/dist/codegen/integration-test-generator.js +765 -0
- package/dist/codegen/integration-test-generator.js.map +1 -0
- package/dist/codegen/pattern-conformance.d.ts +309 -0
- package/dist/codegen/pattern-conformance.d.ts.map +1 -0
- package/dist/codegen/pattern-conformance.js +590 -0
- package/dist/codegen/pattern-conformance.js.map +1 -0
- package/dist/codegen/quality-metrics.d.ts +235 -0
- package/dist/codegen/quality-metrics.d.ts.map +1 -0
- package/dist/codegen/quality-metrics.js +439 -0
- package/dist/codegen/quality-metrics.js.map +1 -0
- package/dist/codegen/security-scanner.d.ts +179 -0
- package/dist/codegen/security-scanner.d.ts.map +1 -0
- package/dist/codegen/security-scanner.js +495 -0
- package/dist/codegen/security-scanner.js.map +1 -0
- package/dist/codegen/static-analyzer.d.ts +188 -0
- package/dist/codegen/static-analyzer.d.ts.map +1 -0
- package/dist/codegen/static-analyzer.js +490 -0
- package/dist/codegen/static-analyzer.js.map +1 -0
- package/dist/codegen/unit-test-generator.d.ts +289 -0
- package/dist/codegen/unit-test-generator.d.ts.map +1 -0
- package/dist/codegen/unit-test-generator.js +634 -0
- package/dist/codegen/unit-test-generator.js.map +1 -0
- package/dist/design/adr-generator.d.ts +227 -0
- package/dist/design/adr-generator.d.ts.map +1 -0
- package/dist/design/adr-generator.js +423 -0
- package/dist/design/adr-generator.js.map +1 -0
- package/dist/design/c4-generator.d.ts +267 -0
- package/dist/design/c4-generator.d.ts.map +1 -0
- package/dist/design/c4-generator.js +453 -0
- package/dist/design/c4-generator.js.map +1 -0
- package/dist/design/framework-optimizer.d.ts +190 -0
- package/dist/design/framework-optimizer.d.ts.map +1 -0
- package/dist/design/framework-optimizer.js +589 -0
- package/dist/design/framework-optimizer.js.map +1 -0
- package/dist/design/index.d.ts +12 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +13 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/pattern-detector.d.ts +270 -0
- package/dist/design/pattern-detector.d.ts.map +1 -0
- package/dist/design/pattern-detector.js +621 -0
- package/dist/design/pattern-detector.js.map +1 -0
- package/dist/design/solid-validator.d.ts +188 -0
- package/dist/design/solid-validator.d.ts.map +1 -0
- package/dist/design/solid-validator.js +579 -0
- package/dist/design/solid-validator.js.map +1 -0
- package/dist/error/data-persistence.d.ts +311 -0
- package/dist/error/data-persistence.d.ts.map +1 -0
- package/dist/error/data-persistence.js +586 -0
- package/dist/error/data-persistence.js.map +1 -0
- package/dist/error/graceful-degradation.d.ts +309 -0
- package/dist/error/graceful-degradation.d.ts.map +1 -0
- package/dist/error/graceful-degradation.js +510 -0
- package/dist/error/graceful-degradation.js.map +1 -0
- package/dist/error/index.d.ts +11 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +19 -0
- package/dist/error/index.js.map +1 -0
- package/dist/explanation/explanation-generator.d.ts +228 -0
- package/dist/explanation/explanation-generator.d.ts.map +1 -0
- package/dist/explanation/explanation-generator.js +662 -0
- package/dist/explanation/explanation-generator.js.map +1 -0
- package/dist/explanation/index.d.ts +11 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +19 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/reasoning-chain.d.ts +314 -0
- package/dist/explanation/reasoning-chain.d.ts.map +1 -0
- package/dist/explanation/reasoning-chain.js +414 -0
- package/dist/explanation/reasoning-chain.js.map +1 -0
- package/dist/explanation/visual-explanation.d.ts +315 -0
- package/dist/explanation/visual-explanation.d.ts.map +1 -0
- package/dist/explanation/visual-explanation.js +667 -0
- package/dist/explanation/visual-explanation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/requirements/decomposer.d.ts +235 -0
- package/dist/requirements/decomposer.d.ts.map +1 -0
- package/dist/requirements/decomposer.js +587 -0
- package/dist/requirements/decomposer.js.map +1 -0
- package/dist/requirements/related-finder.d.ts +261 -0
- package/dist/requirements/related-finder.d.ts.map +1 -0
- package/dist/requirements/related-finder.js +629 -0
- package/dist/requirements/related-finder.js.map +1 -0
- package/dist/traceability/impact.d.ts +196 -0
- package/dist/traceability/impact.d.ts.map +1 -0
- package/dist/traceability/impact.js +438 -0
- package/dist/traceability/impact.js.map +1 -0
- package/dist/traceability/index.d.ts +9 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +10 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/manager.d.ts +266 -0
- package/dist/traceability/manager.d.ts.map +1 -0
- package/dist/traceability/manager.js +412 -0
- package/dist/traceability/manager.js.map +1 -0
- package/dist/types/common.d.ts +294 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +15 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/ears.d.ts +158 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +33 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/errors.d.ts +176 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +55 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/data-protector.d.ts +122 -0
- package/dist/utils/data-protector.d.ts.map +1 -0
- package/dist/utils/data-protector.js +275 -0
- package/dist/utils/data-protector.js.map +1 -0
- package/dist/utils/error-handler.d.ts +101 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +324 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/i18n-manager.d.ts +259 -0
- package/dist/utils/i18n-manager.d.ts.map +1 -0
- package/dist/utils/i18n-manager.js +554 -0
- package/dist/utils/i18n-manager.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +120 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +237 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance-profiler.d.ts +251 -0
- package/dist/utils/performance-profiler.d.ts.map +1 -0
- package/dist/utils/performance-profiler.js +458 -0
- package/dist/utils/performance-profiler.js.map +1 -0
- package/dist/utils/scalability-optimizer.d.ts +294 -0
- package/dist/utils/scalability-optimizer.d.ts.map +1 -0
- package/dist/utils/scalability-optimizer.js +606 -0
- package/dist/utils/scalability-optimizer.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +294 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +630 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/version-compatibility.d.ts +217 -0
- package/dist/utils/version-compatibility.d.ts.map +1 -0
- package/dist/utils/version-compatibility.js +443 -0
- package/dist/utils/version-compatibility.js.map +1 -0
- package/dist/validators/ears-validator.d.ts +182 -0
- package/dist/validators/ears-validator.d.ts.map +1 -0
- package/dist/validators/ears-validator.js +357 -0
- package/dist/validators/ears-validator.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +9 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scalability Optimizer
|
|
3
|
+
*
|
|
4
|
+
* Optimizes system for scalability
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module utils/scalability-optimizer
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-PER-002 - Scalability Optimization
|
|
10
|
+
* @see Article IX - Continuous Adaptation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default configuration
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_SCALABILITY_CONFIG = {
|
|
16
|
+
targetUtilization: 0.7,
|
|
17
|
+
safetyMargin: 0.2,
|
|
18
|
+
scaleUpThreshold: 0.8,
|
|
19
|
+
scaleDownThreshold: 0.3,
|
|
20
|
+
minInstances: 1,
|
|
21
|
+
maxInstances: 10,
|
|
22
|
+
cooldownPeriod: 300000, // 5 minutes
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Scalability Optimizer
|
|
26
|
+
*/
|
|
27
|
+
export class ScalabilityOptimizer {
|
|
28
|
+
config;
|
|
29
|
+
metricsHistory = [];
|
|
30
|
+
loadHistory = [];
|
|
31
|
+
recommendationCounter = 0;
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.config = { ...DEFAULT_SCALABILITY_CONFIG, ...config };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Analyze current metrics
|
|
37
|
+
*/
|
|
38
|
+
analyze(metrics) {
|
|
39
|
+
// Store metrics history
|
|
40
|
+
this.metricsHistory.push(metrics);
|
|
41
|
+
if (this.metricsHistory.length > 100) {
|
|
42
|
+
this.metricsHistory.shift();
|
|
43
|
+
}
|
|
44
|
+
// Record load
|
|
45
|
+
const totalLoad = metrics.reduce((sum, m) => sum + m.usage, 0) / metrics.length;
|
|
46
|
+
this.loadHistory.push(totalLoad);
|
|
47
|
+
if (this.loadHistory.length > 1000) {
|
|
48
|
+
this.loadHistory.shift();
|
|
49
|
+
}
|
|
50
|
+
// Analyze load pattern
|
|
51
|
+
const loadPattern = this.analyzeLoadPattern();
|
|
52
|
+
// Find bottlenecks
|
|
53
|
+
const bottlenecks = this.findBottlenecks(metrics);
|
|
54
|
+
// Generate recommendations
|
|
55
|
+
const recommendations = this.generateRecommendations(metrics, bottlenecks, loadPattern);
|
|
56
|
+
// Calculate scalability score
|
|
57
|
+
const scalabilityScore = this.calculateScalabilityScore(metrics, bottlenecks);
|
|
58
|
+
// Generate summary
|
|
59
|
+
const summary = this.generateSummary(scalabilityScore, bottlenecks, recommendations);
|
|
60
|
+
return {
|
|
61
|
+
timestamp: new Date(),
|
|
62
|
+
metrics,
|
|
63
|
+
loadPattern,
|
|
64
|
+
bottlenecks,
|
|
65
|
+
recommendations,
|
|
66
|
+
scalabilityScore,
|
|
67
|
+
summary,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Analyze load pattern
|
|
72
|
+
*/
|
|
73
|
+
analyzeLoadPattern() {
|
|
74
|
+
if (this.loadHistory.length < 10) {
|
|
75
|
+
return {
|
|
76
|
+
name: 'insufficient-data',
|
|
77
|
+
description: 'Not enough data to determine pattern',
|
|
78
|
+
avgLoad: this.loadHistory.length > 0
|
|
79
|
+
? this.loadHistory.reduce((a, b) => a + b, 0) / this.loadHistory.length
|
|
80
|
+
: 0,
|
|
81
|
+
peakLoad: Math.max(...this.loadHistory, 0),
|
|
82
|
+
variance: 0,
|
|
83
|
+
predictable: false,
|
|
84
|
+
seasonal: false,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const avgLoad = this.loadHistory.reduce((a, b) => a + b, 0) / this.loadHistory.length;
|
|
88
|
+
const peakLoad = Math.max(...this.loadHistory);
|
|
89
|
+
const variance = this.calculateVariance(this.loadHistory, avgLoad);
|
|
90
|
+
// Determine predictability
|
|
91
|
+
const predictable = variance < 0.1;
|
|
92
|
+
// Check for seasonal patterns (simplified)
|
|
93
|
+
const seasonal = this.detectSeasonality();
|
|
94
|
+
let name = 'variable';
|
|
95
|
+
let description = 'Load varies unpredictably';
|
|
96
|
+
if (variance < 0.05) {
|
|
97
|
+
name = 'steady';
|
|
98
|
+
description = 'Load is consistent with minimal variation';
|
|
99
|
+
}
|
|
100
|
+
else if (variance < 0.15) {
|
|
101
|
+
name = 'moderate';
|
|
102
|
+
description = 'Load has moderate variation';
|
|
103
|
+
}
|
|
104
|
+
else if (peakLoad > avgLoad * 2) {
|
|
105
|
+
name = 'spiky';
|
|
106
|
+
description = 'Load has significant spikes';
|
|
107
|
+
}
|
|
108
|
+
if (seasonal) {
|
|
109
|
+
name = 'seasonal-' + name;
|
|
110
|
+
description += ' with seasonal patterns';
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
name,
|
|
114
|
+
description,
|
|
115
|
+
avgLoad,
|
|
116
|
+
peakLoad,
|
|
117
|
+
variance,
|
|
118
|
+
predictable,
|
|
119
|
+
seasonal,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Find bottlenecks
|
|
124
|
+
*/
|
|
125
|
+
findBottlenecks(metrics) {
|
|
126
|
+
const bottlenecks = [];
|
|
127
|
+
for (const metric of metrics) {
|
|
128
|
+
if (metric.usage >= this.config.scaleUpThreshold) {
|
|
129
|
+
const severity = Math.min(1, (metric.usage - this.config.scaleUpThreshold) /
|
|
130
|
+
(1 - this.config.scaleUpThreshold));
|
|
131
|
+
bottlenecks.push({
|
|
132
|
+
resource: metric.type,
|
|
133
|
+
severity,
|
|
134
|
+
description: `${metric.type} utilization at ${(metric.usage * 100).toFixed(1)}%`,
|
|
135
|
+
impact: this.describeImpact(metric.type, severity),
|
|
136
|
+
recommendation: this.getBottleneckRecommendation(metric.type, metric.usage),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Sort by severity
|
|
141
|
+
bottlenecks.sort((a, b) => b.severity - a.severity);
|
|
142
|
+
return bottlenecks;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Describe bottleneck impact
|
|
146
|
+
*/
|
|
147
|
+
describeImpact(resource, severity) {
|
|
148
|
+
const severityText = severity > 0.7 ? 'Critical' : severity > 0.4 ? 'Moderate' : 'Minor';
|
|
149
|
+
switch (resource) {
|
|
150
|
+
case 'cpu':
|
|
151
|
+
return `${severityText} impact on processing speed and response times`;
|
|
152
|
+
case 'memory':
|
|
153
|
+
return `${severityText} risk of out-of-memory errors and degraded performance`;
|
|
154
|
+
case 'io':
|
|
155
|
+
return `${severityText} impact on data throughput and latency`;
|
|
156
|
+
case 'network':
|
|
157
|
+
return `${severityText} impact on network throughput and connection handling`;
|
|
158
|
+
case 'storage':
|
|
159
|
+
return `${severityText} risk of storage exhaustion and write failures`;
|
|
160
|
+
default:
|
|
161
|
+
return `${severityText} impact on system performance`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get bottleneck recommendation
|
|
166
|
+
*/
|
|
167
|
+
getBottleneckRecommendation(resource, usage) {
|
|
168
|
+
const strategy = usage > 0.9 ? 'immediately' : 'soon';
|
|
169
|
+
switch (resource) {
|
|
170
|
+
case 'cpu':
|
|
171
|
+
return `Scale ${strategy} by adding more CPU cores or instances`;
|
|
172
|
+
case 'memory':
|
|
173
|
+
return `Increase memory allocation ${strategy} or optimize memory usage`;
|
|
174
|
+
case 'io':
|
|
175
|
+
return `Upgrade to faster storage or implement caching ${strategy}`;
|
|
176
|
+
case 'network':
|
|
177
|
+
return `Scale network capacity ${strategy} or implement load balancing`;
|
|
178
|
+
case 'storage':
|
|
179
|
+
return `Expand storage capacity ${strategy} or implement data archival`;
|
|
180
|
+
default:
|
|
181
|
+
return `Address resource constraint ${strategy}`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Generate scaling recommendations
|
|
186
|
+
*/
|
|
187
|
+
generateRecommendations(metrics, _bottlenecks, loadPattern) {
|
|
188
|
+
const recommendations = [];
|
|
189
|
+
// Check each resource
|
|
190
|
+
for (const metric of metrics) {
|
|
191
|
+
const recommendation = this.recommendForResource(metric, loadPattern);
|
|
192
|
+
if (recommendation) {
|
|
193
|
+
recommendations.push(recommendation);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Add pattern-based recommendations
|
|
197
|
+
if (loadPattern.name.includes('spiky')) {
|
|
198
|
+
recommendations.push({
|
|
199
|
+
id: `rec-${++this.recommendationCounter}`,
|
|
200
|
+
strategy: 'horizontal',
|
|
201
|
+
resource: 'cpu',
|
|
202
|
+
currentCapacity: 1,
|
|
203
|
+
recommendedCapacity: 1,
|
|
204
|
+
scaleFactor: 1,
|
|
205
|
+
priority: 'medium',
|
|
206
|
+
rationale: 'Spiky load pattern detected. Consider auto-scaling for better responsiveness.',
|
|
207
|
+
costImpact: 'increase',
|
|
208
|
+
steps: [
|
|
209
|
+
'Implement auto-scaling policies',
|
|
210
|
+
'Set scale-up threshold to 70%',
|
|
211
|
+
'Set scale-down threshold to 30%',
|
|
212
|
+
'Configure cooldown period',
|
|
213
|
+
],
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// Sort by priority
|
|
217
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
218
|
+
recommendations.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
|
|
219
|
+
return recommendations;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Recommend for specific resource
|
|
223
|
+
*/
|
|
224
|
+
recommendForResource(metric, loadPattern) {
|
|
225
|
+
const { usage, capacity } = metric;
|
|
226
|
+
// Scale up needed
|
|
227
|
+
if (usage >= this.config.scaleUpThreshold) {
|
|
228
|
+
const scaleFactor = this.calculateScaleFactor(usage, loadPattern.peakLoad);
|
|
229
|
+
const newCapacity = Math.ceil(capacity * scaleFactor);
|
|
230
|
+
return {
|
|
231
|
+
id: `rec-${++this.recommendationCounter}`,
|
|
232
|
+
strategy: this.determineStrategy(metric.type, scaleFactor),
|
|
233
|
+
resource: metric.type,
|
|
234
|
+
currentCapacity: capacity,
|
|
235
|
+
recommendedCapacity: newCapacity,
|
|
236
|
+
scaleFactor,
|
|
237
|
+
priority: usage > 0.9 ? 'high' : 'medium',
|
|
238
|
+
rationale: `${metric.type} utilization (${(usage * 100).toFixed(1)}%) exceeds threshold`,
|
|
239
|
+
costImpact: 'increase',
|
|
240
|
+
steps: this.getScaleUpSteps(metric.type, scaleFactor),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// Scale down possible
|
|
244
|
+
if (usage < this.config.scaleDownThreshold && capacity > this.config.minInstances) {
|
|
245
|
+
const scaleFactor = this.config.targetUtilization / usage;
|
|
246
|
+
const newCapacity = Math.max(this.config.minInstances, Math.floor(capacity / scaleFactor));
|
|
247
|
+
if (newCapacity < capacity) {
|
|
248
|
+
return {
|
|
249
|
+
id: `rec-${++this.recommendationCounter}`,
|
|
250
|
+
strategy: 'horizontal',
|
|
251
|
+
resource: metric.type,
|
|
252
|
+
currentCapacity: capacity,
|
|
253
|
+
recommendedCapacity: newCapacity,
|
|
254
|
+
scaleFactor: newCapacity / capacity,
|
|
255
|
+
priority: 'low',
|
|
256
|
+
rationale: `${metric.type} utilization (${(usage * 100).toFixed(1)}%) allows scaling down`,
|
|
257
|
+
costImpact: 'decrease',
|
|
258
|
+
steps: this.getScaleDownSteps(metric.type),
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Calculate scale factor
|
|
266
|
+
*/
|
|
267
|
+
calculateScaleFactor(currentUsage, peakUsage) {
|
|
268
|
+
const targetUsage = this.config.targetUtilization;
|
|
269
|
+
const safetyMargin = this.config.safetyMargin;
|
|
270
|
+
// Account for peak and add safety margin
|
|
271
|
+
const effectiveTarget = Math.max(currentUsage, peakUsage) * (1 + safetyMargin);
|
|
272
|
+
const factor = effectiveTarget / targetUsage;
|
|
273
|
+
return Math.max(1.2, Math.min(factor, 3.0)); // Cap between 1.2x and 3x
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Determine scaling strategy
|
|
277
|
+
*/
|
|
278
|
+
determineStrategy(resource, scaleFactor) {
|
|
279
|
+
if (scaleFactor > 2) {
|
|
280
|
+
return 'hybrid';
|
|
281
|
+
}
|
|
282
|
+
switch (resource) {
|
|
283
|
+
case 'cpu':
|
|
284
|
+
case 'network':
|
|
285
|
+
return 'horizontal';
|
|
286
|
+
case 'memory':
|
|
287
|
+
case 'storage':
|
|
288
|
+
return scaleFactor > 1.5 ? 'horizontal' : 'vertical';
|
|
289
|
+
case 'io':
|
|
290
|
+
return 'vertical';
|
|
291
|
+
default:
|
|
292
|
+
return 'horizontal';
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get scale up steps
|
|
297
|
+
*/
|
|
298
|
+
getScaleUpSteps(resource, scaleFactor) {
|
|
299
|
+
const steps = [];
|
|
300
|
+
switch (resource) {
|
|
301
|
+
case 'cpu':
|
|
302
|
+
if (scaleFactor > 1.5) {
|
|
303
|
+
steps.push('Add additional instances to handle load');
|
|
304
|
+
steps.push('Configure load balancer to distribute traffic');
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
steps.push('Increase CPU allocation per instance');
|
|
308
|
+
}
|
|
309
|
+
steps.push('Monitor performance after scaling');
|
|
310
|
+
break;
|
|
311
|
+
case 'memory':
|
|
312
|
+
steps.push('Increase memory allocation');
|
|
313
|
+
steps.push('Review memory usage patterns');
|
|
314
|
+
steps.push('Consider caching strategies');
|
|
315
|
+
break;
|
|
316
|
+
case 'io':
|
|
317
|
+
steps.push('Upgrade to faster storage tier');
|
|
318
|
+
steps.push('Implement read caching');
|
|
319
|
+
steps.push('Optimize database queries');
|
|
320
|
+
break;
|
|
321
|
+
case 'network':
|
|
322
|
+
steps.push('Increase network bandwidth allocation');
|
|
323
|
+
steps.push('Configure network load balancing');
|
|
324
|
+
steps.push('Implement connection pooling');
|
|
325
|
+
break;
|
|
326
|
+
case 'storage':
|
|
327
|
+
steps.push('Expand storage capacity');
|
|
328
|
+
steps.push('Implement data lifecycle policies');
|
|
329
|
+
steps.push('Consider data archival');
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
return steps;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get scale down steps
|
|
336
|
+
*/
|
|
337
|
+
getScaleDownSteps(resource) {
|
|
338
|
+
return [
|
|
339
|
+
'Verify sustained low utilization (>15 minutes)',
|
|
340
|
+
`Reduce ${resource} allocation gradually`,
|
|
341
|
+
'Monitor for performance degradation',
|
|
342
|
+
'Keep minimum capacity for reliability',
|
|
343
|
+
];
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Calculate scalability score
|
|
347
|
+
*/
|
|
348
|
+
calculateScalabilityScore(metrics, bottlenecks) {
|
|
349
|
+
let score = 100;
|
|
350
|
+
// Deduct for bottlenecks
|
|
351
|
+
for (const bottleneck of bottlenecks) {
|
|
352
|
+
score -= bottleneck.severity * 20;
|
|
353
|
+
}
|
|
354
|
+
// Deduct for high utilization
|
|
355
|
+
for (const metric of metrics) {
|
|
356
|
+
if (metric.usage > 0.7) {
|
|
357
|
+
score -= (metric.usage - 0.7) * 30;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Deduct for uneven distribution
|
|
361
|
+
if (metrics.length > 1) {
|
|
362
|
+
const usages = metrics.map((m) => m.usage);
|
|
363
|
+
const variance = this.calculateVariance(usages, usages.reduce((a, b) => a + b, 0) / usages.length);
|
|
364
|
+
score -= variance * 20;
|
|
365
|
+
}
|
|
366
|
+
return Math.max(0, Math.min(100, score));
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Generate summary
|
|
370
|
+
*/
|
|
371
|
+
generateSummary(score, bottlenecks, recommendations) {
|
|
372
|
+
const parts = [];
|
|
373
|
+
// Score assessment
|
|
374
|
+
if (score >= 80) {
|
|
375
|
+
parts.push('System is well-scaled with good capacity margins.');
|
|
376
|
+
}
|
|
377
|
+
else if (score >= 60) {
|
|
378
|
+
parts.push('System has moderate scalability with some areas for improvement.');
|
|
379
|
+
}
|
|
380
|
+
else if (score >= 40) {
|
|
381
|
+
parts.push('System has scalability concerns that should be addressed.');
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
parts.push('System has critical scalability issues requiring immediate attention.');
|
|
385
|
+
}
|
|
386
|
+
// Bottlenecks
|
|
387
|
+
if (bottlenecks.length > 0) {
|
|
388
|
+
const critical = bottlenecks.filter((b) => b.severity > 0.7);
|
|
389
|
+
if (critical.length > 0) {
|
|
390
|
+
parts.push(`${critical.length} critical bottleneck(s) detected.`);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Recommendations
|
|
394
|
+
const highPriority = recommendations.filter((r) => r.priority === 'high');
|
|
395
|
+
if (highPriority.length > 0) {
|
|
396
|
+
parts.push(`${highPriority.length} high-priority recommendation(s) available.`);
|
|
397
|
+
}
|
|
398
|
+
return parts.join(' ');
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Create capacity plan
|
|
402
|
+
*/
|
|
403
|
+
createCapacityPlan(name, expectedLoadGrowth, targetDate, currentMetrics) {
|
|
404
|
+
const current = {
|
|
405
|
+
cpu: 0, memory: 0, io: 0, network: 0, storage: 0,
|
|
406
|
+
};
|
|
407
|
+
const planned = {
|
|
408
|
+
cpu: 0, memory: 0, io: 0, network: 0, storage: 0,
|
|
409
|
+
};
|
|
410
|
+
for (const metric of currentMetrics) {
|
|
411
|
+
current[metric.type] = metric.capacity;
|
|
412
|
+
// Calculate needed capacity for expected load
|
|
413
|
+
const currentLoad = metric.usage * metric.capacity;
|
|
414
|
+
const expectedLoad = currentLoad * (1 + expectedLoadGrowth);
|
|
415
|
+
const neededCapacity = expectedLoad / this.config.targetUtilization;
|
|
416
|
+
// Add safety margin
|
|
417
|
+
planned[metric.type] = Math.ceil(neededCapacity * (1 + this.config.safetyMargin));
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
id: `plan-${Date.now()}`,
|
|
421
|
+
name,
|
|
422
|
+
targetDate,
|
|
423
|
+
current,
|
|
424
|
+
planned,
|
|
425
|
+
expectedLoad: 1 + expectedLoadGrowth,
|
|
426
|
+
safetyMargin: this.config.safetyMargin,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Analyze queue metrics
|
|
431
|
+
*/
|
|
432
|
+
analyzeQueue(queue) {
|
|
433
|
+
const utilizationRatio = queue.arrivalRate / queue.processingRate;
|
|
434
|
+
if (utilizationRatio > 1) {
|
|
435
|
+
return {
|
|
436
|
+
healthy: false,
|
|
437
|
+
recommendation: `Queue "${queue.name}" is growing. Increase processing capacity by ${((utilizationRatio - 1) * 100).toFixed(0)}%`,
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
if (queue.length > queue.maxLength * 0.8) {
|
|
441
|
+
return {
|
|
442
|
+
healthy: false,
|
|
443
|
+
recommendation: `Queue "${queue.name}" is near capacity. Consider increasing max length or processing rate`,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
if (queue.avgWaitTime > 1000) {
|
|
447
|
+
return {
|
|
448
|
+
healthy: false,
|
|
449
|
+
recommendation: `Queue "${queue.name}" has high wait times. Add more consumers`,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
healthy: true,
|
|
454
|
+
recommendation: `Queue "${queue.name}" is healthy`,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Analyze throughput
|
|
459
|
+
*/
|
|
460
|
+
analyzeThroughput(throughput) {
|
|
461
|
+
if (throughput.errorRate > 0.05) {
|
|
462
|
+
return {
|
|
463
|
+
healthy: false,
|
|
464
|
+
bottleneck: 'error-rate',
|
|
465
|
+
recommendation: 'High error rate detected. Investigate errors before scaling',
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
if (throughput.latencyP99 > throughput.latencyP50 * 10) {
|
|
469
|
+
return {
|
|
470
|
+
healthy: false,
|
|
471
|
+
bottleneck: 'latency-variance',
|
|
472
|
+
recommendation: 'High latency variance. Check for slow queries or resource contention',
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
if (throughput.rps < throughput.peakRps * 0.5) {
|
|
476
|
+
return {
|
|
477
|
+
healthy: true,
|
|
478
|
+
recommendation: 'Throughput is below peak. Consider scaling down if sustained',
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
return {
|
|
482
|
+
healthy: true,
|
|
483
|
+
recommendation: 'Throughput metrics are healthy',
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Calculate variance
|
|
488
|
+
*/
|
|
489
|
+
calculateVariance(values, mean) {
|
|
490
|
+
if (values.length === 0)
|
|
491
|
+
return 0;
|
|
492
|
+
const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
|
|
493
|
+
return squaredDiffs.reduce((a, b) => a + b, 0) / values.length;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Detect seasonality (simplified)
|
|
497
|
+
*/
|
|
498
|
+
detectSeasonality() {
|
|
499
|
+
if (this.loadHistory.length < 100)
|
|
500
|
+
return false;
|
|
501
|
+
// Check for repeating patterns (very simplified)
|
|
502
|
+
const windowSize = Math.floor(this.loadHistory.length / 4);
|
|
503
|
+
const windows = [];
|
|
504
|
+
for (let i = 0; i < 4; i++) {
|
|
505
|
+
const start = i * windowSize;
|
|
506
|
+
windows.push(this.loadHistory.slice(start, start + windowSize));
|
|
507
|
+
}
|
|
508
|
+
// Compare pattern similarity between windows
|
|
509
|
+
let similarCount = 0;
|
|
510
|
+
for (let i = 1; i < windows.length; i++) {
|
|
511
|
+
const correlation = this.calculateCorrelation(windows[0], windows[i]);
|
|
512
|
+
if (correlation > 0.7)
|
|
513
|
+
similarCount++;
|
|
514
|
+
}
|
|
515
|
+
return similarCount >= 2;
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Calculate correlation
|
|
519
|
+
*/
|
|
520
|
+
calculateCorrelation(a, b) {
|
|
521
|
+
if (a.length !== b.length || a.length === 0)
|
|
522
|
+
return 0;
|
|
523
|
+
const meanA = a.reduce((s, v) => s + v, 0) / a.length;
|
|
524
|
+
const meanB = b.reduce((s, v) => s + v, 0) / b.length;
|
|
525
|
+
let numerator = 0;
|
|
526
|
+
let denomA = 0;
|
|
527
|
+
let denomB = 0;
|
|
528
|
+
for (let i = 0; i < a.length; i++) {
|
|
529
|
+
const diffA = a[i] - meanA;
|
|
530
|
+
const diffB = b[i] - meanB;
|
|
531
|
+
numerator += diffA * diffB;
|
|
532
|
+
denomA += diffA * diffA;
|
|
533
|
+
denomB += diffB * diffB;
|
|
534
|
+
}
|
|
535
|
+
const denominator = Math.sqrt(denomA * denomB);
|
|
536
|
+
return denominator === 0 ? 0 : numerator / denominator;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Format result as string
|
|
540
|
+
*/
|
|
541
|
+
formatResult(result) {
|
|
542
|
+
const lines = [];
|
|
543
|
+
lines.push('# Scalability Analysis Report');
|
|
544
|
+
lines.push('');
|
|
545
|
+
lines.push(`**Generated:** ${result.timestamp.toISOString()}`);
|
|
546
|
+
lines.push(`**Scalability Score:** ${result.scalabilityScore.toFixed(0)}/100`);
|
|
547
|
+
lines.push('');
|
|
548
|
+
lines.push(`**Summary:** ${result.summary}`);
|
|
549
|
+
lines.push('');
|
|
550
|
+
// Load Pattern
|
|
551
|
+
lines.push('## Load Pattern');
|
|
552
|
+
lines.push('');
|
|
553
|
+
lines.push(`- **Type:** ${result.loadPattern.name}`);
|
|
554
|
+
lines.push(`- **Description:** ${result.loadPattern.description}`);
|
|
555
|
+
lines.push(`- **Average Load:** ${(result.loadPattern.avgLoad * 100).toFixed(1)}%`);
|
|
556
|
+
lines.push(`- **Peak Load:** ${(result.loadPattern.peakLoad * 100).toFixed(1)}%`);
|
|
557
|
+
lines.push('');
|
|
558
|
+
// Metrics
|
|
559
|
+
lines.push('## Resource Metrics');
|
|
560
|
+
lines.push('');
|
|
561
|
+
lines.push('| Resource | Usage | Capacity | Status |');
|
|
562
|
+
lines.push('|----------|-------|----------|--------|');
|
|
563
|
+
for (const metric of result.metrics) {
|
|
564
|
+
const status = metric.usage > 0.8 ? '🔴' : metric.usage > 0.6 ? '🟡' : '🟢';
|
|
565
|
+
lines.push(`| ${metric.type} | ${(metric.usage * 100).toFixed(1)}% | ${metric.capacity} | ${status} |`);
|
|
566
|
+
}
|
|
567
|
+
lines.push('');
|
|
568
|
+
// Bottlenecks
|
|
569
|
+
if (result.bottlenecks.length > 0) {
|
|
570
|
+
lines.push('## Bottlenecks');
|
|
571
|
+
lines.push('');
|
|
572
|
+
for (const bottleneck of result.bottlenecks) {
|
|
573
|
+
lines.push(`### ${bottleneck.resource.toUpperCase()}`);
|
|
574
|
+
lines.push(`- **Severity:** ${(bottleneck.severity * 100).toFixed(0)}%`);
|
|
575
|
+
lines.push(`- **Description:** ${bottleneck.description}`);
|
|
576
|
+
lines.push(`- **Impact:** ${bottleneck.impact}`);
|
|
577
|
+
lines.push(`- **Recommendation:** ${bottleneck.recommendation}`);
|
|
578
|
+
lines.push('');
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
// Recommendations
|
|
582
|
+
if (result.recommendations.length > 0) {
|
|
583
|
+
lines.push('## Recommendations');
|
|
584
|
+
lines.push('');
|
|
585
|
+
for (const rec of result.recommendations) {
|
|
586
|
+
const priority = rec.priority === 'high' ? '🔴' : rec.priority === 'medium' ? '🟡' : '🟢';
|
|
587
|
+
lines.push(`### ${priority} ${rec.resource} - ${rec.strategy}`);
|
|
588
|
+
lines.push(`- **Rationale:** ${rec.rationale}`);
|
|
589
|
+
lines.push(`- **Scale Factor:** ${rec.scaleFactor.toFixed(2)}x`);
|
|
590
|
+
lines.push(`- **Steps:**`);
|
|
591
|
+
for (const step of rec.steps) {
|
|
592
|
+
lines.push(` 1. ${step}`);
|
|
593
|
+
}
|
|
594
|
+
lines.push('');
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
return lines.join('\n');
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Create scalability optimizer instance
|
|
602
|
+
*/
|
|
603
|
+
export function createScalabilityOptimizer(config) {
|
|
604
|
+
return new ScalabilityOptimizer(config);
|
|
605
|
+
}
|
|
606
|
+
//# sourceMappingURL=scalability-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalability-optimizer.js","sourceRoot":"","sources":["../../src/utils/scalability-optimizer.ts"],"names":[],"mappings":"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"}
|