new options

This commit is contained in:
Mateusz Gruszczyński
2025-11-03 10:22:36 +01:00
parent df70118653
commit 014dc76ff6
2 changed files with 230 additions and 147 deletions

View File

@@ -1,22 +1,92 @@
document.getElementById('filter_status')?.addEventListener('change', filterLogs);
document.getElementById('filter_threat')?.addEventListener('change', filterLogs);
document.getElementById('filter_method')?.addEventListener('change', filterLogs);
document.getElementById('filter_threats_only')?.addEventListener('change', filterLogs);
function filterLogs() {
const statusFilter = document.getElementById('filter_status')?.value;
const threatFilter = document.getElementById('filter_threat')?.value;
const methodFilter = document.getElementById('filter_method')?.value;
const threatsOnly = document.getElementById('filter_threats_only')?.checked;
document.addEventListener('DOMContentLoaded', function() {
const filterIp = document.getElementById('filter_ip');
const filterStatus = document.getElementById('filter_status');
const filterMethod = document.getElementById('filter_method');
const filterThreats = document.getElementById('filter_threats');
const resetBtn = document.getElementById('reset_filters');
document.querySelectorAll('.log-row').forEach(row => {
let show = true;
const logsTable = document.getElementById('logs_table');
const allRows = Array.from(document.querySelectorAll('.log-row'));
// Filter function
function applyFilters() {
const ipValue = filterIp.value.toLowerCase();
const statusValue = filterStatus.value;
const methodValue = filterMethod.value;
const showThreats = filterThreats.checked;
if (statusFilter && row.dataset.status !== statusFilter) show = false;
if (threatFilter && row.dataset.threat !== threatFilter) show = false;
if (methodFilter && row.dataset.method !== methodFilter) show = false;
if (threatsOnly && row.dataset.threatCount === '0') show = false;
let visibleCount = 0;
let threatCount = 0;
let count2xx = 0, count4xx = 0, count5xx = 0;
const uniqueIps = new Set();
row.style.display = show ? '' : 'none';
allRows.forEach(row => {
const ip = row.dataset.ip;
const status = row.dataset.status;
const method = row.dataset.method;
const hasThreat = row.dataset.threats === '1';
let show = true;
// IP filter
if (ipValue && !ip.includes(ipValue)) {
show = false;
}
// Status filter
if (statusValue) {
const statusStart = statusValue;
if (!status.startsWith(statusStart)) {
show = false;
}
}
// Method filter
if (methodValue && method !== methodValue) {
show = false;
}
// Threats filter
if (!showThreats && hasThreat) {
show = false;
}
row.style.display = show ? '' : 'none';
if (show) {
visibleCount++;
if (hasThreat) threatCount++;
if (status.startsWith('2')) count2xx++;
if (status.startsWith('4')) count4xx++;
if (status.startsWith('5')) count5xx++;
uniqueIps.add(ip);
}
});
// Update stats
document.getElementById('stat_total').textContent = visibleCount;
document.getElementById('stat_threats').textContent = threatCount;
document.getElementById('stat_2xx').textContent = count2xx;
document.getElementById('stat_4xx').textContent = count4xx;
document.getElementById('stat_5xx').textContent = count5xx;
document.getElementById('stat_ips').textContent = uniqueIps.size;
}
// Event listeners
filterIp.addEventListener('input', applyFilters);
filterStatus.addEventListener('change', applyFilters);
filterMethod.addEventListener('change', applyFilters);
filterThreats.addEventListener('change', applyFilters);
// Reset button
resetBtn.addEventListener('click', function() {
filterIp.value = '';
filterStatus.value = '';
filterMethod.value = '';
filterThreats.checked = true;
applyFilters();
});
}
// Initial stats
applyFilters();
});