feat: add server-side session filtering with input bytes and human score
Replace client-side session table filtering with server-side filtering via a new /fragments/recent-sessions htmx endpoint. Add InputBytes column to session tables, Human score > 0 checkbox filter, and Sort by Input Bytes option to help identify sessions with actual shell interaction. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,10 @@
|
||||
var until = form.elements['until'].value;
|
||||
if (since) params.set('since', since);
|
||||
if (until) params.set('until', until);
|
||||
var humanScore = form.elements['human_score'];
|
||||
if (humanScore && humanScore.checked) params.set('human_score', '1');
|
||||
var sortBy = form.elements['sort'];
|
||||
if (sortBy && sortBy.value) params.set('sort', sortBy.value);
|
||||
return params.toString();
|
||||
}
|
||||
|
||||
@@ -228,33 +232,20 @@
|
||||
if (val) params.set(name, val);
|
||||
});
|
||||
|
||||
var humanScore = form.elements['human_score'];
|
||||
if (humanScore && humanScore.checked) params.set('human_score', '1');
|
||||
var sortBy = form.elements['sort'];
|
||||
if (sortBy && sortBy.value) params.set('sort', sortBy.value);
|
||||
|
||||
var target = document.getElementById('dashboard-content');
|
||||
if (target) {
|
||||
var url = '/fragments/dashboard-content?' + params.toString();
|
||||
htmx.ajax('GET', url, {target: '#dashboard-content', swap: 'innerHTML'});
|
||||
}
|
||||
|
||||
// Client-side filter for recent sessions table
|
||||
filterSessionsTable(form);
|
||||
}
|
||||
|
||||
function filterSessionsTable(form) {
|
||||
var ip = form.elements['ip'].value.toLowerCase();
|
||||
var country = form.elements['country'].value.toLowerCase();
|
||||
var username = form.elements['username'].value.toLowerCase();
|
||||
|
||||
var rows = document.querySelectorAll('#recent-sessions-table tbody tr');
|
||||
rows.forEach(function(row) {
|
||||
var cells = row.querySelectorAll('td');
|
||||
if (cells.length < 4) { row.style.display = ''; return; }
|
||||
|
||||
var show = true;
|
||||
if (ip && cells[1].textContent.toLowerCase().indexOf(ip) === -1) show = false;
|
||||
if (country && cells[2].textContent.toLowerCase().indexOf(country) === -1) show = false;
|
||||
if (username && cells[3].textContent.toLowerCase().indexOf(username) === -1) show = false;
|
||||
|
||||
row.style.display = show ? '' : 'none';
|
||||
});
|
||||
// Server-side filter for recent sessions table
|
||||
var sessionsUrl = '/fragments/recent-sessions?' + params.toString();
|
||||
htmx.ajax('GET', sessionsUrl, {target: '#recent-sessions-table tbody', swap: 'innerHTML'});
|
||||
}
|
||||
|
||||
window.clearFilters = function() {
|
||||
|
||||
Reference in New Issue
Block a user