blaze-performance-tester 3.2.36 → 3.2.38

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 (2) hide show
  1. package/dist/cli.js +47 -6
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -5605,7 +5605,6 @@ var i18n = {
5605
5605
  breakdown: "\u{1F522} HTTP Status Code Breakdown Rate",
5606
5606
  code: "Code"
5607
5607
  },
5608
- rca: "\u26A1 Gemini 2.5 Flash Autonomous Root Cause Analysis (RCA)",
5609
5608
  charts: {
5610
5609
  volume: "\u{1F4CA} Throughput Velocity & Workload Volume",
5611
5610
  concurrency: "\u{1F504} Active Concurrency (VUs) vs. TTF Trend & AI Load Forecast",
@@ -5657,7 +5656,7 @@ var i18n = {
5657
5656
  breakdown: "\u{1F522} Tasa de Desglose de C\xF3digos HTTP",
5658
5657
  code: "C\xF3digo"
5659
5658
  },
5660
- rca: "\u26A1 An\xE1lisis de Causa Ra\xEDz (RCA) de Gemini 2.5 Flash",
5659
+ rca: "\u26A1 Gemini 2.5 Flash Autonomous Root Cause Analysis (RCA)",
5661
5660
  charts: {
5662
5661
  volume: "\u{1F4CA} Velocidad de Rendimiento y Carga de Trabajo",
5663
5662
  concurrency: "\u{1F504} Concurrencia (VUs) vs Tendencia TTF",
@@ -5697,7 +5696,7 @@ var i18n = {
5697
5696
  verdict: "\u{1F916} \u062D\u0643\u0645 \u0648\u0643\u064A\u0644 \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062C\u0647\u062F \u0628\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A",
5698
5697
  health: {
5699
5698
  title: "\u0646\u0642\u0627\u0637 \u0635\u062D\u0629 \u062A\u0634\u063A\u064A\u0644 \u0628\u0644\u064A\u0632",
5700
- subtitle: "\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0631\u0643\u0628 \u0644\u0645\u062D\u0631\u0643 \u0627\u0644\u062C\u0648\u062F\u0629"
5699
+ subtitle: "\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0631\u0643\u0628\u0629 \u0644\u0645\u062D\u0631\u0643 \u0627\u0644\u062C\u0648\u062F\u0629"
5701
5700
  },
5702
5701
  matrix: {
5703
5702
  title: "\u{1F4CB} \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0633\u062A\u062C\u0627\u0628\u0629 HTTP",
@@ -5867,7 +5866,7 @@ var i18n = {
5867
5866
  title: "\u0DA7\u0DD9\u0DBD\u0DD2\u0DB8\u0DD9\u0DA7\u0DCA\u200D\u0DBB\u0DD2 \u0D85\u0DB1\u0DD4\u0D9A\u0DD8\u0DAD\u0DD2 \u0DBD\u0DDC\u0D9C\u0DCA",
5868
5867
  threads: "\u0DC3\u0DB8\u0D9C\u0DCF\u0DB8\u0DD3\u0DAD\u0DCA\u0DC0\u0DBA (Threads)",
5869
5868
  throughput: "\u0DB4\u0DCA\u200D\u0DBB\u0DC0\u0DCF\u0DC4 \u0D85\u0DB1\u0DD4\u0DB4\u0DCF\u0DAD\u0DBA",
5870
- avgLatency: "\u0DC3\u0DCF\u0DB8\u0DCF\u0DB1\u0DCA\u200D\u0DBA \u0DB4\u0DCA\u200D\u0DBB\u0DB8\u0DCF\u0DAF\u0DBA",
5869
+ avgLatency: "\u0DC3\u0DCF\u0DB8\u0DCF\u0DB1\u0DCA\u200D\u0E22 \u0DB4\u0DCA\u200D\u0DBB\u0DB8\u0DCF\u0DAF\u0DBA",
5871
5870
  p95: "P95 \u0DB4\u0DCA\u200D\u0DBB\u0DB8\u0DCF\u0DAF\u0DBA",
5872
5871
  errors: "\u0DAF\u0DDD\u0DC2 \u0D85\u0DB1\u0DD4\u0DB4\u0DCF\u0DAD\u0DBA",
5873
5872
  status: "\u0DAD\u0DAD\u0DCA\u0DC0\u0DBA",
@@ -6391,7 +6390,8 @@ async function runIntelligentAgenticStressTest(config) {
6391
6390
  apdex: metrics.apdexScore,
6392
6391
  throughput: metrics.requestsPerSecond,
6393
6392
  successRequests: metrics.c2xx + metrics.c3xx,
6394
- failedRequests: metrics.c4xx + metrics.c5xx
6393
+ failedRequests: metrics.c4xx + metrics.c5xx,
6394
+ c429: metrics.codeCounts[429] || 0
6395
6395
  };
6396
6396
  printMatrixDashboard(metrics, currentThreads);
6397
6397
  history.push(currentState);
@@ -6488,7 +6488,8 @@ async function runStandardStressTest(config) {
6488
6488
  apdex: metrics.apdexScore,
6489
6489
  throughput: metrics.requestsPerSecond,
6490
6490
  successRequests: metrics.c2xx + metrics.c3xx,
6491
- failedRequests: metrics.c4xx + metrics.c5xx
6491
+ failedRequests: metrics.c4xx + metrics.c5xx,
6492
+ c429: metrics.codeCounts[429] || 0
6492
6493
  }];
6493
6494
  let semanticReport = null;
6494
6495
  if (config.clusterLogs) {
@@ -6703,6 +6704,11 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
6703
6704
  const estimatedMonthlyCost = (cards.throughput * 0.045 * 24 * 30).toFixed(2);
6704
6705
  const recommendedCpuCores = Math.max(2, Math.ceil(cards.saturationKneePoint / 75));
6705
6706
  const recommendedRamGb = recommendedCpuCores * 2;
6707
+ const recThreadsTarget = cards.healthScore >= 85 ? Math.floor(cards.saturationKneePoint * 1.5) : Math.max(5, Math.floor(cards.saturationKneePoint * 0.8));
6708
+ const recRampPattern = cards.errorRate > 0.02 || cards.stdDev > 50 ? `Gradual Linear Ramp-Up (${Math.max(30, config.durationSec * 0.3)}s duration)` : "Standard Fast Step Load Profile";
6709
+ const recStrategyText = cards.healthScore >= 85 ? "System exhibits reliable resource headroom. Future stress waves can step up thread footprints confidently." : "Resource degradation detected under peak stress. Restrict thread allocation caps and extend your warm-up timelines.";
6710
+ const rateLimitWave = history.find((h) => h.c429 > 0);
6711
+ const rateLimitBreakpointHtml = rateLimitWave ? `<span style="color: #ef4444; font-weight: bold;">${rateLimitWave.throughput.toFixed(1)} req/s</span> (at ${rateLimitWave.threads} VUs concurrency tier)` : `<span style="color: #10b981; font-weight: bold;">Not Triggered</span> (Gateway did not enforce any 429 constraints during stress thresholds)`;
6706
6712
  const firstTimestamp = rawRequests[0]?.timestampMs || Date.now();
6707
6713
  const scatterPoints = rawRequests.slice(0, 180).map((r) => ({
6708
6714
  x: Number(((r.timestampMs - firstTimestamp) / 1e3).toFixed(2)),
@@ -6993,6 +6999,41 @@ ${formattedTicketLogs}
6993
6999
  </div>
6994
7000
  </div>
6995
7001
 
7002
+ <!-- \u{1F4A1} Smart Config Recommendation Cards Feature -->
7003
+ <div class="card" style="margin-bottom: 2rem; background: #0f172a; border: 1px dashed #38bdf8;">
7004
+ <h3 style="color: #38bdf8; display: flex; align-items: center; gap: 0.6rem; font-size: 1.2rem; border-bottom: 1px solid #1e293b; padding-bottom: 0.5rem;">
7005
+ \u{1F4A1} Smart Config Recommendation Cards
7006
+ </h3>
7007
+ <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-top: 1rem;">
7008
+ <div style="background: #131c2e; padding: 1.25rem; border-radius: 6px; border: 1px solid #1e293b;">
7009
+ <div class="card-title" style="color: #94a3b8;">Suggested Concurrency Limit</div>
7010
+ <div style="font-size: 1.8rem; font-weight: bold; color: #38bdf8; margin-top: 0.25rem;">${recThreadsTarget} <span style="font-size: 0.9rem; font-weight: 500; color: #94a3b8;">Target Threads</span></div>
7011
+ <div style="font-size: 0.85rem; color: #cbd5e1; margin-top: 0.5rem; line-height: 1.4;">Based on your capacity limits and saturation markers.</div>
7012
+ </div>
7013
+ <div style="background: #131c2e; padding: 1.25rem; border-radius: 6px; border: 1px solid #1e293b;">
7014
+ <div class="card-title" style="color: #94a3b8;">Ideal Ramp-Up Pattern</div>
7015
+ <div style="font-size: 1.2rem; font-weight: bold; color: #f43f5e; margin-top: 0.5rem; line-height: 1.3;">${recRampPattern}</div>
7016
+ <div style="font-size: 0.85rem; color: #cbd5e1; margin-top: 0.5rem; line-height: 1.4;">Derived from variance calculations and request error trends.</div>
7017
+ </div>
7018
+ </div>
7019
+ <div style="margin-top: 1.25rem; background: #090d16; padding: 0.75rem 1rem; border-radius: 4px; font-size: 0.9rem; border-inline-start: 4px solid #38bdf8; color: #cbd5e1;">
7020
+ <strong>Strategic Forecast:</strong> ${recStrategyText}
7021
+ </div>
7022
+ </div>
7023
+
7024
+ <!-- \u{1F6D1} Rate-Limit Enforcement Breakpoint Walls -->
7025
+ <div class="card" style="margin-bottom: 2rem; background: #191316; border: 1px solid #f43f5e;">
7026
+ <h3 style="color: #f43f5e; display: flex; align-items: center; gap: 0.6rem; font-size: 1.2rem; border-bottom: 1px solid #2e181f; padding-bottom: 0.5rem;">
7027
+ \u{1F6D1} Rate-Limit Enforcement Breakpoint Wall
7028
+ </h3>
7029
+ <div style="padding: 0.5rem 0; font-size: 0.95rem; color: #e2e8f0; line-height: 1.5;">
7030
+ Identifies the boundary capacity vector indicating exactly at what transaction velocity structural HTTP <code>429 Too Many Requests</code> errors are initiated by target enforcement mechanisms:
7031
+ <div style="font-size: 1.4rem; margin-top: 0.75rem; color: #ffffff; background: #0f0a0d; padding: 0.75rem 1rem; border-radius: 6px; border: 1px solid #3a1c24;">
7032
+ ${rateLimitBreakpointHtml}
7033
+ </div>
7034
+ </div>
7035
+ </div>
7036
+
6996
7037
  ${baselineComparisonHtml}
6997
7038
  ${crossBrowserMatrixSectionHtml}
6998
7039
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blaze-performance-tester",
3
- "version": "3.2.36",
3
+ "version": "3.2.38",
4
4
  "description": "A high-performance, multi-threaded load testing engine built with Rust and QuickJS.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",