blaze-performance-tester 3.1.24 → 3.1.25

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
@@ -467,7 +467,7 @@ function processMetricsTelemetry(requests, durationSec) {
467
467
  const avgTlsMs = mathUtils.mean(requests.map((r) => r.tlsTimeMs || 0));
468
468
  const avgTtfbMs = avgDnsMs + avgTcpMs + avgTlsMs + avgLatencyMs * 0.3;
469
469
  let c1xx = 0, c2xx = 0, c3xx = 0, c4xx = 0, c5xx = 0;
470
- const codeCounts = { 400: 0, 401: 0, 403: 0, 404: 429, 429: 0, 500: 0, 502: 0, 503: 0, 504: 0 };
470
+ const codeCounts = { 400: 0, 401: 0, 403: 0, 404: 0, 429: 0, 500: 0, 502: 0, 503: 0, 504: 0 };
471
471
  requests.forEach((r) => {
472
472
  if (r.statusCode >= 100 && r.statusCode < 200) c1xx++;
473
473
  else if (r.statusCode >= 200 && r.statusCode < 300) c2xx++;
@@ -550,7 +550,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
550
550
  const totalLogCount = semanticReport.clusters.reduce((sum, c) => sum + c.count, 0);
551
551
  const uniquePatternsCount = semanticReport.clusters.length;
552
552
  logClustersHtml = `
553
- <div class="card p-dev" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
553
+ <div class="card" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
554
554
  <h3 style="border-bottom: none; padding-bottom: 0rem; margin-bottom: 0.25rem; display: flex; align-items: center; gap: 0.5rem; color: #ffffff; font-size: 1.2rem;">
555
555
  \u{1F9E0} Semantic Log Clustering & Error Classification
556
556
  </h3>
@@ -598,7 +598,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
598
598
  const finalLatency = history[history.length - 1]?.avgLatency || cards.ttfb;
599
599
  const seoMetrics = calculateSeoImpactMetrics(finalLatency);
600
600
  seoImpactSectionHtml = `
601
- <div class="card p-exec" style="margin-top: 2rem; background: #111a2e; border: 1px solid #1e3a8a;">
601
+ <div class="card" style="margin-top: 2rem; background: #111a2e; border: 1px solid #1e3a8a;">
602
602
  <h3 style="color: #f43f5e; display: flex; align-items: center; gap: 0.6rem; font-size: 1.2rem; border-bottom: 1px solid #1e293b; padding-bottom: 0.5rem;">
603
603
  \u{1F50E} SEO Rank Impact & Visibility Loss Predictor
604
604
  </h3>
@@ -621,7 +621,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
621
621
  </div>`;
622
622
  }
623
623
  const liveAdjusterHtml = `
624
- <div class="card p-devops" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
624
+ <div class="card" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
625
625
  <h3 style="color: #38bdf8; display: flex; align-items: center; gap: 0.5rem; font-size: 1.2rem; margin-bottom: 1rem;">
626
626
  \u{1F39B}\uFE0F Live Concurrency Adjuster (Mid-Test Simulation)
627
627
  </h3>
@@ -663,11 +663,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
663
663
  h1 { color: #38bdf8; margin: 0; font-size: 2rem; }
664
664
  .meta { color: #94a3b8; font-size: 0.9rem; margin-top: 0.5rem; }
665
665
 
666
- /* Persona Controls Styling */
667
- .persona-toggle-container { background: #131c2e; padding: 0.5rem 1rem; border-radius: 8px; border: 1px solid #1e293b; display: flex; align-items: center; gap: 0.75rem; }
668
- .persona-btn { background: #090d16; border: 1px solid #1e293b; color: #94a3b8; padding: 0.4rem 1rem; font-size: 0.85rem; font-weight: 600; border-radius: 6px; cursor: pointer; transition: all 0.2s ease; }
669
- .persona-btn.active { background: #38bdf8; border-color: #38bdf8; color: #0b111e; }
670
-
671
666
  .cards-wrapper { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-bottom: 1.5rem; }
672
667
  .metric-card { background: #131c2e; border: 1px solid #1e293b; border-radius: 6px; padding: 1.25rem; position: relative; }
673
668
  .card-title { font-size: 0.75rem; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; }
@@ -720,59 +715,51 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
720
715
  <h1>\u{1F525} Blaze Core Performance Analysis</h1>
721
716
  <div class="meta">Target Script: <code>${config.targetScript}</code></div>
722
717
  </div>
723
-
724
- <!-- Persona View Switcher Selector Elements -->
725
- <div class="persona-toggle-container">
726
- <span style="font-size: 0.8rem; color: #64748b; font-weight: bold; text-transform: uppercase;">View Perspective:</span>
727
- <button class="persona-btn active" onclick="switchPersona('developer', this)">Developer</button>
728
- <button class="persona-btn" onclick="switchPersona('devops', this)">DevOps</button>
729
- <button class="persona-btn" onclick="switchPersona('executive', this)">Executive</button>
730
- </div>
731
718
  </div>
732
719
 
733
720
  <div class="cards-wrapper">
734
- <div class="metric-card p-dev">
721
+ <div class="metric-card">
735
722
  <div class="card-title">Apdex Score (T: 50ms)</div>
736
723
  <div class="card-value green">${cards.apdex.toFixed(2)}<span class="card-subtext">(Good)</span></div>
737
724
  </div>
738
- <div class="metric-card p-devops p-exec">
725
+ <div class="metric-card">
739
726
  <div class="card-title">Throughput</div>
740
727
  <div class="card-value orange">${cards.throughput.toFixed(1)}<span class="unit">/s</span></div>
741
728
  </div>
742
- <div class="metric-card p-devops">
729
+ <div class="metric-card">
743
730
  <div class="card-title">Network Bandwidth</div>
744
731
  <div class="card-value purple">${cards.bandwidth.toFixed(2)}<span class="unit">MB/s</span></div>
745
732
  </div>
746
- <div class="metric-card p-devops">
733
+ <div class="metric-card">
747
734
  <div class="card-title">Avg Time To First Byte</div>
748
735
  <div class="card-value">${cards.ttfb.toFixed(1)}<span class="unit">ms</span></div>
749
736
  </div>
750
- <div class="metric-card p-dev">
737
+ <div class="metric-card">
751
738
  <div class="card-title">DNS Lookup</div>
752
739
  <div class="card-value">${cards.dns.toFixed(2)}<span class="unit">ms</span></div>
753
740
  </div>
754
- <div class="metric-card p-dev">
741
+ <div class="metric-card">
755
742
  <div class="card-title">TCP Connect</div>
756
743
  <div class="card-value">${cards.tcp.toFixed(2)}<span class="unit">ms</span></div>
757
744
  </div>
758
- <div class="metric-card p-dev">
745
+ <div class="metric-card">
759
746
  <div class="card-title">TLS Handshake</div>
760
747
  <div class="card-value">${cards.tls.toFixed(2)}<span class="unit">ms</span></div>
761
748
  </div>
762
- <div class="metric-card p-dev p-exec">
749
+ <div class="metric-card">
763
750
  <div class="card-title">Stability (Std Dev)</div>
764
751
  <div class="card-value">&plusmn;${cards.stdDev.toFixed(1)}<span class="unit">ms</span></div>
765
752
  </div>
766
753
  </div>
767
754
 
768
755
  <div class="top-layout-grid">
769
- <div class="verdict-box p-devops p-exec">
756
+ <div class="verdict-box">
770
757
  <div class="verdict-title">\u{1F916} AI Stress-Testing Agent Verdict</div>
771
758
  <div class="verdict-text">${verdictReason}</div>
772
759
  <div class="verdict-waves">${waveListItems}</div>
773
760
  </div>
774
761
 
775
- <div class="gauge-container-box p-exec p-devops">
762
+ <div class="gauge-container-box">
776
763
  <div class="gauge-title">Blaze Run Health Score</div>
777
764
  <div style="position: relative; width: 140px; height: 140px; display: flex; align-items: center; justify-content: center;">
778
765
  <svg width="140" height="140" viewBox="0 0 140 140" style="transform: rotate(-90deg);">
@@ -788,7 +775,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
788
775
  </div>
789
776
  </div>
790
777
 
791
- <div class="matrix-box p-devops p-dev">
778
+ <div class="matrix-box">
792
779
  <div>
793
780
  <div class="matrix-title">\u{1F4CB} HTTP Response Matrix</div>
794
781
  <div class="matrix-row">
@@ -817,28 +804,28 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
817
804
  </div>
818
805
 
819
806
  <div class="charts-grid">
820
- <div class="graph-card p-devops">
807
+ <div class="graph-card">
821
808
  <div class="graph-title">\u{1F4CA} Throughput Velocity & Workload Volume</div>
822
809
  <div style="height: 280px; position: relative;">
823
810
  <canvas id="volumeChart"></canvas>
824
811
  </div>
825
812
  </div>
826
813
 
827
- <div class="graph-card p-devops">
814
+ <div class="graph-card">
828
815
  <div class="graph-title">\u{1F504} Active Concurrency (VUs) vs. TTF Trend</div>
829
816
  <div style="height: 280px; position: relative;">
830
817
  <canvas id="concurrencyChart"></canvas>
831
818
  </div>
832
819
  </div>
833
820
 
834
- <div class="graph-card p-dev">
821
+ <div class="graph-card">
835
822
  <div class="graph-title">\u{1F369} HTTP Status Code Proportions</div>
836
823
  <div style="height: 280px; position: relative;">
837
824
  <canvas id="statusDonutChart"></canvas>
838
825
  </div>
839
826
  </div>
840
827
 
841
- <div class="graph-card p-dev">
828
+ <div class="graph-card">
842
829
  <div class="graph-title">\u{1F4C8} Time-to-First-Byte Scatter Plot</div>
843
830
  <div style="height: 280px; position: relative;">
844
831
  <canvas id="ttfbScatterChart"></canvas>
@@ -846,7 +833,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
846
833
  </div>
847
834
  </div>
848
835
 
849
- <div class="card p-dev">
836
+ <div class="card">
850
837
  <h3>Telemetry Matrix Logs</h3>
851
838
  <table>
852
839
  <thead>
@@ -894,39 +881,8 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
894
881
  simThroughput.textContent = (baseThroughput * Math.min(factor, 2.5)).toFixed(0) + '/s';
895
882
  });
896
883
  }
897
-
898
- // Global register tracking charts for explicit redraw logic execution
899
- const activeCharts = [];
900
-
901
- function switchPersona(persona, targetBtn) {
902
- if (targetBtn) {
903
- document.querySelectorAll('.persona-btn').forEach(btn => btn.classList.remove('active'));
904
- targetBtn.classList.add('active');
905
- }
906
-
907
- // Hide all dynamic viewport configurations
908
- const layouts = ['.p-dev', '.p-devops', '.p-exec'];
909
- layouts.forEach(selector => {
910
- document.querySelectorAll(selector).forEach(el => el.style.display = 'none');
911
- });
912
-
913
- // Target current selector views for block visibility execution
914
- document.querySelectorAll('.p-' + persona).forEach(el => {
915
- if (el.tagName === 'TR') el.style.display = 'table-row';
916
- else if (el.classList.contains('metric-card')) el.style.display = 'block';
917
- else el.style.display = '';
918
- });
919
-
920
- // AUTO-REFRESH IMPLEMENTATION: Triggers sizing layout re-calculations on unhidden canvases
921
- activeCharts.forEach(chart => {
922
- if (chart) {
923
- chart.resize();
924
- chart.update('active');
925
- }
926
- });
927
- }
928
884
 
929
- activeCharts.push(new Chart(document.getElementById('volumeChart'), {
885
+ new Chart(document.getElementById('volumeChart'), {
930
886
  type: 'bar',
931
887
  data: {
932
888
  labels: labels,
@@ -936,9 +892,9 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
936
892
  ]
937
893
  },
938
894
  options: { responsive: true, maintainAspectRatio: false, scales: { x: { grid: { color: '#1e293b' } }, y: { stacked: true, grid: { color: '#1e293b' } } } }
939
- }));
895
+ });
940
896
 
941
- activeCharts.push(new Chart(document.getElementById('concurrencyChart'), {
897
+ new Chart(document.getElementById('concurrencyChart'), {
942
898
  type: 'line',
943
899
  data: {
944
900
  labels: labels,
@@ -948,26 +904,22 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
948
904
  ]
949
905
  },
950
906
  options: { responsive: true, maintainAspectRatio: false }
951
- }));
907
+ });
952
908
 
953
- activeCharts.push(new Chart(document.getElementById('statusDonutChart'), {
909
+ new Chart(document.getElementById('statusDonutChart'), {
954
910
  type: 'doughnut',
955
911
  data: {
956
912
  labels: ['Success', 'Client Err', 'Server Err'],
957
913
  datasets: [{ data: [${responseMatrix.total2xx}, ${responseMatrix.total4xx}, ${responseMatrix.total5xx}], backgroundColor: ['#4ade80', '#fde047', '#f87171'] }]
958
914
  },
959
915
  options: { responsive: true, maintainAspectRatio: false }
960
- }));
916
+ });
961
917
 
962
- activeCharts.push(new Chart(document.getElementById('ttfbScatterChart'), {
918
+ new Chart(document.getElementById('ttfbScatterChart'), {
963
919
  type: 'scatter',
964
920
  data: { datasets: [{ label: 'Processing Delay', data: ${JSON.stringify(scatterPoints)}, backgroundColor: '#a855f7' }] },
965
921
  options: { responsive: true, maintainAspectRatio: false }
966
- }));
967
-
968
- // Bootstrapped configuration state defaults dashboard load view to Developer
969
- document.querySelectorAll('.p-devops, .p-exec').forEach(el => el.style.display = 'none');
970
- document.querySelectorAll('.p-dev').forEach(el => el.style.display = '');
922
+ });
971
923
  </script></body></html>`;
972
924
  try {
973
925
  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.1.24",
3
+ "version": "3.1.25",
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",