blaze-performance-tester 3.1.23 → 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
@@ -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>
@@ -640,26 +640,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
640
640
  </div>
641
641
  </div>
642
642
  </div>`;
643
- const rightSizingHtml = `
644
- <div class="card p-devops p-exec" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
645
- <h3 style="color: #38bdf8; display: flex; align-items: center; gap: 0.5rem; font-size: 1.2rem;">
646
- \u2601\uFE0F Infrastructure Right-Sizing & Cloud Cost Projections
647
- </h3>
648
- <div style="grid-template-columns: repeat(3, 1fr); display: grid; gap: 1rem; margin-top: 1rem;">
649
- <div style="background: #090d16; padding: 1rem; border-radius: 6px; border: 1px solid #1e293b;">
650
- <div class="card-title">Est. Monthly Cloud Cost</div>
651
- <div class="card-value green">$${estimatedMonthlyCost} <span class="unit">/mo</span></div>
652
- </div>
653
- <div style="background: #090d16; padding: 1rem; border-radius: 6px; border: 1px solid #1e293b;">
654
- <div class="card-title">Recommended CPU Right-Sizing</div>
655
- <div class="card-value purple">${recommendedCpuCores} <span class="unit">vCores</span></div>
656
- </div>
657
- <div style="background: #090d16; padding: 1rem; border-radius: 6px; border: 1px solid #1e293b;">
658
- <div class="card-title">Recommended Memory Allocation</div>
659
- <div class="card-value orange">${recommendedRamGb} <span class="unit">GB RAM</span></div>
660
- </div>
661
- </div>
662
- </div>`;
663
643
  const breakdownRates = responseMatrix.breakdownRates || {};
664
644
  const breakdownGridHtml = [400, 401, 403, 404, 429, 500, 502, 503, 504].map((code) => {
665
645
  const rate = breakdownRates[code] || 0;
@@ -683,11 +663,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
683
663
  h1 { color: #38bdf8; margin: 0; font-size: 2rem; }
684
664
  .meta { color: #94a3b8; font-size: 0.9rem; margin-top: 0.5rem; }
685
665
 
686
- /* Persona Controls Styling */
687
- .persona-toggle-container { background: #131c2e; padding: 0.5rem 1rem; border-radius: 8px; border: 1px solid #1e293b; display: flex; align-items: center; gap: 0.75rem; }
688
- .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; }
689
- .persona-btn.active { background: #38bdf8; border-color: #38bdf8; color: #0b111e; }
690
-
691
666
  .cards-wrapper { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-bottom: 1.5rem; }
692
667
  .metric-card { background: #131c2e; border: 1px solid #1e293b; border-radius: 6px; padding: 1.25rem; position: relative; }
693
668
  .card-title { font-size: 0.75rem; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; }
@@ -708,7 +683,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
708
683
  .gauge-container-box { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.25rem; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
709
684
  .gauge-title { font-size: 0.85rem; font-weight: bold; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 1rem; }
710
685
 
711
- .matrix-box { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.25rem; }
686
+ .matrix-box { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.25rem; display: flex; flex-direction: column; justify-content: space-between; }
712
687
  .matrix-title { font-size: 1.1rem; font-weight: bold; color: #ffffff; margin-bottom: 1rem; }
713
688
  .matrix-box .matrix-row { display: flex; justify-content: space-between; align-items: center; padding: 0.6rem 0; border-bottom: 1px solid #1e293b; }
714
689
  .matrix-box .matrix-row:last-child { border-bottom: none; }
@@ -740,59 +715,51 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
740
715
  <h1>\u{1F525} Blaze Core Performance Analysis</h1>
741
716
  <div class="meta">Target Script: <code>${config.targetScript}</code></div>
742
717
  </div>
743
-
744
- <!-- IMPLEMENTED: Persona Selector Toggle Buttons -->
745
- <div class="persona-toggle-container">
746
- <span style="font-size: 0.8rem; color: #64748b; font-weight: bold; text-transform: uppercase;">View Perspective:</span>
747
- <button class="persona-btn active" onclick="switchPersona('developer')">Developer</button>
748
- <button class="persona-btn" onclick="switchPersona('devops')">DevOps</button>
749
- <button class="persona-btn" onclick="switchPersona('executive')">Executive</button>
750
- </div>
751
718
  </div>
752
719
 
753
720
  <div class="cards-wrapper">
754
- <div class="metric-card p-dev">
721
+ <div class="metric-card">
755
722
  <div class="card-title">Apdex Score (T: 50ms)</div>
756
723
  <div class="card-value green">${cards.apdex.toFixed(2)}<span class="card-subtext">(Good)</span></div>
757
724
  </div>
758
- <div class="metric-card p-devops p-exec">
725
+ <div class="metric-card">
759
726
  <div class="card-title">Throughput</div>
760
727
  <div class="card-value orange">${cards.throughput.toFixed(1)}<span class="unit">/s</span></div>
761
728
  </div>
762
- <div class="metric-card p-devops">
729
+ <div class="metric-card">
763
730
  <div class="card-title">Network Bandwidth</div>
764
731
  <div class="card-value purple">${cards.bandwidth.toFixed(2)}<span class="unit">MB/s</span></div>
765
732
  </div>
766
- <div class="metric-card p-devops">
733
+ <div class="metric-card">
767
734
  <div class="card-title">Avg Time To First Byte</div>
768
735
  <div class="card-value">${cards.ttfb.toFixed(1)}<span class="unit">ms</span></div>
769
736
  </div>
770
- <div class="metric-card p-dev">
737
+ <div class="metric-card">
771
738
  <div class="card-title">DNS Lookup</div>
772
739
  <div class="card-value">${cards.dns.toFixed(2)}<span class="unit">ms</span></div>
773
740
  </div>
774
- <div class="metric-card p-dev">
741
+ <div class="metric-card">
775
742
  <div class="card-title">TCP Connect</div>
776
743
  <div class="card-value">${cards.tcp.toFixed(2)}<span class="unit">ms</span></div>
777
744
  </div>
778
- <div class="metric-card p-dev">
745
+ <div class="metric-card">
779
746
  <div class="card-title">TLS Handshake</div>
780
747
  <div class="card-value">${cards.tls.toFixed(2)}<span class="unit">ms</span></div>
781
748
  </div>
782
- <div class="metric-card p-dev p-exec">
749
+ <div class="metric-card">
783
750
  <div class="card-title">Stability (Std Dev)</div>
784
751
  <div class="card-value">&plusmn;${cards.stdDev.toFixed(1)}<span class="unit">ms</span></div>
785
752
  </div>
786
753
  </div>
787
754
 
788
755
  <div class="top-layout-grid">
789
- <div class="verdict-box p-devops p-exec">
756
+ <div class="verdict-box">
790
757
  <div class="verdict-title">\u{1F916} AI Stress-Testing Agent Verdict</div>
791
758
  <div class="verdict-text">${verdictReason}</div>
792
759
  <div class="verdict-waves">${waveListItems}</div>
793
760
  </div>
794
761
 
795
- <div class="gauge-container-box p-exec p-devops">
762
+ <div class="gauge-container-box">
796
763
  <div class="gauge-title">Blaze Run Health Score</div>
797
764
  <div style="position: relative; width: 140px; height: 140px; display: flex; align-items: center; justify-content: center;">
798
765
  <svg width="140" height="140" viewBox="0 0 140 140" style="transform: rotate(-90deg);">
@@ -808,53 +775,57 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
808
775
  </div>
809
776
  </div>
810
777
 
811
- <div class="matrix-box p-devops p-dev">
812
- <div class="matrix-title">\u{1F4CB} HTTP Response Matrix</div>
813
- <div class="matrix-row">
814
- <div class="matrix-label">Successful <span class="matrix-badge badge-2xx">2xx</span></div>
815
- <div class="matrix-value">${responseMatrix.total2xx}</div>
816
- </div>
817
- <div class="matrix-row">
818
- <div class="matrix-label">Client Error <span class="matrix-badge badge-4xx">4xx</span></div>
819
- <div class="matrix-value">${responseMatrix.total4xx}</div>
820
- </div>
821
- <div class="matrix-row">
822
- <div class="matrix-label">Server Error <span class="matrix-badge badge-5xx">5xx</span></div>
823
- <div class="matrix-value">${responseMatrix.total5xx}</div>
778
+ <div class="matrix-box">
779
+ <div>
780
+ <div class="matrix-title">\u{1F4CB} HTTP Response Matrix</div>
781
+ <div class="matrix-row">
782
+ <div class="matrix-label">Successful <span class="matrix-badge badge-2xx">2xx</span></div>
783
+ <div class="matrix-value">${responseMatrix.total2xx}</div>
784
+ </div>
785
+ <div class="matrix-row">
786
+ <div class="matrix-label">Client Error <span class="matrix-badge badge-4xx">4xx</span></div>
787
+ <div class="matrix-value">${responseMatrix.total4xx}</div>
788
+ </div>
789
+ <div class="matrix-row">
790
+ <div class="matrix-label">Server Error <span class="matrix-badge badge-5xx">5xx</span></div>
791
+ <div class="matrix-value">${responseMatrix.total5xx}</div>
792
+ </div>
824
793
  </div>
825
794
 
826
- <div class="matrix-title" style="margin-top: 1.5rem; font-size: 0.85rem; border-top: 1px solid #1e293b; padding-top: 1rem; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.05em;">
827
- \u{1F522} HTTP Status Code Breakdown Rate
828
- </div>
829
- <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
830
- ${breakdownGridHtml}
795
+ <div>
796
+ <div class="matrix-title" style="margin-top: 1.5rem; font-size: 0.85rem; border-top: 1px solid #1e293b; padding-top: 1rem; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.05em;">
797
+ \u{1F522} HTTP Status Code Breakdown Rate
798
+ </div>
799
+ <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
800
+ ${breakdownGridHtml}
801
+ </div>
831
802
  </div>
832
803
  </div>
833
804
  </div>
834
805
 
835
806
  <div class="charts-grid">
836
- <div class="graph-card p-devops">
807
+ <div class="graph-card">
837
808
  <div class="graph-title">\u{1F4CA} Throughput Velocity & Workload Volume</div>
838
809
  <div style="height: 280px; position: relative;">
839
810
  <canvas id="volumeChart"></canvas>
840
811
  </div>
841
812
  </div>
842
813
 
843
- <div class="graph-card p-devops">
814
+ <div class="graph-card">
844
815
  <div class="graph-title">\u{1F504} Active Concurrency (VUs) vs. TTF Trend</div>
845
816
  <div style="height: 280px; position: relative;">
846
817
  <canvas id="concurrencyChart"></canvas>
847
818
  </div>
848
819
  </div>
849
820
 
850
- <div class="graph-card p-dev">
821
+ <div class="graph-card">
851
822
  <div class="graph-title">\u{1F369} HTTP Status Code Proportions</div>
852
823
  <div style="height: 280px; position: relative;">
853
824
  <canvas id="statusDonutChart"></canvas>
854
825
  </div>
855
826
  </div>
856
827
 
857
- <div class="graph-card p-dev">
828
+ <div class="graph-card">
858
829
  <div class="graph-title">\u{1F4C8} Time-to-First-Byte Scatter Plot</div>
859
830
  <div style="height: 280px; position: relative;">
860
831
  <canvas id="ttfbScatterChart"></canvas>
@@ -862,7 +833,7 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
862
833
  </div>
863
834
  </div>
864
835
 
865
- <div class="card p-dev">
836
+ <div class="card">
866
837
  <h3>Telemetry Matrix Logs</h3>
867
838
  <table>
868
839
  <thead>
@@ -910,25 +881,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
910
881
  simThroughput.textContent = (baseThroughput * Math.min(factor, 2.5)).toFixed(0) + '/s';
911
882
  });
912
883
  }
913
-
914
- // Dynamic View Selection Switching Functionality
915
- function switchPersona(persona) {
916
- document.querySelectorAll('.persona-btn').forEach(btn => btn.classList.remove('active'));
917
- event.target.classList.add('active');
918
-
919
- // Hide all dynamic components initially
920
- const layouts = ['.p-dev', '.p-devops', '.p-exec'];
921
- layouts.forEach(selector => {
922
- document.querySelectorAll(selector).forEach(el => el.style.display = 'none');
923
- });
924
-
925
- // Show specific class tags tied to selected viewport context
926
- document.querySelectorAll('.p-' + persona).forEach(el => {
927
- if (el.tagName === 'TR') el.style.display = 'table-row';
928
- else if (el.classList.contains('metric-card')) el.style.display = 'block';
929
- else el.style.display = '';
930
- });
931
- }
932
884
 
933
885
  new Chart(document.getElementById('volumeChart'), {
934
886
  type: 'bar',
@@ -968,10 +920,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
968
920
  data: { datasets: [{ label: 'Processing Delay', data: ${JSON.stringify(scatterPoints)}, backgroundColor: '#a855f7' }] },
969
921
  options: { responsive: true, maintainAspectRatio: false }
970
922
  });
971
-
972
- // Initialize layout setup to display Developer view on start
973
- document.querySelectorAll('.p-devops, .p-exec').forEach(el => el.style.display = 'none');
974
- document.querySelectorAll('.p-dev').forEach(el => el.style.display = '');
975
923
  </script></body></html>`;
976
924
  try {
977
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.23",
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",