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 +41 -93
- package/dist/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
749
|
+
<div class="metric-card">
|
|
783
750
|
<div class="card-title">Stability (Std Dev)</div>
|
|
784
751
|
<div class="card-value">±${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
|
|
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
|
|
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
|
|
812
|
-
<div
|
|
813
|
-
|
|
814
|
-
<div class="matrix-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
<div class="matrix-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
<div class="matrix-
|
|
823
|
-
|
|
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
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|