From 9a9d1b0feeea8927c55a97c1929e07da43dde596 Mon Sep 17 00:00:00 2001 From: 6C656C65 <73671374+6C656C65@users.noreply.github.com> Date: Mon, 9 Jun 2025 19:20:48 +0200 Subject: [PATCH 01/12] monitoring: add filter input --- pyproxy/handlers/https.py | 1 - pyproxy/monitoring/static/monitoring.js | 74 +++++++++++++++++++++---- pyproxy/monitoring/static/style.css | 29 ++++++++++ pyproxy/monitoring/templates/index.html | 6 +- 4 files changed, 98 insertions(+), 12 deletions(-) diff --git a/pyproxy/handlers/https.py b/pyproxy/handlers/https.py index 17ec5ce..08be289 100644 --- a/pyproxy/handlers/https.py +++ b/pyproxy/handlers/https.py @@ -415,7 +415,6 @@ def transfer_data_between_sockets(self, client_socket, server_socket): data ) except (socket.error, OSError): - self.logger_config.console_logger("error") client_socket.close() server_socket.close() self.active_connections.pop(threading.get_ident(), None) diff --git a/pyproxy/monitoring/static/monitoring.js b/pyproxy/monitoring/static/monitoring.js index 21f6e98..147a3e0 100644 --- a/pyproxy/monitoring/static/monitoring.js +++ b/pyproxy/monitoring/static/monitoring.js @@ -30,18 +30,31 @@ async function fetchAllData() { `).join('')} `; - document.getElementById('connections-section').innerHTML = ` -
No active connections.
' - : monitoring.active_connections.map(conn => ` -Client: ${conn.client_ip}:${conn.client_port}
-Target: ${conn.target_domain} (${conn.target_ip}:${conn.target_port})
-Sent: ${conn.bytes_sent} bytes
-Received: ${formatBytes(conn.bytes_received)}
-| Client | +Target | +Sent | +Received | +
|---|---|---|---|
| ${conn.client_ip}:${conn.client_port} | +${conn.target_domain} (${conn.target_ip}:${conn.target_port}) | +${conn.bytes_sent} bytes | +${formatBytes(conn.bytes_received)} | +
Cancel inspect: ${config.ssl_config.cancel_inspect ? `${config.ssl_config.cancel_inspect}` : '✗'}
`; + const searchInput = document.getElementById('connection-search'); + if (searchInput) { + filterConnections(searchInput.value); + } + } catch (err) { console.error('Error loading data:', err); } @@ -86,6 +104,35 @@ function formatCountdown(seconds) { return `${m}:${s}`; } +function filterConnections(filter) { + filter = filter.toLowerCase(); + const rows = document.querySelectorAll('.connection-table tbody tr'); + rows.forEach(row => { + const client = row.children[0].textContent.toLowerCase(); + const target = row.children[1].textContent.toLowerCase(); + + row.querySelectorAll('td').forEach(td => { + td.innerHTML = td.textContent; + }); + + const match = client.includes(filter) || target.includes(filter); + row.style.display = match ? '' : 'none'; + + if (match && filter.length > 0) { + if (client.includes(filter)) { + const originalText = row.children[0].textContent; + const regex = new RegExp(`(${filter})`, 'gi'); + row.children[0].innerHTML = originalText.replace(regex, '$1'); + } + if (target.includes(filter)) { + const originalText = row.children[1].textContent; + const regex = new RegExp(`(${filter})`, 'gi'); + row.children[1].innerHTML = originalText.replace(regex, '$1'); + } + } + }); +} + setInterval(() => { countdown--; if (countdown <= 0) fetchAllData(); @@ -137,6 +184,13 @@ window.addEventListener('DOMContentLoaded', () => { } activateTab(tabs[0]); + const searchInput = document.getElementById('connection-search'); + if (searchInput) { + searchInput.addEventListener('input', () => { + filterConnections(searchInput.value); + }); + } + fetchAllData(); updateCountdown(); }); diff --git a/pyproxy/monitoring/static/style.css b/pyproxy/monitoring/static/style.css index 7941bb7..1bcbd15 100644 --- a/pyproxy/monitoring/static/style.css +++ b/pyproxy/monitoring/static/style.css @@ -140,4 +140,33 @@ h1 { .tab-content.active { display: block; +} + +.connection-table { + width: 100%; + border-collapse: collapse; + margin-top: 10px; +} + +.connection-table th, +.connection-table td { + border: 1px solid #ccc; + padding: 8px; + text-align: left; +} + +.connection-table th { + background-color: #f2f2f2; +} + +#connections-section { + max-width: 100%; +} + +input#connection-search, .connection-table { + box-sizing: border-box; +} + +.highlight { + background-color: yellow; } \ No newline at end of file diff --git a/pyproxy/monitoring/templates/index.html b/pyproxy/monitoring/templates/index.html index 812a100..1571810 100644 --- a/pyproxy/monitoring/templates/index.html +++ b/pyproxy/monitoring/templates/index.html @@ -33,7 +33,11 @@