@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.
Files changed (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. 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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"}