Add WHOIS stats to status page with adaptive fetcher improvements
- Add WHOIS Fetcher card showing fresh/stale/never-fetched ASN counts - Display hourly success/error counts and current fetch interval - Increase max WHOIS rate to 1/sec (down from 10 sec minimum) - Select random stale ASN instead of oldest for better distribution - Add index on whois_updated_at for query performance - Track success/error timestamps for hourly stats - Add GetWHOISStats database method for freshness statistics
This commit is contained in:
@@ -177,8 +177,40 @@
|
||||
<span class="metric-value" id="ipv6_updates_per_sec">-</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="status-card">
|
||||
<h2>WHOIS Fetcher</h2>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Fresh ASNs</span>
|
||||
<span class="metric-value" id="whois_fresh">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Stale ASNs</span>
|
||||
<span class="metric-value" id="whois_stale">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Never Fetched</span>
|
||||
<span class="metric-value" id="whois_never">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Fresh %</span>
|
||||
<span class="metric-value" id="whois_percent">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Successes (1h)</span>
|
||||
<span class="metric-value" id="whois_successes">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Errors (1h)</span>
|
||||
<span class="metric-value" id="whois_errors">-</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">Current Interval</span>
|
||||
<span class="metric-value" id="whois_interval">-</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="status-grid">
|
||||
<div class="status-card">
|
||||
<h2>IPv4 Prefix Distribution</h2>
|
||||
@@ -318,7 +350,15 @@
|
||||
document.getElementById('ipv6_routes').textContent = '-';
|
||||
document.getElementById('ipv4_updates_per_sec').textContent = '-';
|
||||
document.getElementById('ipv6_updates_per_sec').textContent = '-';
|
||||
|
||||
document.getElementById('whois_fresh').textContent = '-';
|
||||
document.getElementById('whois_stale').textContent = '-';
|
||||
document.getElementById('whois_never').textContent = '-';
|
||||
document.getElementById('whois_percent').textContent = '-';
|
||||
document.getElementById('whois_successes').textContent = '-';
|
||||
document.getElementById('whois_errors').textContent = '-';
|
||||
document.getElementById('whois_errors').className = 'metric-value';
|
||||
document.getElementById('whois_interval').textContent = '-';
|
||||
|
||||
// Clear handler stats
|
||||
document.getElementById('handler-stats-container').innerHTML = '';
|
||||
|
||||
@@ -368,7 +408,20 @@
|
||||
document.getElementById('ipv6_routes').textContent = formatNumber(data.ipv6_routes);
|
||||
document.getElementById('ipv4_updates_per_sec').textContent = data.ipv4_updates_per_sec.toFixed(1);
|
||||
document.getElementById('ipv6_updates_per_sec').textContent = data.ipv6_updates_per_sec.toFixed(1);
|
||||
|
||||
|
||||
// Update WHOIS stats
|
||||
if (data.whois_stats) {
|
||||
document.getElementById('whois_fresh').textContent = formatNumber(data.whois_stats.fresh_asns);
|
||||
document.getElementById('whois_stale').textContent = formatNumber(data.whois_stats.stale_asns);
|
||||
document.getElementById('whois_never').textContent = formatNumber(data.whois_stats.never_fetched);
|
||||
document.getElementById('whois_percent').textContent = data.whois_stats.fresh_percent.toFixed(1) + '%';
|
||||
document.getElementById('whois_successes').textContent = formatNumber(data.whois_stats.successes_last_hour);
|
||||
const errorsEl = document.getElementById('whois_errors');
|
||||
errorsEl.textContent = formatNumber(data.whois_stats.errors_last_hour);
|
||||
errorsEl.className = 'metric-value' + (data.whois_stats.errors_last_hour > 0 ? ' disconnected' : '');
|
||||
document.getElementById('whois_interval').textContent = data.whois_stats.current_interval;
|
||||
}
|
||||
|
||||
// Update handler stats
|
||||
updateHandlerStats(data.handler_stats || []);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user