blaze-performance-tester 3.0.21 → 3.0.23
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 +91 -42
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -401,30 +401,50 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
401
401
|
}).join("");
|
|
402
402
|
let logClustersHtml = "";
|
|
403
403
|
if (semanticReport) {
|
|
404
|
+
const totalLogCount = semanticReport.clusters.reduce((sum, c) => sum + c.count, 0);
|
|
405
|
+
const uniquePatternsCount = semanticReport.clusters.length;
|
|
404
406
|
logClustersHtml = `
|
|
405
|
-
<div class="card" style="margin-top: 2rem;">
|
|
406
|
-
<h3
|
|
407
|
-
|
|
407
|
+
<div class="card" style="margin-top: 2rem; background: #131c2e; border: 1px solid #1e293b;">
|
|
408
|
+
<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;">
|
|
409
|
+
\u{1F9E0} Semantic Log Clustering & Error Classification
|
|
410
|
+
</h3>
|
|
411
|
+
<div style="color: #94a3b8; font-size: 0.9rem; margin-bottom: 1.5rem;">
|
|
412
|
+
Captured <strong style="color: #f8fafc;">${totalLogCount}</strong> raw failures grouped into <strong style="color: #f8fafc;">${uniquePatternsCount}</strong> unique structural patterns.
|
|
413
|
+
</div>
|
|
414
|
+
|
|
415
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
408
416
|
<thead>
|
|
409
|
-
<tr>
|
|
410
|
-
<th style="width:
|
|
411
|
-
<th style="width:
|
|
412
|
-
<th style="width: 10%;">Severity</th>
|
|
413
|
-
<th style="width:
|
|
417
|
+
<tr style="border-bottom: 1px solid #1e293b;">
|
|
418
|
+
<th style="width: 8%; padding: 0.75rem; text-align: left; color: #64748b; font-size: 0.85rem; font-weight: bold; text-transform: none;">Count</th>
|
|
419
|
+
<th style="width: 22%; padding: 0.75rem; text-align: left; color: #64748b; font-size: 0.85rem; font-weight: bold; text-transform: none;">Classification Category</th>
|
|
420
|
+
<th style="width: 10%; padding: 0.75rem; text-align: left; color: #64748b; font-size: 0.85rem; font-weight: bold; text-transform: none;">Severity</th>
|
|
421
|
+
<th style="width: 60%; padding: 0.75rem; text-align: left; color: #64748b; font-size: 0.85rem; font-weight: bold; text-transform: none;">Structural Abstract Blueprint / Dynamic Log Fingerprint</th>
|
|
414
422
|
</tr>
|
|
415
423
|
</thead>
|
|
416
424
|
<tbody>
|
|
417
425
|
${semanticReport.clusters.map((c) => {
|
|
418
|
-
let catColor = "#
|
|
419
|
-
if (c.category === "Environment_Infrastructure_Error") catColor = "#fb923c";
|
|
426
|
+
let catColor = "#fb923c";
|
|
420
427
|
if (c.category === "Authentication_Error") catColor = "#c084fc";
|
|
421
|
-
|
|
428
|
+
if (c.category === "Product_Error") catColor = "#f87171";
|
|
429
|
+
if (c.category === "Environment_Infrastructure_Error") catColor = "#fb923c";
|
|
430
|
+
let sevBg = c.severity === "CRITICAL" ? "#dc2626" : "#ea580c";
|
|
431
|
+
const rawTemplate = c.template || "";
|
|
432
|
+
const cleanedTemplate = rawTemplate.replace(/\[\d{4}-\d{2}-\d{2}.*?\]\s*/, "");
|
|
422
433
|
return `
|
|
423
|
-
<tr>
|
|
424
|
-
<td
|
|
425
|
-
<td
|
|
426
|
-
<td
|
|
427
|
-
|
|
434
|
+
<tr style="border-bottom: 1px solid #1e293b; vertical-align: top;">
|
|
435
|
+
<td style="padding: 1.25rem 0.75rem; font-size: 1.2rem; font-weight: bold; color: #f8fafc;">${c.count}</td>
|
|
436
|
+
<td style="padding: 1.25rem 0.75rem; color: ${catColor}; font-weight: 600; font-size: 0.95rem;">${c.category}</td>
|
|
437
|
+
<td style="padding: 1.25rem 0.75rem;">
|
|
438
|
+
<span style="background: ${sevBg}; color: #ffffff; padding: 0.2rem 0.5rem; border-radius: 4px; font-size: 0.7rem; font-weight: bold; letter-spacing: 0.05em;">${c.severity}</span>
|
|
439
|
+
</td>
|
|
440
|
+
<td style="padding: 1.25rem 0.75rem;">
|
|
441
|
+
<div style="background: #090d16; border-radius: 4px; padding: 0.6rem 0.8rem; border-left: 3px solid #1e293b; margin-bottom: 0.5rem;">
|
|
442
|
+
<code style="color: #cbd5e1; font-family: monospace; font-size: 0.9rem; white-space: pre-wrap; word-break: break-all;">${cleanedTemplate}</code>
|
|
443
|
+
</div>
|
|
444
|
+
<div style="color: #64748b; font-size: 0.8rem; font-family: monospace; padding-left: 0.2rem; line-height: 1.4;">
|
|
445
|
+
<span style="color: #475569;">Real Example Trace:</span> ${rawTemplate}
|
|
446
|
+
</div>
|
|
447
|
+
</td>
|
|
428
448
|
</tr>`;
|
|
429
449
|
}).join("")}
|
|
430
450
|
</tbody>
|
|
@@ -442,7 +462,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
442
462
|
h1 { color: #38bdf8; margin: 0; font-size: 2rem; }
|
|
443
463
|
.meta { color: #94a3b8; font-size: 0.9rem; margin-top: 0.5rem; }
|
|
444
464
|
|
|
445
|
-
/* \u{1F3B4} CARDS DASHBOARD GRID SYSTEM */
|
|
446
465
|
.cards-wrapper { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-bottom: 1.5rem; }
|
|
447
466
|
.metric-card { background: #131c2e; border: 1px solid #1e293b; border-radius: 6px; padding: 1.25rem; position: relative; }
|
|
448
467
|
.card-title { font-size: 0.75rem; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; }
|
|
@@ -472,8 +491,10 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
472
491
|
.badge-5xx { background: rgba(220, 38, 38, 0.2); color: #f87171; }
|
|
473
492
|
.matrix-value { font-size: 1rem; font-weight: bold; color: #ffffff; }
|
|
474
493
|
|
|
475
|
-
|
|
476
|
-
.
|
|
494
|
+
/* \u{1F4CA} TWO-COLUMN CHART GRID */
|
|
495
|
+
.charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 2rem; }
|
|
496
|
+
.graph-card { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.5rem; }
|
|
497
|
+
.graph-title { font-size: 1.1rem; font-weight: 700; color: #ffffff; margin-bottom: 1.2rem; display: flex; align-items: center; gap: 0.5rem; }
|
|
477
498
|
|
|
478
499
|
.card { background: #131c2e; border: 1px solid #1e293b; border-radius: 8px; padding: 1.5rem; }
|
|
479
500
|
h3 { margin-top: 0; color: #cbd5e1; border-bottom: 1px solid #1e293b; padding-bottom: 0.5rem; }
|
|
@@ -490,7 +511,6 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
490
511
|
<div class="meta">Target Script: <code>${config.targetScript}</code></div>
|
|
491
512
|
</div>
|
|
492
513
|
|
|
493
|
-
<!-- \u{1F3B4} METRICS CARDS GRID PANEL -->
|
|
494
514
|
<div class="cards-wrapper">
|
|
495
515
|
<div class="metric-card">
|
|
496
516
|
<div class="card-title">Apdex Score (T: 50ms)</div>
|
|
@@ -554,11 +574,22 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
554
574
|
</div>
|
|
555
575
|
</div>
|
|
556
576
|
|
|
557
|
-
<!-- \u{1F4C9}
|
|
558
|
-
<div class="
|
|
559
|
-
|
|
560
|
-
<div
|
|
561
|
-
<
|
|
577
|
+
<!-- \u{1F4C9} SPLIT CHARTS SYSTEM -->
|
|
578
|
+
<div class="charts-grid">
|
|
579
|
+
<!-- Chart 1: Volume Streams -->
|
|
580
|
+
<div class="graph-card">
|
|
581
|
+
<div class="graph-title">\u{1F4CA} Throughput Velocity & Workload Volume</div>
|
|
582
|
+
<div style="height: 280px; position: relative;">
|
|
583
|
+
<canvas id="volumeChart"></canvas>
|
|
584
|
+
</div>
|
|
585
|
+
</div>
|
|
586
|
+
|
|
587
|
+
<!-- Chart 2: Concurrency & Health Trends -->
|
|
588
|
+
<div class="graph-card">
|
|
589
|
+
<div class="graph-title">\u{1F504} Active Concurrency (VUs) vs. Time-to-Failure (TTF) Trend</div>
|
|
590
|
+
<div style="height: 280px; position: relative;">
|
|
591
|
+
<canvas id="concurrencyChart"></canvas>
|
|
592
|
+
</div>
|
|
562
593
|
</div>
|
|
563
594
|
</div>
|
|
564
595
|
|
|
@@ -595,7 +626,9 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
595
626
|
|
|
596
627
|
<script>
|
|
597
628
|
const labels = ${JSON.stringify(labels)};
|
|
598
|
-
|
|
629
|
+
|
|
630
|
+
// \u{1F6E0}\uFE0F Chart 1 Setup: Throughput Bar Streams
|
|
631
|
+
new Chart(document.getElementById('volumeChart'), {
|
|
599
632
|
type: 'bar',
|
|
600
633
|
data: {
|
|
601
634
|
labels: labels,
|
|
@@ -615,25 +648,45 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
615
648
|
stack: 'requests',
|
|
616
649
|
barPercentage: 0.95,
|
|
617
650
|
categoryPercentage: 0.95
|
|
618
|
-
}
|
|
651
|
+
}
|
|
652
|
+
]
|
|
653
|
+
},
|
|
654
|
+
options: {
|
|
655
|
+
responsive: true,
|
|
656
|
+
maintainAspectRatio: false,
|
|
657
|
+
plugins: {
|
|
658
|
+
legend: { position: 'top', labels: { color: '#94a3b8', font: { size: 11 } } }
|
|
659
|
+
},
|
|
660
|
+
scales: {
|
|
661
|
+
x: { grid: { color: '#1e293b' }, ticks: { color: '#64748b' } },
|
|
662
|
+
y: { stacked: true, grid: { color: '#1e293b' }, ticks: { color: '#64748b' } }
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
// \u{1F6E0}\uFE0F Chart 2 Setup: Concurrency & TTF Correlated Slopes
|
|
668
|
+
new Chart(document.getElementById('concurrencyChart'), {
|
|
669
|
+
type: 'line',
|
|
670
|
+
data: {
|
|
671
|
+
labels: labels,
|
|
672
|
+
datasets: [
|
|
619
673
|
{
|
|
620
674
|
label: 'Active VU Threads',
|
|
621
675
|
data: ${JSON.stringify(activeThreadsData)},
|
|
622
|
-
type: 'line',
|
|
623
676
|
borderColor: '#38bdf8',
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
677
|
+
backgroundColor: 'rgba(56, 189, 248, 0.1)',
|
|
678
|
+
borderWidth: 2.5,
|
|
679
|
+
pointRadius: 4,
|
|
680
|
+
fill: true,
|
|
627
681
|
yAxisID: 'yThreads'
|
|
628
682
|
},
|
|
629
683
|
{
|
|
630
684
|
label: 'Time-to-Failure (TTF) Trend',
|
|
631
685
|
data: ${JSON.stringify(ttfTrendData)},
|
|
632
|
-
type: 'line',
|
|
633
686
|
borderColor: '#f43f5e',
|
|
634
|
-
borderWidth:
|
|
635
|
-
borderDash: [
|
|
636
|
-
pointRadius:
|
|
687
|
+
borderWidth: 2,
|
|
688
|
+
borderDash: [5, 5],
|
|
689
|
+
pointRadius: 3,
|
|
637
690
|
fill: false,
|
|
638
691
|
yAxisID: 'yTtf'
|
|
639
692
|
}
|
|
@@ -643,16 +696,12 @@ function exportHtmlDashboard(history, config, verdictReason, semanticReport, res
|
|
|
643
696
|
responsive: true,
|
|
644
697
|
maintainAspectRatio: false,
|
|
645
698
|
plugins: {
|
|
646
|
-
legend: {
|
|
647
|
-
position: 'top',
|
|
648
|
-
labels: { color: '#94a3b8', boxWidth: 12, font: { size: 11 } }
|
|
649
|
-
}
|
|
699
|
+
legend: { position: 'top', labels: { color: '#94a3b8', font: { size: 11 } } }
|
|
650
700
|
},
|
|
651
701
|
scales: {
|
|
652
702
|
x: { grid: { color: '#1e293b' }, ticks: { color: '#64748b' } },
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
yTtf: { position: 'right', display: false, grid: { drawOnChartArea: false } }
|
|
703
|
+
yThreads: { position: 'left', grid: { color: '#1e293b' }, ticks: { color: '#38bdf8' }, title: { display: true, text: 'VUs / Threads', color: '#38bdf8' } },
|
|
704
|
+
yTtf: { position: 'right', grid: { drawOnChartArea: false }, ticks: { color: '#f43f5e' }, title: { display: true, text: 'TTF Index / Latency ms', color: '#f43f5e' } }
|
|
656
705
|
}
|
|
657
706
|
}
|
|
658
707
|
});
|
|
Binary file
|