blaze-performance-tester 3.0.33 → 3.0.36

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/dist/cli.js CHANGED
@@ -217,7 +217,7 @@ async function runIntelligentAgenticStressTest(config) {
217
217
  console.log("\u{1F680} Initializing Intelligent Autonomous Load Agent...");
218
218
  const history = [];
219
219
  let aggregateErrorLogs = [];
220
- let total2xx = 0, total3xx = 0, total4xx = 0, total5xx = 0;
220
+ let total1xx = 0, total2xx = 0, total3xx = 0, total4xx = 0, total5xx = 0;
221
221
  let globalMetricsAccumulator = { dns: [], tcp: [], tls: [], ttfb: [], latencies: [], bandwidths: [] };
222
222
  let currentThreads = Math.min(config.maxThreads, Math.max(5, Math.floor(config.maxThreads * 0.2)));
223
223
  let baseStep = config.stepSize;
@@ -230,6 +230,7 @@ async function runIntelligentAgenticStressTest(config) {
230
230
  if (config.clusterLogs) {
231
231
  aggregateErrorLogs = aggregateErrorLogs.concat(rawErrors);
232
232
  }
233
+ total1xx += metrics.c1xx;
233
234
  total2xx += metrics.c2xx;
234
235
  total3xx += metrics.c3xx;
235
236
  total4xx += metrics.c4xx;
@@ -302,7 +303,7 @@ async function runIntelligentAgenticStressTest(config) {
302
303
  saturationKneePoint: saturationKneePoint || history[history.length - 1]?.threads || 50
303
304
  };
304
305
  generateFinalAgentReport(history);
305
- exportHtmlDashboard(history, config, verdictReason, semanticReport, { total2xx, total3xx, total4xx, total5xx }, finalSummaryCards);
306
+ exportHtmlDashboard(history, config, verdictReason, semanticReport, { total1xx, total2xx, total3xx, total4xx, total5xx }, finalSummaryCards);
306
307
  }
307
308
  async function runStandardStressTest(config) {
308
309
  console.log(`\u{1F3CB}\uFE0F Running Standard Stress Test [Threads: ${config.threads} | Duration: ${config.durationSec}s]`);
@@ -339,6 +340,7 @@ async function runStandardStressTest(config) {
339
340
  const isPassed = metrics.apdexScore >= config.targetApdex && metrics.errorRate <= config.targetErrorRate;
340
341
  const verdictReason = isPassed ? "Static single-wave baseline checks concluded successfully without triggering health boundaries." : "Static verification loop completed with values exceeding defined quality thresholds.";
341
342
  exportHtmlDashboard(history, config, verdictReason, semanticReport, {
343
+ total1xx: metrics.c1xx,
342
344
  total2xx: metrics.c2xx,
343
345
  total3xx: metrics.c3xx,
344
346
  total4xx: metrics.c4xx,
@@ -396,9 +398,10 @@ function processMetricsTelemetry(requests, durationSec) {
396
398
  const avgTcpMs = mathUtils.mean(requests.map((r) => r.tcpTimeMs || 0));
397
399
  const avgTlsMs = mathUtils.mean(requests.map((r) => r.tlsTimeMs || 0));
398
400
  const avgTtfbMs = avgDnsMs + avgTcpMs + avgTlsMs + avgLatencyMs * 0.3;
399
- let c2xx = 0, c3xx = 0, c4xx = 0, c5xx = 0;
401
+ let c1xx = 0, c2xx = 0, c3xx = 0, c4xx = 0, c5xx = 0;
400
402
  requests.forEach((r) => {
401
- if (r.statusCode >= 200 && r.statusCode < 300) c2xx++;
403
+ if (r.statusCode >= 100 && r.statusCode < 200) c1xx++;
404
+ else if (r.statusCode >= 200 && r.statusCode < 300) c2xx++;
402
405
  else if (r.statusCode >= 300 && r.statusCode < 400) c3xx++;
403
406
  else if (r.statusCode >= 400 && r.statusCode < 500) c4xx++;
404
407
  else if (r.statusCode >= 500) c5xx++;
@@ -418,6 +421,7 @@ function processMetricsTelemetry(requests, durationSec) {
418
421
  p95LatencyMs,
419
422
  errorRate,
420
423
  apdexScore,
424
+ c1xx,
421
425
  c2xx,
422
426
  c3xx,
423
427
  c4xx,
@@ -592,13 +596,14 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
592
596
  .matrix-box .matrix-row:last-child { border-bottom: none; }
593
597
  .matrix-label { font-size: 0.9rem; color: #f8fafc; display: flex; align-items: center; gap: 0.5rem; }
594
598
  .matrix-badge { font-size: 0.7rem; font-weight: bold; padding: 0.1rem 0.3rem; border-radius: 4px; }
599
+ .badge-1xx { background: rgba(56, 189, 248, 0.2); color: #38bdf8; }
595
600
  .badge-2xx { background: rgba(22, 163, 74, 0.2); color: #4ade80; }
596
601
  .badge-3xx { background: rgba(148, 163, 184, 0.2); color: #cbd5e1; }
597
602
  .badge-4xx { background: rgba(234, 179, 8, 0.2); color: #fde047; }
598
603
  .badge-5xx { background: rgba(220, 38, 38, 0.2); color: #f87171; }
599
604
  .matrix-value { font-size: 1rem; font-weight: bold; color: #ffffff; }
600
605
 
601
- .charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 2rem; }
606
+ .charts-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; margin-bottom: 2rem; }
602
607
  .graph-card { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.5rem; }
603
608
  .graph-title { font-size: 1.1rem; font-weight: 700; color: #ffffff; margin-bottom: 1.2rem; display: flex; align-items: center; gap: 0.5rem; }
604
609
 
@@ -661,6 +666,10 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
661
666
 
662
667
  <div class="matrix-box">
663
668
  <div class="matrix-title">\u{1F4CB} HTTP Response Matrix</div>
669
+ <div class="matrix-row">
670
+ <div class="matrix-label">Informational <span class="matrix-badge badge-1xx">1xx</span></div>
671
+ <div class="matrix-value">${responseMatrix.total1xx}</div>
672
+ </div>
664
673
  <div class="matrix-row">
665
674
  <div class="matrix-label">Successful <span class="matrix-badge badge-2xx">2xx</span></div>
666
675
  <div class="matrix-value">${responseMatrix.total2xx}</div>
@@ -689,11 +698,18 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
689
698
  </div>
690
699
 
691
700
  <div class="graph-card">
692
- <div class="graph-title">\u{1F504} Active Concurrency (VUs) vs. Time-to-Failure (TTF) Trend</div>
701
+ <div class="graph-title">\u{1F504} Active Concurrency (VUs) vs. TTF Trend</div>
693
702
  <div style="height: 280px; position: relative;">
694
703
  <canvas id="concurrencyChart"></canvas>
695
704
  </div>
696
705
  </div>
706
+
707
+ <div class="graph-card">
708
+ <div class="graph-title">\u{1F369} HTTP Status Code Proportions</div>
709
+ <div style="height: 280px; position: relative;">
710
+ <canvas id="statusDonutChart"></canvas>
711
+ </div>
712
+ </div>
697
713
  </div>
698
714
 
699
715
  <div class="card">
@@ -824,6 +840,27 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
824
840
  }
825
841
  }
826
842
  });
843
+
844
+ new Chart(document.getElementById('statusDonutChart'), {
845
+ type: 'doughnut',
846
+ data: {
847
+ labels: ['1xx Info', '2xx Success', '3xx Redirect', '4xx Client Err', '5xx Server Err'],
848
+ datasets: [{
849
+ data: [${responseMatrix.total1xx}, ${responseMatrix.total2xx}, ${responseMatrix.total3xx}, ${responseMatrix.total4xx}, ${responseMatrix.total5xx}],
850
+ backgroundColor: ['#38bdf8', '#4ade80', '#cbd5e1', '#fde047', '#f87171'],
851
+ borderWidth: 1,
852
+ borderColor: '#1e293b'
853
+ }]
854
+ },
855
+ options: {
856
+ responsive: true,
857
+ maintainAspectRatio: false,
858
+ plugins: {
859
+ legend: { position: 'top', labels: { color: '#94a3b8', font: { size: 11 } } }
860
+ },
861
+ cutout: '65%'
862
+ }
863
+ });
827
864
  </script></body></html>`;
828
865
  try {
829
866
  fs.writeFileSync(config.outputHtml, htmlContent, "utf-8");
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blaze-performance-tester",
3
- "version": "3.0.33",
3
+ "version": "3.0.36",
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",