httpd: add worker test rate tracking

Track per-worker test rates using 120s sliding window.
Display combined rate in dashboard and individual rates
in worker cards.
This commit is contained in:
Username
2025-12-28 16:43:53 +01:00
parent 2bc00d3ebd
commit 18ae73bfb8
2 changed files with 51 additions and 8 deletions

View File

@@ -619,13 +619,8 @@ function updateWorkers(data) {
// Main panel distributed workers
if ($('dwTested')) $('dwTested').textContent = fmt(data.summary.total_tested);
if ($('dwWorking')) $('dwWorking').textContent = fmt(data.summary.total_working);
// Calculate combined rate from worker stats
var combinedRate = 0;
if (data.workers) {
data.workers.forEach(function(w) {
if (w.active && w.test_rate) combinedRate += w.test_rate;
});
}
// Combined rate from summary
var combinedRate = data.summary.combined_rate || 0;
if ($('dwRate')) $('dwRate').textContent = combinedRate > 0 ? combinedRate.toFixed(1) + '/s' : '-';
}
@@ -652,6 +647,7 @@ function updateWorkers(data) {
var statusClass = w.active ? 'grn' : 'red';
var statusText = w.active ? 'ACTIVE' : 'OFFLINE';
var successRate = w.success_rate || 0;
var testRate = w.test_rate || 0;
var rateClass = successRate >= 50 ? 'grn' : (successRate >= 20 ? 'yel' : 'red');
var profBadge = w.profiling ? '<span class="tag tag-warn" style="margin-left:4px;font-size:9px">PROF</span>' : '';
@@ -661,10 +657,10 @@ function updateWorkers(data) {
'<span><span class="tag tag-' + (w.active ? 'ok' : 'err') + '">' + statusText + '</span>' + profBadge + '</span>' +
'</div>' +
'<div class="stats-wrap" style="margin:0">' +
'<div class="stat-row"><span class="stat-lbl">Rate</span><span class="stat-val cyn">' + (testRate > 0 ? testRate.toFixed(1) + '/s' : '-') + '</span></div>' +
'<div class="stat-row"><span class="stat-lbl">Tested</span><span class="stat-val">' + fmt(w.proxies_tested) + '</span></div>' +
'<div class="stat-row"><span class="stat-lbl">Working</span><span class="stat-val grn">' + fmt(w.proxies_working) + '</span></div>' +
'<div class="stat-row"><span class="stat-lbl">Success</span><span class="stat-val ' + rateClass + '">' + successRate.toFixed(1) + '%</span></div>' +
'<div class="stat-row"><span class="stat-lbl">Jobs</span><span class="stat-val">' + fmt(w.jobs_completed) + '</span></div>' +
'</div>' +
'<div style="font-size:0.75em;color:var(--dim);margin-top:8px">' +
'IP: ' + w.ip + ' | Last: ' + formatAge(w.age) +